feat: API 통합 2차 작업 완료

- 자동 로그인 구현: 앱 시작 시 토큰 확인 후 적절한 화면으로 라우팅
- AuthInterceptor 개선: AuthService와 통합하여 토큰 관리 일원화
- 로그아웃 기능 개선: AuthService를 사용한 API 로그아웃 처리
- 대시보드 API 연동: MockDataService에서 실제 API로 완전 전환
  - Dashboard DTO 모델 생성 (OverviewStats, RecentActivity 등)
  - DashboardRemoteDataSource 및 DashboardService 구현
  - OverviewController를 ChangeNotifier 패턴으로 개선
  - OverviewScreenRedesign에 Provider 패턴 적용
- API 통합 진행 상황 문서 업데이트
This commit is contained in:
JiWoong Sul
2025-07-24 15:55:05 +09:00
parent c573096d84
commit a13c485302
24 changed files with 2138 additions and 206 deletions

View File

@@ -0,0 +1,42 @@
import 'package:dartz/dartz.dart';
import 'package:injectable/injectable.dart';
import 'package:superport/core/errors/failures.dart';
import 'package:superport/data/datasources/remote/dashboard_remote_datasource.dart';
import 'package:superport/data/models/dashboard/equipment_status_distribution.dart';
import 'package:superport/data/models/dashboard/expiring_license.dart';
import 'package:superport/data/models/dashboard/overview_stats.dart';
import 'package:superport/data/models/dashboard/recent_activity.dart';
abstract class DashboardService {
Future<Either<Failure, OverviewStats>> getOverviewStats();
Future<Either<Failure, List<RecentActivity>>> getRecentActivities();
Future<Either<Failure, EquipmentStatusDistribution>> getEquipmentStatusDistribution();
Future<Either<Failure, List<ExpiringLicense>>> getExpiringLicenses({int days = 30});
}
@LazySingleton(as: DashboardService)
class DashboardServiceImpl implements DashboardService {
final DashboardRemoteDataSource _remoteDataSource;
DashboardServiceImpl(this._remoteDataSource);
@override
Future<Either<Failure, OverviewStats>> getOverviewStats() async {
return await _remoteDataSource.getOverviewStats();
}
@override
Future<Either<Failure, List<RecentActivity>>> getRecentActivities() async {
return await _remoteDataSource.getRecentActivities();
}
@override
Future<Either<Failure, EquipmentStatusDistribution>> getEquipmentStatusDistribution() async {
return await _remoteDataSource.getEquipmentStatusDistribution();
}
@override
Future<Either<Failure, List<ExpiringLicense>>> getExpiringLicenses({int days = 30}) async {
return await _remoteDataSource.getExpiringLicenses(days: days);
}
}