diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php index 7989cad7c..6f4fcfc19 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php @@ -1,4 +1,7 @@ - [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: "multipart/form-data", + schema: new OA\Schema(ref: "#/components/schemas/SummitRegistrationInvitationCSVImportRequest") + ) + ), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: "OK"), + 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 ingestInvitations(LaravelRequest $request, $summit_id) { return $this->processRequest(function () use ($request, $summit_id) { @@ -114,6 +164,42 @@ public function ingestInvitations(LaravelRequest $request, $summit_id) * @param $token * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Get( + path: "/api/v1/summits/registration-invitations/{token}", + operationId: 'getInvitationByToken', + summary: "Get a registration invitation by token", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::ReadMyRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: "token", + in: "path", + required: true, + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + 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 getInvitationByToken($token) { return $this->processRequest(function () use ($token) { @@ -134,7 +220,9 @@ public function getInvitationByToken($token) // traits use ParametrizedGetAll; - use GetSummitChildElementById; + use GetSummitChildElementById { + get as protected traitGet; + } /** * @return ISummitRepository @@ -154,8 +242,129 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity /** * @param $summit_id + * @param $invitation_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations/{invitation_id}", + operationId: 'getRegistrationInvitation', + summary: "Get a registration invitation by id", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "invitation_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer") + ) + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + 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_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] + public function get($summit_id, $invitation_id) + { + return $this->traitGet($summit_id, $invitation_id); + } + + /** + * @param $summit_id + * @return mixed + */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations", + operationId: 'getAllRegistrationInvitationsBySummit', + summary: "Get all registration invitations for a summit", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit 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", + description: "Filter query. Available operators: id==, not_id==, email@@/=@/==, first_name@@/=@/==, last_name@@/=@/==, full_name@@/=@/==, is_accepted==, is_sent==, ticket_types_id==, tags@@/=@/==, tags_id==, status==", + schema: new OA\Schema(type: "string") + ), + new OA\Parameter( + name: "order", + in: "query", + description: "Order by field. Available fields: id, email, first_name, last_name, full_name, status", + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/PaginatedSummitRegistrationInvitationsResponse") + ), + 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 getAllBySummit($summit_id) { @@ -221,6 +430,64 @@ function () { * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations/csv", + operationId: 'getAllRegistrationInvitationsBySummitCSV', + summary: "Export registration invitations to CSV", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "filter", + in: "query", + description: "Filter query. Available operators: id==, not_id==, email@@/=@/==, first_name@@/=@/==, last_name@@/=@/==, full_name@@/=@/==, is_accepted==, is_sent==, ticket_types_id==, tags@@/=@/==, tags_id==, status==", + schema: new OA\Schema(type: "string") + ), + new OA\Parameter( + name: "order", + in: "query", + description: "Order by field. Available fields: id, email, first_name, last_name, full_name, status", + schema: new OA\Schema(type: "string") + ), + new OA\Parameter( + name: "columns", + in: "query", + description: "Comma-separated list of columns to include. Available columns: id, email, first_name, last_name, member_id, order_id, summit_id, accepted_date, is_accepted, is_sent, allowed_ticket_types, tags, status", + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\MediaType(mediaType: "text/csv", schema: new OA\Schema(type: "string")) + ), + 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 getAllBySummitCSV($summit_id) { @@ -318,12 +585,14 @@ function () { $columns = $allowed_columns; return $columns; }, - 'summit-registration-invitations-' + 'Summit Registration Invitations-' ); } - use DeleteSummitChildElement; + use DeleteSummitChildElement { + delete as protected traitDelete; + } /** * @inheritDoc @@ -333,7 +602,60 @@ protected function deleteChild(Summit $summit, $child_id): void $this->service->delete($summit, $child_id); } - use AddSummitChildElement; + /** + * @param $summit_id + * @param $invitation_id + * @return mixed + */ + #[OA\Delete( + path: "/api/v1/summits/{id}/registration-invitations/{invitation_id}", + operationId: 'deleteRegistrationInvitation', + summary: "Delete a registration invitation", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "invitation_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer") + ) + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"), + 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_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] + public function delete($summit_id, $invitation_id) + { + return $this->traitDelete($summit_id, $invitation_id); + } + + use AddSummitChildElement { + add as protected traitAdd; + } /** * @inheritDoc @@ -351,7 +673,65 @@ function getAddValidationRules(array $payload): array return SummitRegistrationInvitationValidationRulesFactory::buildForAdd($payload); } - use UpdateSummitChildElement; + /** + * @param $summit_id + * @return mixed + */ + #[OA\Post( + path: "/api/v1/summits/{id}/registration-invitations", + operationId: 'addRegistrationInvitation', + summary: "Create a registration invitation", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: "application/json", + schema: new OA\Schema(ref: "#/components/schemas/SummitRegistrationInvitationCreateRequest") + ) + ), + responses: [ + new OA\Response( + response: Response::HTTP_CREATED, + description: "Created", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + 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 add($summit_id) + { + return $this->traitAdd($summit_id); + } + + use UpdateSummitChildElement { + update as protected traitUpdate; + } /** * @inheritDoc @@ -369,10 +749,108 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I return $this->service->update($summit, $child_id, $payload); } + /** + * @param $summit_id + * @param $invitation_id + * @return mixed + */ + #[OA\Put( + path: "/api/v1/summits/{id}/registration-invitations/{invitation_id}", + operationId: 'updateRegistrationInvitation', + summary: "Update a registration invitation", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "invitation_id", + in: "path", + required: true, + schema: new OA\Schema(type: "integer") + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: "application/json", + schema: new OA\Schema(ref: "#/components/schemas/SummitRegistrationInvitationUpdateRequest") + ) + ), + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + 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 update($summit_id, $invitation_id) + { + return $this->traitUpdate($summit_id, $invitation_id); + } + /** * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Delete( + path: "/api/v1/summits/{id}/registration-invitations/all", + operationId: 'deleteAllRegistrationInvitations', + summary: "Delete all registration invitations for a summit", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"), + 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_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] public function deleteAll($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -388,6 +866,55 @@ public function deleteAll($summit_id) * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Put( + path: "/api/v1/summits/{id}/registration-invitations/all/send", + operationId: 'sendRegistrationInvitations', + summary: "Send registration invitation emails", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteRegistrationInvitations, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins, + ] + ], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "filter", + in: "query", + description: "Filter query. Available operators: id==, not_id==, email@@/=@/==, first_name@@/=@/==, last_name@@/=@/==, full_name@@/=@/==, is_accepted==, is_sent==, ticket_types_id==, tags@@/=@/==, tags_id==, status==", + schema: new OA\Schema(type: "string") + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: "application/json", + schema: new OA\Schema(ref: "#/components/schemas/SendRegistrationInvitationsRequest") + ) + ), + responses: [ + new OA\Response(response: Response::HTTP_OK, description: "OK"), + 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 send($summit_id) { return $this->processRequest(function () use ($summit_id) { @@ -469,6 +996,35 @@ public function send($summit_id) * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations/me", + operationId: 'getMyRegistrationInvitation', + summary: "Get my registration invitation for the current user", + security: [['summit_registration_invitation_oauth2' => [ + SummitScopes::ReadMyRegistrationInvitations, + ]]], + tags: ["Summit Registration Invitations"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + 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") + ] + )] function getMyInvitation($summit_id) { @@ -499,6 +1055,36 @@ function getMyInvitation($summit_id) * @param $token * @return mixed */ + #[OA\Get( + path: "/api/public/v1/summits/{id}/registration-invitations/{token}", + operationId: 'getInvitationBySummitAndToken', + summary: "Get a registration invitation by summit and token (public endpoint)", + tags: ["Summit Registration Invitations (Public)"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "token", + in: "path", + required: true, + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response( + response: Response::HTTP_OK, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitRegistrationInvitation") + ), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] function getInvitationBySummitAndToken($summit_id, $token) { return $this->processRequest(function () use ($summit_id, $token) { @@ -522,6 +1108,32 @@ function getInvitationBySummitAndToken($summit_id, $token) * @param $token * @return mixed */ + #[OA\Delete( + path: "/api/public/v1/summits/{id}/registration-invitations/{token}/reject", + operationId: 'rejectInvitationBySummitAndToken', + summary: "Reject a registration invitation by summit and token (public endpoint)", + tags: ["Summit Registration Invitations (Public)"], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: "token", + in: "path", + required: true, + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response(response: Response::HTTP_NO_CONTENT, description: "No Content"), + new OA\Response(response: Response::HTTP_NOT_FOUND, description: "Not Found"), + new OA\Response(response: Response::HTTP_INTERNAL_SERVER_ERROR, description: "Server Error") + ] + )] function rejectInvitationBySummitAndToken($summit_id, $token) { return $this->processRequest(function () use ($summit_id, $token) { diff --git a/app/Swagger/Security/SummitRegistrationInvitationAuthSchema.php b/app/Swagger/Security/SummitRegistrationInvitationAuthSchema.php new file mode 100644 index 000000000..2acb914a6 --- /dev/null +++ b/app/Swagger/Security/SummitRegistrationInvitationAuthSchema.php @@ -0,0 +1,28 @@ + 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + SummitScopes::ReadRegistrationInvitations => 'Read Registration Invitations', + SummitScopes::WriteRegistrationInvitations => 'Write Registration Invitations', + SummitScopes::ReadMyRegistrationInvitations => 'Read My Registration Invitations', + ], + ), + ], + ) +] +class SummitRegistrationInvitationAuthSchema {} diff --git a/app/Swagger/SummitRegistrationSchemas.php b/app/Swagger/SummitRegistrationSchemas.php index 2d2860b2a..c3d122e85 100644 --- a/app/Swagger/SummitRegistrationSchemas.php +++ b/app/Swagger/SummitRegistrationSchemas.php @@ -57,7 +57,116 @@ class SummitBadgeTypeUpdateRequest { } -// +// Summit Registration Invitation Schemas + +#[OA\Schema( + schema: "SummitRegistrationInvitation", + 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: "email", type: "string"), + new OA\Property(property: "first_name", type: "string"), + new OA\Property(property: "last_name", type: "string"), + new OA\Property(property: "summit_id", type: "integer"), + new OA\Property(property: "is_accepted", type: "boolean"), + new OA\Property(property: "is_sent", type: "boolean"), + new OA\Property(property: "action_date", type: "integer", nullable: true), + new OA\Property(property: "acceptance_criteria", type: "string", enum: ["ANY_TICKET_TYPE", "ALL_TICKET_TYPES"]), + new OA\Property(property: "status", type: "string", enum: ["Pending", "Accepted", "Rejected"]), + new OA\Property(property: "allowed_ticket_types", type: "array", items: new OA\Items(type: "integer"), description: "Array of SummitTicketType IDs, full object when expanded", nullable: true), + new OA\Property(property: "tags", type: "array", items: new OA\Items(type: ["integer", "string"]), description: "Array of Tag IDs or names when expanded", nullable: true), + ] +)] +class SummitRegistrationInvitationSchema +{ +} + +#[OA\Schema( + schema: "PaginatedSummitRegistrationInvitationsResponse", + 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/SummitRegistrationInvitation") + ) + ] + ) + ] +)] +class PaginatedSummitRegistrationInvitationsResponseSchema +{ +} + +#[OA\Schema( + schema: "SummitRegistrationInvitationCreateRequest", + type: "object", + required: ["email", "first_name", "last_name", "acceptance_criteria"], + properties: [ + new OA\Property(property: "email", type: "string", format: "email", maxLength: 255), + new OA\Property(property: "first_name", type: "string", maxLength: 255), + new OA\Property(property: "last_name", type: "string", maxLength: 255), + new OA\Property(property: "allowed_ticket_types", type: "array", items: new OA\Items(type: "integer")), + new OA\Property(property: "tags", type: "array", items: new OA\Items(type: "string")), + new OA\Property(property: "acceptance_criteria", type: "string", enum: ["ANY_TICKET_TYPE", "ALL_TICKET_TYPES"]), + new OA\Property(property: "status", type: "string", enum: ["Pending", "Accepted", "Rejected"]) + ] +)] +class SummitRegistrationInvitationCreateRequestSchema +{ +} + +#[OA\Schema( + schema: "SummitRegistrationInvitationUpdateRequest", + type: "object", + properties: [ + new OA\Property(property: "email", type: "string", format: "email", maxLength: 255), + new OA\Property(property: "first_name", type: "string", maxLength: 255), + new OA\Property(property: "last_name", type: "string", maxLength: 255), + new OA\Property(property: "allowed_ticket_types", type: "array", items: new OA\Items(type: "integer")), + new OA\Property(property: "tags", type: "array", items: new OA\Items(type: "string")), + new OA\Property(property: "is_accepted", type: "boolean"), + new OA\Property(property: "acceptance_criteria", type: "string", enum: ["ANY_TICKET_TYPE", "ALL_TICKET_TYPES"]), + new OA\Property(property: "status", type: "string", enum: ["Pending", "Accepted", "Rejected"]) + ] +)] +class SummitRegistrationInvitationUpdateRequestSchema +{ +} + +#[OA\Schema( + schema: "SummitRegistrationInvitationCSVImportRequest", + type: "object", + required: ["file"], + properties: [ + new OA\Property(property: "file", type: "string", format: "binary"), + new OA\Property(property: "acceptance_criteria", type: "string", enum: ["ANY_TICKET_TYPE", "ALL_TICKET_TYPES"]) + ] +)] +class SummitRegistrationInvitationCSVImportRequestSchema +{ +} + +#[OA\Schema( + schema: "SendRegistrationInvitationsRequest", + type: "object", + required: ["email_flow_event"], + properties: [ + new OA\Property(property: "email_flow_event", type: "string", enum: ["SUMMIT_REGISTRATION_INVITE", "SUMMIT_REGISTRATION_REINVITE"]), + new OA\Property(property: "invitations_ids", type: "array", items: new OA\Items(type: "integer")), + new OA\Property(property: "excluded_invitations_ids", type: "array", items: new OA\Items(type: "integer")), + new OA\Property(property: "test_email_recipient", type: "string", format: "email"), + new OA\Property(property: "outcome_email_recipient", type: "string", format: "email") + ] +)] +class SendRegistrationInvitationsRequestSchema +{ +} + // Summit Badge Feature Types