diff --git a/app/Http/Controllers/Api/OAuth2/OAuth2UserRegistrationRequestApiController.php b/app/Http/Controllers/Api/OAuth2/OAuth2UserRegistrationRequestApiController.php index f9709d22..3d463cac 100644 --- a/app/Http/Controllers/Api/OAuth2/OAuth2UserRegistrationRequestApiController.php +++ b/app/Http/Controllers/Api/OAuth2/OAuth2UserRegistrationRequestApiController.php @@ -14,6 +14,7 @@ use App\Http\Controllers\GetAllTrait; use App\libs\Auth\Repositories\IUserRegistrationRequestRepository; +use App\libs\OAuth2\IUserScopes; use App\ModelSerializers\SerializerRegistry; use App\Services\Auth\IUserService; use Illuminate\Support\Facades\Log; @@ -22,6 +23,8 @@ use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; use OAuth2\IResourceServerContext; +use OpenApi\Attributes as OA; +use Symfony\Component\HttpFoundation\Response as HttpResponse; use Utils\Services\ILogService; /** * Class OAuth2UserRegistrationRequestApiController @@ -43,6 +46,58 @@ final class OAuth2UserRegistrationRequestApiController extends OAuth2ProtectedCo * @param IResourceServerContext $resource_server_context * @param ILogService $log_service */ + #[OA\Get( + path: '/api/v1/user-registration-requests', + operationId: 'getUserRegistrationRequests', + summary: 'Get all user registration requests', + security: [['OAuth2UserRegistrationRequestApi' => [IUserScopes::Registration]]], + tags: ['User Registration Requests'], + parameters: [ + new OA\Parameter( + name: 'page', + description: 'Page number', + in: 'query', + required: false, + schema: new OA\Schema(type: 'integer') + ), + new OA\Parameter( + name: 'per_page', + description: 'Items per page', + in: 'query', + required: false, + schema: new OA\Schema(type: 'integer') + ), + new OA\Parameter( + name: 'filter', + description: 'Filter criteria (first_name, last_name, email, is_redeemed) ("=@" starts with, "==" exact match)', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string') + ), + new OA\Parameter( + name: 'order', + description: 'Order criteria (id)', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string') + ), + ], + responses: [ + new OA\Response( + response: HttpResponse::HTTP_OK, + description: 'OK', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedUserRegistrationRequestResponse') + ), + new OA\Response( + response: HttpResponse::HTTP_PRECONDITION_FAILED, + description: 'Precondition Failed' + ), + new OA\Response( + response: HttpResponse::HTTP_INTERNAL_SERVER_ERROR, + description: 'Server Error' + ), + ] + )] public function __construct ( IUserRegistrationRequestRepository $repository, @@ -97,6 +152,41 @@ protected function getFilterValidatorRules(): array /** * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Post( + path: '/api/v1/user-registration-requests', + operationId: 'createUserRegistrationRequest', + summary: 'Create a user registration request', + security: [['OAuth2UserRegistrationRequestApi' => [IUserScopes::Registration]]], + tags: ['User Registration Requests'], + requestBody: new OA\RequestBody( + description: 'User registration request data', + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/CreateUserRegistrationRequestRequest') + ), + responses: [ + new OA\Response( + response: HttpResponse::HTTP_CREATED, + description: 'Created', + content: new OA\JsonContent(ref: '#/components/schemas/UserRegistrationRequest') + ), + new OA\Response( + response: HttpResponse::HTTP_BAD_REQUEST, + description: 'Bad Request' + ), + new OA\Response( + response: HttpResponse::HTTP_PRECONDITION_FAILED, + description: 'Precondition Failed' + ), + new OA\Response( + response: HttpResponse::HTTP_NOT_FOUND, + description: 'Not Found' + ), + new OA\Response( + response: HttpResponse::HTTP_INTERNAL_SERVER_ERROR, + description: 'Server Error' + ), + ] + )] public function register(){ try { @@ -148,6 +238,50 @@ public function register(){ * @param $id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Put( + path: '/api/v1/user-registration-requests/{id}', + operationId: 'updateUserRegistrationRequest', + summary: 'Update a user registration request', + security: [['OAuth2UserRegistrationRequestApi' => [IUserScopes::Registration]]], + tags: ['User Registration Requests'], + parameters: [ + new OA\Parameter( + name: 'id', + description: 'Registration request ID', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer') + ), + ], + requestBody: new OA\RequestBody( + description: 'User registration request data to update', + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/UpdateUserRegistrationRequestRequest') + ), + responses: [ + new OA\Response( + response: HttpResponse::HTTP_OK, + description: 'OK', + content: new OA\JsonContent(ref: '#/components/schemas/UserRegistrationRequest') + ), + new OA\Response( + response: HttpResponse::HTTP_BAD_REQUEST, + description: 'Bad Request' + ), + new OA\Response( + response: HttpResponse::HTTP_PRECONDITION_FAILED, + description: 'Precondition Failed' + ), + new OA\Response( + response: HttpResponse::HTTP_NOT_FOUND, + description: 'Not Found' + ), + new OA\Response( + response: HttpResponse::HTTP_INTERNAL_SERVER_ERROR, + description: 'Server Error' + ), + ] + )] public function update($id){ try { diff --git a/app/Swagger/Models/UserRegistrationRequestSchema.php b/app/Swagger/Models/UserRegistrationRequestSchema.php new file mode 100644 index 00000000..0e9e61e4 --- /dev/null +++ b/app/Swagger/Models/UserRegistrationRequestSchema.php @@ -0,0 +1,27 @@ + "User registration", + ] + ), + ] +)] +class OAuth2UserRegistrationRequestApiControllerSecurityScheme +{ +} \ No newline at end of file