chnages has been made
This commit is contained in:
@@ -13,11 +13,13 @@ abstract class AttendanceRemoteDataSource {
|
||||
Future<AttendanceResponseDto> login({
|
||||
required String employeeId,
|
||||
required File faceImage,
|
||||
bool localAuth = false,
|
||||
});
|
||||
|
||||
Future<AttendanceResponseDto> logout({
|
||||
required String employeeId,
|
||||
required File faceImage,
|
||||
bool localAuth = false,
|
||||
});
|
||||
|
||||
Future<List<AttendanceRecordDto>> getAttendanceRecords({
|
||||
@@ -43,11 +45,13 @@ class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
|
||||
Future<AttendanceResponseDto> login({
|
||||
required String employeeId,
|
||||
required File faceImage,
|
||||
bool localAuth = false,
|
||||
}) async {
|
||||
try {
|
||||
final formData = FormData.fromMap({
|
||||
'EmployeeId': employeeId,
|
||||
'FaceImage': await MultipartFile.fromFile(faceImage.path),
|
||||
'IsAuth': localAuth.toString(),
|
||||
});
|
||||
|
||||
final response = await apiClient.post(
|
||||
@@ -107,11 +111,13 @@ class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
|
||||
Future<AttendanceResponseDto> logout({
|
||||
required String employeeId,
|
||||
required File faceImage,
|
||||
bool localAuth = false,
|
||||
}) async {
|
||||
try {
|
||||
final formData = FormData.fromMap({
|
||||
'EmployeeId': employeeId,
|
||||
'FaceImage': await MultipartFile.fromFile(faceImage.path),
|
||||
'IsAuth': localAuth.toString(),
|
||||
});
|
||||
|
||||
final response = await apiClient.post(
|
||||
|
||||
49
lib/data/datasources/theme_remote_data_source.dart
Normal file
49
lib/data/datasources/theme_remote_data_source.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import '../../core/error/exceptions.dart';
|
||||
import '../../core/network/api_client.dart';
|
||||
import '../dto/theme_response_dto.dart';
|
||||
|
||||
abstract class ThemeRemoteDataSource {
|
||||
Future<ThemeDataDto> getTheme();
|
||||
}
|
||||
|
||||
class ThemeRemoteDataSourceImpl implements ThemeRemoteDataSource {
|
||||
final ApiClient apiClient;
|
||||
|
||||
ThemeRemoteDataSourceImpl({required this.apiClient});
|
||||
|
||||
@override
|
||||
Future<ThemeDataDto> getTheme() async {
|
||||
try {
|
||||
debugPrint('[ThemeDataSource] Calling GET /Theme (with auth)...');
|
||||
|
||||
final res = await apiClient.get('/Theme'); // ✅ no custom headers
|
||||
|
||||
debugPrint('[ThemeDataSource] Status: ${res.statusCode}');
|
||||
debugPrint('[ThemeDataSource] Data: ${res.data}');
|
||||
|
||||
if (res.statusCode == 200) {
|
||||
final dto = ThemeResponseDto.fromJson(
|
||||
Map<String, dynamic>.from(res.data),
|
||||
);
|
||||
|
||||
if (dto.isSuccess && dto.data != null) {
|
||||
debugPrint('[ThemeDataSource] ✅ logo = ${dto.data!.logo}');
|
||||
return dto.data!;
|
||||
}
|
||||
|
||||
throw ServerException(message: dto.message ?? 'Theme request failed');
|
||||
}
|
||||
|
||||
throw ServerException(
|
||||
message: 'Theme request failed (code ${res.statusCode})',
|
||||
);
|
||||
} on ServerException {
|
||||
rethrow;
|
||||
} catch (e, stack) {
|
||||
debugPrint('[ThemeDataSource] ❌ Exception: $e');
|
||||
debugPrint('[ThemeDataSource] ❌ Stack: $stack');
|
||||
throw ServerException(message: e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
36
lib/data/dto/theme_response_dto.dart
Normal file
36
lib/data/dto/theme_response_dto.dart
Normal file
@@ -0,0 +1,36 @@
|
||||
class ThemeResponseDto {
|
||||
final int statusCode;
|
||||
final bool isSuccess;
|
||||
final String? message;
|
||||
final ThemeDataDto? data;
|
||||
|
||||
ThemeResponseDto({
|
||||
required this.statusCode,
|
||||
required this.isSuccess,
|
||||
required this.message,
|
||||
required this.data,
|
||||
});
|
||||
|
||||
factory ThemeResponseDto.fromJson(Map<String, dynamic> json) {
|
||||
return ThemeResponseDto(
|
||||
statusCode: json['statusCode'] ?? 0,
|
||||
isSuccess: json['isSuccess'] ?? false,
|
||||
message: json['message']?.toString(),
|
||||
data: json['data'] == null ? null : ThemeDataDto.fromJson(json['data']),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class ThemeDataDto {
|
||||
final String name;
|
||||
final String logo;
|
||||
|
||||
ThemeDataDto({required this.name, required this.logo});
|
||||
|
||||
factory ThemeDataDto.fromJson(Map<String, dynamic> json) {
|
||||
return ThemeDataDto(
|
||||
name: (json['name'] ?? '').toString(),
|
||||
logo: (json['logo'] ?? '').toString(),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ class AttendanceRepositoryImpl implements AttendanceRepository {
|
||||
final dto = await remoteDataSource.login(
|
||||
employeeId: request.employeeId,
|
||||
faceImage: request.faceImage,
|
||||
localAuth: request.localAuth,
|
||||
);
|
||||
|
||||
return AttendanceResponseModel(
|
||||
@@ -34,6 +35,7 @@ class AttendanceRepositoryImpl implements AttendanceRepository {
|
||||
final dto = await remoteDataSource.logout(
|
||||
employeeId: request.employeeId,
|
||||
faceImage: request.faceImage,
|
||||
localAuth: request.localAuth,
|
||||
);
|
||||
|
||||
return AttendanceResponseModel(
|
||||
|
||||
24
lib/data/repositories/theme_repository_impl.dart
Normal file
24
lib/data/repositories/theme_repository_impl.dart
Normal file
@@ -0,0 +1,24 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import '../../core/error/failures.dart';
|
||||
import '../../core/error/exceptions.dart';
|
||||
import '../../domain/models/theme_model.dart';
|
||||
import '../../domain/repositories/theme_repository.dart';
|
||||
import '../datasources/theme_remote_data_source.dart';
|
||||
|
||||
class ThemeRepositoryImpl implements ThemeRepository {
|
||||
final ThemeRemoteDataSource remote;
|
||||
|
||||
ThemeRepositoryImpl({required this.remote});
|
||||
|
||||
@override
|
||||
Future<Either<Failure, ThemeModel>> getTheme() async {
|
||||
try {
|
||||
final dto = await remote.getTheme();
|
||||
return Right(ThemeModel(name: dto.name, logo: dto.logo));
|
||||
} on ServerException catch (e) {
|
||||
return Left(ServerFailure(e.message));
|
||||
} catch (e) {
|
||||
return Left(ServerFailure(e.toString()));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user