Update Saqel Platform: 2026-09-05 23:24:49
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import '../../core/services/storage_service.dart';
|
||||
import '../../core/utils/app_logger.dart';
|
||||
import '../../data/models/teacher_models.dart';
|
||||
import '../../data/repositories/teacher_repository.dart';
|
||||
|
||||
abstract class TeacherAuthState {}
|
||||
|
||||
class TeacherAuthInitial extends TeacherAuthState {}
|
||||
class TeacherAuthLoading extends TeacherAuthState {}
|
||||
|
||||
class TeacherAuthOtpSent extends TeacherAuthState {
|
||||
final String phoneNumber;
|
||||
TeacherAuthOtpSent({required this.phoneNumber});
|
||||
}
|
||||
|
||||
class TeacherAuthenticated extends TeacherAuthState {
|
||||
final TeacherProfileModel profile;
|
||||
TeacherAuthenticated({required this.profile});
|
||||
}
|
||||
|
||||
class TeacherUnauthenticated extends TeacherAuthState {}
|
||||
|
||||
class TeacherAuthError extends TeacherAuthState {
|
||||
final String message;
|
||||
TeacherAuthError(this.message);
|
||||
}
|
||||
|
||||
class TeacherAuthCubit extends Cubit<TeacherAuthState> {
|
||||
final TeacherRepository repository;
|
||||
final StorageService _storage;
|
||||
|
||||
TeacherAuthCubit({
|
||||
required this.repository,
|
||||
StorageService? storage,
|
||||
}) : _storage = storage ?? StorageService(),
|
||||
super(TeacherAuthInitial());
|
||||
|
||||
Future<void> checkSession() async {
|
||||
AppLogger.log('Checking Teacher Session...', tag: 'TEACHER_AUTH');
|
||||
emit(TeacherAuthLoading());
|
||||
try {
|
||||
final token = await _storage.getToken();
|
||||
if (token == null || token.isEmpty) {
|
||||
AppLogger.log('No teacher token -> Unauthenticated', tag: 'TEACHER_AUTH');
|
||||
emit(TeacherUnauthenticated());
|
||||
return;
|
||||
}
|
||||
|
||||
final profile = await repository.getProfileStatus();
|
||||
AppLogger.log('Teacher authenticated: ${profile.name} (${profile.specialization})', tag: 'TEACHER_AUTH');
|
||||
emit(TeacherAuthenticated(profile: profile));
|
||||
} catch (e) {
|
||||
AppLogger.error('Session check failed', error: e, tag: 'TEACHER_AUTH');
|
||||
emit(TeacherUnauthenticated());
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> sendOtp(String phoneNumber) async {
|
||||
emit(TeacherAuthLoading());
|
||||
try {
|
||||
final res = await repository.requestOtp(phoneNumber);
|
||||
if (res['status'] == 'success') {
|
||||
emit(TeacherAuthOtpSent(phoneNumber: phoneNumber));
|
||||
} else {
|
||||
emit(TeacherAuthError(res['message']?.toString() ?? 'فشل إرسال رمز التحقق'));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(TeacherAuthError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> verifyOtp(String phoneNumber, String otp, {String? fullName}) async {
|
||||
emit(TeacherAuthLoading());
|
||||
try {
|
||||
final res = await repository.verifyOtp(phoneNumber, otp, fullName: fullName);
|
||||
if (res['status'] == 'success') {
|
||||
final profile = await repository.getProfileStatus();
|
||||
emit(TeacherAuthenticated(profile: profile));
|
||||
} else {
|
||||
emit(TeacherAuthError(res['message']?.toString() ?? 'رمز التحقق غير صحيح'));
|
||||
}
|
||||
} catch (e) {
|
||||
emit(TeacherAuthError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateProfile({
|
||||
required String fullName,
|
||||
required String specialization,
|
||||
required String schoolName,
|
||||
required List<String> gradesTaught,
|
||||
required String bio,
|
||||
}) async {
|
||||
emit(TeacherAuthLoading());
|
||||
try {
|
||||
final updated = await repository.setupProfile(
|
||||
fullName: fullName,
|
||||
specialization: specialization,
|
||||
schoolName: schoolName,
|
||||
gradesTaught: gradesTaught,
|
||||
bio: bio,
|
||||
);
|
||||
emit(TeacherAuthenticated(profile: updated));
|
||||
} catch (e) {
|
||||
emit(TeacherAuthError(e.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> logout() async {
|
||||
emit(TeacherAuthLoading());
|
||||
await _storage.clearSession();
|
||||
emit(TeacherUnauthenticated());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user