From 460b0d963561659216d6bac43d8d374a6b139c7c Mon Sep 17 00:00:00 2001 From: Matias Perrone Date: Tue, 14 Oct 2025 19:04:44 -0300 Subject: [PATCH] feat: Extend Swagger Coverage for controller `OAuth2SummitRegistrationInvitationApiController` --- ...mitRegistrationInvitationApiController.php | 496 +++++++++++++++++- app/Swagger/SummitRegistrationSchemas.php | 111 +++- 2 files changed, 601 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php index 7989cad7c..8fa078024 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRegistrationInvitationApiController.php @@ -1,4 +1,7 @@ - []]], + 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: 200, 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 +150,31 @@ public function ingestInvitations(LaravelRequest $request, $summit_id) * @param $token * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Get( + path: "/api/v1/summits/registration-invitations/tokens/{token}", + summary: "Get a registration invitation by token", + security: [["Bearer" => []]], + 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: 200, + 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 +195,9 @@ public function getInvitationByToken($token) // traits use ParametrizedGetAll; - use GetSummitChildElementById; + use GetSummitChildElementById { + get as protected traitGet; + } /** * @return ISummitRepository @@ -154,8 +217,105 @@ 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}", + summary: "Get a registration invitation by id", + security: [["Bearer" => []]], + 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: 200, + 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", + summary: "Get all registration invitations for a summit", + security: [["Bearer" => []]], + 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: 200, + 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 +381,52 @@ function () { * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations/csv", + summary: "Export registration invitations to CSV", + security: [["Bearer" => []]], + 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: 200, + 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) { @@ -323,7 +529,9 @@ function () { } - use DeleteSummitChildElement; + use DeleteSummitChildElement { + delete as protected traitDelete; + } /** * @inheritDoc @@ -333,7 +541,48 @@ 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}", + summary: "Delete a registration invitation", + security: [["Bearer" => []]], + 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: 204, 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 +600,53 @@ 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", + summary: "Create a registration invitation", + security: [["Bearer" => []]], + 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: 201, + 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 +664,84 @@ 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}", + summary: "Update a registration invitation", + security: [["Bearer" => []]], + 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: 200, + 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", + summary: "Delete all registration invitations for a summit", + security: [["Bearer" => []]], + 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: 204, 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 +757,43 @@ public function deleteAll($summit_id) * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Put( + path: "/api/v1/summits/{id}/registration-invitations/all/send", + summary: "Send registration invitation emails", + security: [["Bearer" => []]], + 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: 200, 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 +875,32 @@ public function send($summit_id) * @param $summit_id * @return mixed */ + #[OA\Get( + path: "/api/v1/summits/{id}/registration-invitations/me", + summary: "Get my registration invitation for the current user", + security: [["Bearer" => []]], + 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: 200, + 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 +931,35 @@ function getMyInvitation($summit_id) * @param $token * @return mixed */ + #[OA\Get( + path: "/api/public/v1/summits/{id}/registration-invitations/{token}", + summary: "Get a registration invitation by summit and token (public endpoint)", + 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: "token", + in: "path", + required: true, + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response( + response: 200, + 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 +983,31 @@ function getInvitationBySummitAndToken($summit_id, $token) * @param $token * @return mixed */ + #[OA\Delete( + path: "/api/public/v1/summits/{id}/registration-invitations/{token}/reject", + summary: "Reject a registration invitation by summit and token (public endpoint)", + 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: "token", + in: "path", + required: true, + schema: new OA\Schema(type: "string") + ) + ], + responses: [ + new OA\Response(response: 204, 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/SummitRegistrationSchemas.php b/app/Swagger/SummitRegistrationSchemas.php index 6b3e2f895..7c46729c4 100644 --- a/app/Swagger/SummitRegistrationSchemas.php +++ b/app/Swagger/SummitRegistrationSchemas.php @@ -4,4 +4,113 @@ use OpenApi\Attributes as OA; -// +// 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", "SummitTicketType"]), nullable: true), + new OA\Property(property: "tags", type: "array", items: new OA\Items(type: ["integer", "Tag"]), nullable: true) + ] +)] +class SummitRegistrationInvitation +{ +} + +#[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 PaginatedSummitRegistrationInvitationsResponse +{ +} + +#[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 SummitRegistrationInvitationCreateRequest +{ +} + +#[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 SummitRegistrationInvitationUpdateRequest +{ +} + +#[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 SummitRegistrationInvitationCSVImportRequest +{ +} + +#[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 SendRegistrationInvitationsRequest +{ +} +