diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTrackChairScoreTypesApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTrackChairScoreTypesApiController.php index 5e7e99086..08cd23aeb 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTrackChairScoreTypesApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitTrackChairScoreTypesApiController.php @@ -1,4 +1,7 @@ -repository; } - /** - * @param $summit_id - * @param $selection_plan_id - * @param $type_id Track Chair Rating Type Id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/selection-plans/{selection_plan_id}/track-chair-rating-types/{type_id}/score-types", + description: "Get all track chair score types for a rating type", + summary: "Get track chair score types", + operationId: "getTrackChairScoreTypes", + tags: ['Track Chair Score Types'], + security: [['summit_track_chair_oauth2' => [SummitScopes::ReadSummitData]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::TrackChairs, + IGroup::TrackChairsAdmins + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'selection_plan_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The selection plan id' + ), + new OA\Parameter( + name: 'type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The rating type id' + ), + new OA\Parameter( + name: 'page', + in: 'query', + required: false, + schema: new OA\Schema(type: 'integer', default: 1), + description: 'Page number' + ), + new OA\Parameter( + name: 'per_page', + in: 'query', + required: false, + schema: new OA\Schema(type: 'integer', default: 10), + description: 'Items per page' + ), + new OA\Parameter( + name: 'filter', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Filter operators: type_id==, name@@/=@/==' + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Order by fields: id, score, name' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to expand: type' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include: type' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/PaginatedPresentationTrackChairScoreTypesResponse") + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function getTrackChairScoreTypes($summit_id, $selection_plan_id, $type_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find(intval($summit_id)); @@ -139,13 +235,79 @@ function () { ); } - /** - * @param $summit_id - * @param $selection_plan_id - * @param $type_id Track Chair Rating Type Id - * @param $score_type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/selection-plans/{selection_plan_id}/track-chair-rating-types/{type_id}/score-types/{score_type_id}", + description: "Get a specific track chair score type", + summary: "Get track chair score type", + operationId: "getTrackChairScoreType", + tags: ['Track Chair Score Types'], + security: [['summit_track_chair_oauth2' => [SummitScopes::ReadSummitData]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::TrackChairs, + IGroup::TrackChairsAdmins + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'selection_plan_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The selection plan id' + ), + new OA\Parameter( + name: 'type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The rating type id' + ), + new OA\Parameter( + name: 'score_type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The score type id' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to expand: type' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include: type' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/PresentationTrackChairScoreType") + ), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function getTrackChairScoreType($summit_id, $selection_plan_id, $type_id, $score_type_id) { return $this->processRequest(function () use ($summit_id, $selection_plan_id, $type_id, $score_type_id) { @@ -171,12 +333,62 @@ public function getTrackChairScoreType($summit_id, $selection_plan_id, $type_id, }); } - /** - * @param $summit_id - * @param $selection_plan_id - * @param $type_id Track Chair Rating Type Id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Post( + path: "/api/v1/summits/{id}/selection-plans/{selection_plan_id}/track-chair-rating-types/{type_id}/score-types", + description: "Create a new track chair score type", + summary: "Create track chair score type", + operationId: "addTrackChairScoreType", + tags: ['Track Chair Score Types'], + security: [['summit_track_chair_oauth2' => [SummitScopes::WriteSummitData]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::TrackChairs, + IGroup::TrackChairsAdmins + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'selection_plan_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The selection plan id' + ), + new OA\Parameter( + name: 'type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The rating type id' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: "#/components/schemas/PresentationTrackChairScoreTypeCreateRequest") + ), + responses: [ + new OA\Response( + response: 201, + description: "Created", + content: new OA\JsonContent(ref: "#/components/schemas/PresentationTrackChairScoreType") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function addTrackChairScoreType($summit_id, $selection_plan_id, $type_id) { return $this->processRequest(function () use ($summit_id, $selection_plan_id, $type_id) { @@ -200,13 +412,69 @@ public function addTrackChairScoreType($summit_id, $selection_plan_id, $type_id) }); } - /** - * @param $summit_id - * @param $selection_plan_id - * @param $type_id Track Chair Rating Type Id - * @param $score_type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: "/api/v1/summits/{id}/selection-plans/{selection_plan_id}/track-chair-rating-types/{type_id}/score-types/{score_type_id}", + description: "Update an existing track chair score type", + summary: "Update track chair score type", + operationId: "updateTrackChairScoreType", + tags: ['Track Chair Score Types'], + security: [['summit_track_chair_oauth2' => [SummitScopes::WriteSummitData]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::TrackChairs, + IGroup::TrackChairsAdmins + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'selection_plan_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The selection plan id' + ), + new OA\Parameter( + name: 'type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The rating type id' + ), + new OA\Parameter( + name: 'score_type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The score type id' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: "#/components/schemas/PresentationTrackChairScoreTypeUpdateRequest") + ), + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/PresentationTrackChairScoreType") + ), + new OA\Response(response: Response::HTTP_BAD_REQUEST, description: "Bad Request"), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_PRECONDITION_FAILED, description: "Validation Error"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function updateTrackChairScoreType($summit_id, $selection_plan_id, $type_id, $score_type_id) { return $this->processRequest(function () use ($summit_id, $selection_plan_id, $type_id, $score_type_id) { @@ -230,13 +498,59 @@ public function updateTrackChairScoreType($summit_id, $selection_plan_id, $type_ }); } - /** - * @param $summit_id - * @param $selection_plan_id - * @param $type_id Track Chair Rating Type Id - * @param $score_type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Delete( + path: "/api/v1/summits/{id}/selection-plans/{selection_plan_id}/track-chair-rating-types/{type_id}/score-types/{score_type_id}", + description: "Delete a track chair score type", + summary: "Delete track chair score type", + operationId: "deleteTrackChairScoreType", + tags: ['Track Chair Score Types'], + security: [['summit_track_chair_oauth2' => [SummitScopes::WriteSummitData]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::TrackChairs, + IGroup::TrackChairsAdmins + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'selection_plan_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The selection plan id' + ), + new OA\Parameter( + name: 'type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The rating type id' + ), + new OA\Parameter( + name: 'score_type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The score type id' + ) + ], + responses: [ + new OA\Response(response: 204, description: 'No Content'), + new OA\Response(response: Response::HTTP_UNAUTHORIZED, description: "Unauthorized"), + new OA\Response(response: Response::HTTP_FORBIDDEN, description: "Forbidden"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function deleteTrackChairScoreType($summit_id, $selection_plan_id, $type_id, $score_type_id) { return $this->processRequest(function () use ($summit_id, $selection_plan_id, $type_id, $score_type_id) { @@ -251,4 +565,4 @@ public function deleteTrackChairScoreType($summit_id, $selection_plan_id, $type_ return $this->deleted(); }); } -} \ No newline at end of file +} diff --git a/app/Swagger/Security/TrackChairAuthSchema.php b/app/Swagger/Security/TrackChairAuthSchema.php new file mode 100644 index 000000000..327b4b23d --- /dev/null +++ b/app/Swagger/Security/TrackChairAuthSchema.php @@ -0,0 +1,24 @@ + 'Read Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + ], + ), + ], + ) +] +class TrackChairAuthSchema{} diff --git a/app/Swagger/SummitPresentationSchemas.php b/app/Swagger/SummitPresentationSchemas.php index 8f8a3cf2c..54f150301 100644 --- a/app/Swagger/SummitPresentationSchemas.php +++ b/app/Swagger/SummitPresentationSchemas.php @@ -81,3 +81,67 @@ class PresentationTrackChairRatingTypeCreateRequestSchema {} class PresentationTrackChairRatingTypeUpdateRequestSchema {} // + + +// Track Chair Score Types + +#[OA\Schema( + schema: "PresentationTrackChairScoreType", + description: "Track chair score type", + type: "object", + properties: [ + new OA\Property(property: "id", type: "integer", example: 1), + new OA\Property(property: "created", type: "integer", description: "Unix timestamp", example: 1640995200), + new OA\Property(property: "last_edited", type: "integer", description: "Unix timestamp", example: 1640995200), + new OA\Property(property: "score", type: "integer", example: 5), + new OA\Property(property: "name", type: "string", example: "Excellent"), + new OA\Property(property: "description", type: "string", example: "This presentation is excellent"), + new OA\Property(property: "type_id", type: "integer", example: 10), + new OA\Property(property: "type", type: "PresentationTrackChairRatingType"), + ], +)] +class PresentationTrackChairScoreType {} + +#[OA\Schema( + schema: "PaginatedPresentationTrackChairScoreTypesResponse", + description: "Paginated list of track chair score types", + allOf: [ + new OA\Schema(ref: "#/components/schemas/PaginateDataSchemaResponse"), + new OA\Schema( + properties: [ + new OA\Property( + property: "data", + type: "array", + items: new OA\Items(ref: "#/components/schemas/PresentationTrackChairScoreType") + ) + ] + ) + ] +)] +class PaginatedPresentationTrackChairScoreTypesResponse {} + +#[OA\Schema( + schema: "PresentationTrackChairScoreTypeCreateRequest", + description: "Request to create a track chair score type", + required: ["name", "description"], + type: "object", + properties: [ + new OA\Property(property: "name", type: "string", example: "Excellent"), + new OA\Property(property: "description", type: "string", example: "This presentation is excellent"), + ] +)] +class PresentationTrackChairScoreTypeCreateRequest {} + +#[OA\Schema( + schema: "PresentationTrackChairScoreTypeUpdateRequest", + description: "Request to update a track chair score type", + type: "object", + properties: [ + new OA\Property(property: "score", type: "integer", nullable: true, example: 5), + new OA\Property(property: "name", type: "string", nullable: true, example: "Excellent"), + new OA\Property(property: "description", type: "string", nullable: true, example: "This presentation is excellent"), + ] +)] +class PresentationTrackChairScoreTypeUpdateRequest {} + +// End Track Chair Score Types