From 1a2c3b8082eec1aec4bdccfd33c4859a75fd84b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2?= Date: Sun, 9 Mar 2025 16:59:28 +0400 Subject: [PATCH] add Group and StudentProfile, fix controller and service --- .../app/Http/Controllers/AuthController.php | 47 ++++++++++++++++++- University.Server/app/Models/Group.php | 15 ++++++ .../app/Models/StudentProfile.php | 20 ++++++++ University.Server/app/Models/User.php | 5 ++ .../app/Services/StudentService.php | 17 ++++++- University.Server/routes/api.php | 39 ++++++++++----- 6 files changed, 128 insertions(+), 15 deletions(-) create mode 100644 University.Server/app/Models/Group.php create mode 100644 University.Server/app/Models/StudentProfile.php diff --git a/University.Server/app/Http/Controllers/AuthController.php b/University.Server/app/Http/Controllers/AuthController.php index b93f4ba..0deda51 100644 --- a/University.Server/app/Http/Controllers/AuthController.php +++ b/University.Server/app/Http/Controllers/AuthController.php @@ -53,7 +53,7 @@ class AuthController extends Controller $this->authService->generateTwoFactorCode($user); Log::info('2FA code sent to user', ['user_id' => $user->id]); - return response()->json(['message' => '2FA code sent to your email', 'user_id' => $user->id], 200); + return response()->json(['message' => '2FA code sent to your email', 'user_id' => $user->id]); } catch (JWTException $e) { Log::error('JWT error: ' . $e->getMessage(), ['email' => $data['email']]); return response()->json(['error' => 'Could not create token'], 500); @@ -107,13 +107,56 @@ class AuthController extends Controller Log::info('User information fetched successfully', ['user_id' => $user->id]); - return response()->json($user, 200); + return response()->json($user); } catch (\Exception $e) { Log::error('Failed to fetch user information: ' . $e->getMessage(), ['user_id' => auth()->id()]); return response()->json(['error' => 'Failed to fetch user information'], 500); } } + public function getStudentProfile() { + try { + $user = auth()->user(); + + if (!$user) { + Log::warning('User not authenticated'); + return response()->json(['error' => 'User not authenticated'], 401); + } + + $studentProfile = $user->studentProfile; + + if (!$studentProfile) { + Log::warning('Student profile not found', ['user_id' => $user->id]); + return response()->json(['error' => 'Student profile not found'], 404); + } + + $studentProfile->load('group'); + + $response = [ + 'student' => [ + 'id' => $user->id, + 'surname' => $user->surname, + 'name' => $user->name, + 'patronymic' => $user->patronymic, + 'email' => $user->email, + 'telephone' => $user->telephone, + 'gender' => $user->gender, + 'birth_date' => $user->birth_date, + 'citizenship' => $user->citizenship, + 'group_name' => $studentProfile->group->name, + 'matriculation_number' => $studentProfile->matriculation_number, + ] + ]; + + Log::info('Student profile information fetched successfully', ['user_id' => $user->id]); + + return response()->json($response); + } catch (\Exception $e) { + Log::error('Failed to fetch student profile information: ' . $e->getMessage(), ['user_id' => auth()->id()]); + return response()->json(['error' => 'Failed to fetch student profile information'], 500); + } + } + public function logout() { try { JWTAuth::invalidate(JWTAuth::getToken()); diff --git a/University.Server/app/Models/Group.php b/University.Server/app/Models/Group.php new file mode 100644 index 0000000..4f9bf91 --- /dev/null +++ b/University.Server/app/Models/Group.php @@ -0,0 +1,15 @@ +belongsTo(Group::class, 'group_id'); + } +} diff --git a/University.Server/app/Models/User.php b/University.Server/app/Models/User.php index 44e0f30..e5b7b1c 100644 --- a/University.Server/app/Models/User.php +++ b/University.Server/app/Models/User.php @@ -61,4 +61,9 @@ class User extends Authenticatable implements JWTSubject { return []; } + + public function studentProfile() + { + return $this->hasOne(StudentProfile::class, 'user_id'); + } } diff --git a/University.Server/app/Services/StudentService.php b/University.Server/app/Services/StudentService.php index af6b575..40e1589 100644 --- a/University.Server/app/Services/StudentService.php +++ b/University.Server/app/Services/StudentService.php @@ -2,13 +2,15 @@ namespace App\Services; +use App\Models\StudentProfile; use App\Models\User; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class StudentService { /** - * Создание студента. + * Создание студента и связанного профиля. * * @param array $data * @return User @@ -16,6 +18,8 @@ class StudentService */ public function createStudent(array $data): User { + DB::beginTransaction(); + try { Log::info('Creating student', ['email' => $data['email']]); @@ -34,8 +38,19 @@ class StudentService Log::info('Student created successfully', ['user_id' => $user->id, 'email' => $user->email]); + $studentProfile = StudentProfile::create([ + 'user_id' => $user->id, + 'group_id' => $data['group_id'], + 'matriculation_number' => $data['matriculation_number'], + ]); + + Log::info('Student profile created successfully', ['student_profile_id' => $studentProfile->id]); + + DB::commit(); + return $user; } catch (\Exception $e) { + DB::rollBack(); Log::error('Failed to create student: ' . $e->getMessage(), ['email' => $data['email']]); throw $e; } diff --git a/University.Server/routes/api.php b/University.Server/routes/api.php index aa51248..37f4894 100644 --- a/University.Server/routes/api.php +++ b/University.Server/routes/api.php @@ -1,29 +1,44 @@ 'students'], function () { - Route::post('/register', [AuthController::class, 'registerStudent']); - Route::post('/login', [AuthController::class, 'loginStudent']); - Route::post('/verify-2fa', [AuthController::class, 'verifyTwoFactorCode']); + Route::post('register', [AuthController::class, 'registerStudent']); + Route::post('login', [AuthController::class, 'loginStudent']); + Route::post('verify-2fa', [AuthController::class, 'verifyTwoFactorCode']); + + Route::middleware('is.user.auth')->group(function () { + Route::controller(AuthController::class)->group(function () { + Route::post('logout', 'logout'); + Route::get('me', 'getStudentProfile'); + }); + }); + })->middleware('log.requests'); Route::group(['prefix' => 'teacher'], function () { Route::post('/login', [AuthController::class, 'loginTeacher']); Route::post('/verify-2fa', [AuthController::class, 'verifyTwoFactorCode']); -}); + + Route::middleware('is.user.auth')->group(function () { + Route::controller(AuthController::class)->group(function () { + Route::post('/logout', 'logout'); + Route::get('/me', 'getUser'); + }); + }); + +})->middleware('log.requests'); Route::group(['prefix' => 'employee'], function () { Route::post('/login', [AuthController::class, 'loginEmployee']); Route::post('/verify-2fa', [AuthController::class, 'verifyTwoFactorCode']); -}); -Route::middleware('is.user.auth')->group(function () { - Route::controller(AuthController::class)->group(function () { - Route::post('logout', 'logout'); - Route::get('me', 'getUser'); + Route::middleware('is.user.auth')->group(function () { + Route::controller(AuthController::class)->group(function () { + Route::post('/logout', 'logout'); + Route::get('/me', 'getUser'); + }); }); -}); + +})->middleware('log.requests');