diff --git a/app/Annotations/OpenApi/Controllers/StudentResume/ModalityAnnotation.php b/app/Annotations/OpenApi/Controllers/StudentResume/ModalityAnnotation.php index c849b4dc..6f24024f 100755 --- a/app/Annotations/OpenApi/Controllers/StudentResume/ModalityAnnotation.php +++ b/app/Annotations/OpenApi/Controllers/StudentResume/ModalityAnnotation.php @@ -10,13 +10,13 @@ class ModalityAnnotation { /** * @OA\Get( - * path="/student/{studentId}/resume/modality/", + * path="/student/{student}/resume/modality/", * operationId="getStudentResumeModality", * summary="Get the modality of a specific resume", * description="Returns the modality of a specific student's resume ", * tags={"Student -> Resume"}, * @OA\Parameter( - * name="studentId", + * name="student", * in="path", * description="Student ID", * required=true, @@ -43,7 +43,7 @@ class ModalityAnnotation * description="Student or Resume not found", * @OA\JsonContent( * type="object", - * @OA\Property(property="message", type="string", example="No s'ha trobat cap estudiant amb aquest ID {studentId}"), + * @OA\Property(property="message", type="string", example="No s'ha trobat cap estudiant amb aquest ID {student}"), * @OA\Property(property="message2", type="string", example="No s'ha trobat cap currĂ­culum per a l'estudiant amb id: {studentId}") * ) * ), diff --git a/app/Http/Controllers/api/Student/StudentModalityController.php b/app/Http/Controllers/api/Student/StudentModalityController.php index 6d67608a..256ae948 100755 --- a/app/Http/Controllers/api/Student/StudentModalityController.php +++ b/app/Http/Controllers/api/Student/StudentModalityController.php @@ -4,31 +4,19 @@ namespace App\Http\Controllers\api\Student; -use Exception; use App\Http\Controllers\Controller; -use App\Service\Student\StudentModalityService; -use App\Exceptions\StudentNotFoundException; -use App\Exceptions\ResumeNotFoundException; +use App\Models\Student; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Http\JsonResponse; class StudentModalityController extends Controller { - private StudentModalityService $studentModalityService; - public function __construct(StudentModalityService $studentModalityService) + public function __invoke(Student $student): JsonResponse { - $this->studentModalityService = $studentModalityService; - } + $resume = $student->resume ?? throw new ModelNotFoundException(); + $modality = $resume->modality; - public function __invoke(string $studentId): JsonResponse - { - try { - $service = $this->studentModalityService->execute($studentId); - return response()->json(['modality' => $service]); - } catch (StudentNotFoundException | ResumeNotFoundException $e) { - return response()->json(['message' => $e->getMessage()], $e->getCode()); - } catch (Exception $e) { - return response()->json(['message' => $e->getMessage()], $e->getCode() ?: 500); - } + return response()->json(['modality' => $modality]); } -} \ No newline at end of file +} diff --git a/app/Service/Student/StudentModalityService.php b/app/Service/Student/StudentModalityService.php deleted file mode 100755 index 168b3f3f..00000000 --- a/app/Service/Student/StudentModalityService.php +++ /dev/null @@ -1,36 +0,0 @@ -getModalityByStudentId($studentId); - } - - public function getModalityByStudentId(string $studentId): array - { - $student = Student::find($studentId); - - if (!$student) { - throw new StudentNotFoundException($studentId); - } - - $resume = $student->resume()->first(); - - if (!$resume) { - throw new ResumeNotFoundException($studentId); - } - - $modality = $resume->modality; - - return (array) $modality; - } -} diff --git a/routes/api/v1.php b/routes/api/v1.php index 32799888..6a7eebb4 100644 --- a/routes/api/v1.php +++ b/routes/api/v1.php @@ -58,10 +58,10 @@ Route::get('student/{student}/resume/collaborations', StudentCollaborationDetailController::class)->name('student.collaborations'); Route::put('student/{student}/resume/collaborations', UpdateStudentCollaborationsController::class)->name('student.updateCollaborations'); Route::put('student/{student}/resume/photo', UpdateStudentImageController::class)->name('student.updatePhoto'); +Route::get('student/{student}/resume/modality', StudentModalityController::class)->name('student.modality'); Route::prefix('student/{studentId}/resume')->group(function () { Route::put('languages', UpdateStudentLanguagesController::class)->name('student.languages.update'); - Route::get('modality', StudentModalityController::class)->name('student.modality'); Route::get('photo', GetStudentImageController::class)->middleware('auth:api', EnsureStudentOwner::class)->name('student.photo.get'); Route::delete('languages/{languageId}', DeleteStudentResumeLanguageController::class)->name('student.language.delete'); }); diff --git a/tests/Feature/Controller/Student/StudentModalityControllerTest.php b/tests/Feature/Controller/Student/StudentModalityControllerTest.php index a8cc6489..f960e256 100755 --- a/tests/Feature/Controller/Student/StudentModalityControllerTest.php +++ b/tests/Feature/Controller/Student/StudentModalityControllerTest.php @@ -8,56 +8,38 @@ use Tests\TestCase; use Tests\Fixtures\Students; use Tests\Fixtures\Resumes; -use App\Service\Student\StudentModalityService; -use App\Http\Controllers\api\Student\StudentModalityController; class StudentModalityControllerTest extends TestCase { use DatabaseTransactions; - public function testStudentModalityControllerReturns_200StatusForValidStudentUuidWithModality():void + public function testStudentModalityControllerReturns_200StatusForValidStudentUuidWithModality(): void { $student = Students::aStudent(); - $studentId = $student->id; Resumes::createResumeWithModality($studentId, 'frontend', [1, 3], 'Presencial'); - $response = $this->getJson(route('student.modality', ['studentId' => $studentId])); + $response = $this->getJson(route('student.modality', ['student' => $studentId])); $response->assertStatus(200); - $response->assertJsonStructure(['modality']); } - public function testStudentModalityControllerReturns_404StatusAndResumeNotFoundExceptionMessageForValidStudentUuidWithoutResume():void + public function testStudentModalityControllerReturns_404StatusAndResumeNotFoundExceptionMessageForValidStudentUuidWithoutResume(): void { $student = Students::aStudent(); - $studentId = $student->id; - $response = $this->getJson(route('student.modality', ['studentId' => $studentId])); + $response = $this->getJson(route('student.modality', ['student' => $studentId])); $response->assertStatus(404); - - $response->assertJson(['message' => 'No s\'ha trobat cap currĂ­culum per a l\'estudiant amb id: ' . $studentId]); } public function testStudentModalityControllerReturns_404StatusAndStudentNotFoundExceptionMessageForInvalidStudentUuid(): void { - $response = $this->getJson(route('student.modality', ['studentId' => 'nonExistentStudentId'])); - $response->assertStatus(404); - $response->assertJson(['message' => 'No s\'ha trobat cap estudiant amb aquest ID: nonExistentStudentId']); - } - - public function testStudentModalityControllerCanBeInstantiated():void - { - $studentModalityService = $this->createMock(StudentModalityService::class); - - $controller = new StudentModalityController($studentModalityService); + $response = $this->getJson(route('student.modality', ['student' => 'nonExistentStudentId'])); - $this->assertInstanceOf(StudentModalityController::class, $controller); + $response->assertStatus(404); } } - - diff --git a/tests/Feature/Service/Student/StudentModalityServiceTest.php b/tests/Feature/Service/Student/StudentModalityServiceTest.php deleted file mode 100755 index af4872e3..00000000 --- a/tests/Feature/Service/Student/StudentModalityServiceTest.php +++ /dev/null @@ -1,79 +0,0 @@ -studentModalityService = new StudentModalityService(); - } - - public function testExecuteWithValidStudentId(): void - { - $student = Students::aStudent(); - - $studentId = $student->id; - - Resumes::createResumeWithModality($studentId, 'frontend', [2, 7], 'Presencial'); - - $result = $this->studentModalityService->execute($studentId); - - $this->assertIsArray($result); - } - - public function testServiceHandlesStudentWithoutModality():void - { - $student = Students::aStudent(); - - $studentId = $student->id; - - Resumes::createResumeWithoutModality($studentId, 'frontend', [9, 10]); - - $result = $this->studentModalityService->execute($studentId); - - $this->assertIsArray($result); - - $this->assertEmpty($result); - } - - public function testExecuteWithInvalidStudentId():void - { - $this->expectException(StudentNotFoundException::class); - - $this->studentModalityService->execute('nonExistentStudentId'); - } - - public function testExecuteThrowsExceptionForStudentWithoutResume():void - { - $student = Students::aStudent(); - - $studentId = $student->id; - - $this->expectException(ResumeNotFoundException::class); - - $this->studentModalityService->execute($studentId); - } - - public function testModalityServiceCanBeInstantiated(): void - { - self::assertInstanceOf(StudentModalityService::class, $this->studentModalityService); - } - -}