diff --git a/.env.example b/.env.example index 0331f9628..a117d6925 100644 --- a/.env.example +++ b/.env.example @@ -265,3 +265,17 @@ PAYMENTS_SERVICE_BASE_URL= PAYMENTS_SERVICE_OAUTH2_CLIENT_ID= PAYMENTS_SERVICE_OAUTH2_CLIENT_SECRET= PAYMENTS_SERVICE_OAUTH2_SCOPES=payment-profile/read + + +# L5_FORMAT_TO_USE_FOR_DOCS=yaml +# L5_SWAGGER_GENERATE_ALWAYS=true # Dev setting +# L5_SWAGGER_GENERATE_YAML_COPY=true +# L5_SWAGGER_UI_DARK_MODE=true + +# Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically), 'method' (sort by HTTP method). Default is the order returned by the server unchanged. +# L5_SWAGGER_OPERATIONS_SORT= +# Controls the default expansion setting for the operations and tags. It can be: 'list' (expands only the tags), 'full' (expands the tags and operations), 'none' (expands nothing -default-). +# L5_SWAGGER_UI_DOC_EXPANSION=none +# L5_SWAGGER_UI_FILTERS=false # Show/Hide filters. default true +# L5_SWAGGER_UI_PERSIST_AUTHORIZATION=false # If set to true, it persists authorization data, and it would not be lost on browser close/refresh +L5_SWAGGER_OPEN_API_SPEC_VERSION=3.1.0 diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSubmissionInvitationApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSubmissionInvitationApiController.php index c1016741b..983495e7a 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSubmissionInvitationApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSubmissionInvitationApiController.php @@ -1,4 +1,7 @@ -service = $service; } - /** - * @param LaravelRequest $request - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Post( + path: "/api/v1/summits/{id}/submission-invitations/csv", + description: "Import submission invitations from CSV file - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Import submission invitations from CSV", + operationId: "ingestSummitSubmissionInvitations", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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( + type: 'object', + required: ['file'], + properties: [ + new OA\Property( + property: 'file', + type: 'string', + format: 'binary', + description: 'CSV file to import' + ) + ] + ) + ) + ), + responses: [ + new OA\Response(response: 200, description: 'Success'), + 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) { @@ -94,11 +172,6 @@ public function ingestInvitations(LaravelRequest $request, $summit_id) }); } - // traits - use ParametrizedGetAll; - - use GetSummitChildElementById; - /** * @return ISummitRepository */ @@ -115,10 +188,92 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity return $summit->getSubmissionInvitationById($child_id); } - /** - * @param $summit_id - * @return mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/submission-invitations", + description: "Get all submission invitations for a summit - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Get all submission invitations", + operationId: "getAllSummitSubmissionInvitations", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadSubmissionInvitations, + ] + ] + ], + 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', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Filter expression (e.g., email=@john,is_sent==true)' + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Order by field (e.g., +id, -email)' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Expand relationships (tags)' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include (tags)' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/PaginatedSummitSubmissionInvitationsResponse') + ), + 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) { @@ -169,10 +324,74 @@ function () { ); } - /** - * @param $summit_id - * @return mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/submission-invitations/csv", + description: "Get all submission invitations for a summit in CSV format - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Get all submission invitations (CSV)", + operationId: "getAllSummitSubmissionInvitationsCSV", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadSubmissionInvitations, + ] + ] + ], + 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', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Filter expression' + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Order by field' + ), + new OA\Parameter( + name: 'columns', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Comma-separated list of columns to include' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: 'Success', + content: new OA\MediaType( + mediaType: 'text/csv', + schema: new OA\Schema(type: 'string', format: 'binary') + ) + ), + 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) { @@ -255,9 +474,6 @@ function () { ); } - - use DeleteSummitChildElement; - /** * @inheritDoc */ @@ -266,8 +482,6 @@ protected function deleteChild(Summit $summit, $child_id): void $this->service->delete($summit, $child_id); } - use AddSummitChildElement; - /** * @inheritDoc */ @@ -284,8 +498,6 @@ function getAddValidationRules(array $payload): array return SummitSubmissionInvitationValidationRulesFactory::buildForAdd($payload); } - use UpdateSummitChildElement; - /** * @inheritDoc */ @@ -302,10 +514,280 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I return $this->service->update($summit, $child_id, $payload); } - /** - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/submission-invitations/{invitation_id}", + description: "Get a specific submission invitation by id - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Get submission invitation", + operationId: "getSummitSubmissionInvitation", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::ReadAllSummitData, + SummitScopes::ReadSubmissionInvitations, + ] + ] + ], + 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'), + description: 'The invitation id' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Expand relationships (tags)' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include (tags)' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSubmissionInvitation') + ), + 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); + } + + #[OA\Post( + path: "/api/v1/summits/{id}/submission-invitations", + description: "Create a new submission invitation - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Create submission invitation", + operationId: "createSummitSubmissionInvitation", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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\JsonContent(ref: '#/components/schemas/SummitSubmissionInvitationCreateRequest') + ), + responses: [ + new OA\Response( + response: 201, + description: 'Created', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSubmissionInvitation') + ), + 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); + } + + #[OA\Put( + path: "/api/v1/summits/{id}/submission-invitations/{invitation_id}", + description: "Update an existing submission invitation - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Update submission invitation", + operationId: "updateSummitSubmissionInvitation", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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'), + description: 'The invitation id' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent(ref: '#/components/schemas/SummitSubmissionInvitationUpdateRequest') + ), + responses: [ + new OA\Response( + response: 200, + description: 'Success', + content: new OA\JsonContent(ref: '#/components/schemas/SummitSubmissionInvitation') + ), + 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); + } + + #[OA\Delete( + path: "/api/v1/summits/{id}/submission-invitations/{invitation_id}", + description: "Delete a submission invitation - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Delete submission invitation", + operationId: "deleteSummitSubmissionInvitation", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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'), + description: 'The invitation 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 delete($summit_id, $invitation_id) + { + return $this->traitDelete($summit_id, $invitation_id); + } + + #[OA\Delete( + path: "/api/v1/summits/{id}/submission-invitations/all", + description: "Delete all submission invitations for a summit - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Delete all submission invitations", + operationId: "deleteAllSummitSubmissionInvitations", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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_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) { @@ -321,6 +803,85 @@ public function deleteAll($summit_id) * @param $summit_id * @return \Illuminate\Http\JsonResponse|mixed */ + #[OA\Put( + path: "/api/v1/summits/{id}/submission-invitations/all/send", + description: "Send submission invitations to selected recipients - required-groups " . IGroup::SummitAdministrators . ", " . IGroup::SuperAdmins . ", " . IGroup::Administrators . ", " . IGroup::SummitRegistrationAdmins, + summary: "Send submission invitations", + operationId: "sendSummitSubmissionInvitations", + tags: ['Summit Submission Invitations'], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + IGroup::SummitRegistrationAdmins + ] + ], + security: [ + [ + 'summit_submission_invitations_oauth2' => [ + SummitScopes::WriteSummitData, + SummitScopes::WriteSubmissionInvitations, + ] + ] + ], + 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', + required: false, + schema: new OA\Schema(type: 'string'), + description: 'Filter expression to select invitations' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\JsonContent( + required: ['email_flow_event'], + properties: [ + new OA\Property( + property: 'email_flow_event', + type: 'string', + enum: ['SUMMIT_SUBMISSIONS_INVITE_SUBMISSION', 'SUMMIT_SUBMISSIONS_REINVITE_SUBMISSION'], + description: 'Email flow event type' + ), + new OA\Property( + property: 'selection_plan_id', + type: 'integer', + description: 'Selection plan ID' + ), + new OA\Property( + property: 'invitations_ids', + type: 'array', + items: new OA\Items(type: 'integer'), + description: 'Array of invitation IDs to send' + ), + new OA\Property( + property: 'excluded_invitations_ids', + type: 'array', + items: new OA\Items(type: 'integer'), + description: 'Array of invitation IDs to exclude' + ) + ] + ) + ), + responses: [ + new OA\Response(response: 200, description: 'Success'), + 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) { diff --git a/app/Swagger/Models/SummitSubmissionInvitationSchema.php b/app/Swagger/Models/SummitSubmissionInvitationSchema.php new file mode 100644 index 000000000..fbd2704c2 --- /dev/null +++ b/app/Swagger/Models/SummitSubmissionInvitationSchema.php @@ -0,0 +1,29 @@ + 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + SummitScopes::ReadSubmissionInvitations => 'Read Submission Invitations', + SummitScopes::WriteSubmissionInvitations => 'Write Submission Invitations', + ], + ), + ], + ) +] +class SummitSubmissionInvitationsAuthSchema{} diff --git a/app/Swagger/SummitSpeakersSchemas.php b/app/Swagger/SummitSpeakersSchemas.php index 5a1a0deac..e0fb4d701 100644 --- a/app/Swagger/SummitSpeakersSchemas.php +++ b/app/Swagger/SummitSpeakersSchemas.php @@ -2,8 +2,112 @@ namespace App\Swagger\schemas; +use App\Jobs\Emails\PresentationSubmissions\Invitations\InviteSubmissionEmail; +use App\Jobs\Emails\PresentationSubmissions\Invitations\ReInviteSubmissionEmail; use OpenApi\Attributes as OA; +#[OA\Schema( + schema: 'PaginatedSummitSubmissionInvitationsResponse', + allOf: [ + new OA\Schema(ref: '#/components/schemas/PaginateDataSchemaResponse'), + new OA\Schema( + type: 'object', + properties: [ + new OA\Property( + property: 'data', + type: 'array', + items: new OA\Items(ref: '#/components/schemas/SummitSubmissionInvitation') + ) + ] + ) + ] +)] +class PaginatedSummitSubmissionInvitationsResponseSchema {} + +#[OA\Schema( + schema: 'SummitSubmissionInvitationCSV', + type: 'object', + properties: [ + new OA\Property(property: 'id', type: 'integer', example: 1), + new OA\Property(property: 'email', type: 'string', format: 'email', example: 'speaker@example.com'), + new OA\Property(property: 'first_name', type: 'string', example: 'John'), + new OA\Property(property: 'last_name', type: 'string', example: 'Doe'), + new OA\Property(property: 'speaker_id', type: 'integer', nullable: true, example: 123), + new OA\Property(property: 'summit_id', type: 'integer', example: 1), + new OA\Property(property: 'is_sent', type: 'boolean', example: false), + new OA\Property(property: 'sent_date', type: 'integer', description: 'Unix timestamp', nullable: true, example: 1640995200), + new OA\Property(property: 'tags', type: 'string', example: 'tag1,tag2,tag3') + ] +)] +class SummitSubmissionInvitationCSVSchema {} + +#[OA\Schema( + schema: 'SummitSubmissionInvitationCreateRequest', + type: 'object', + required: ['email', 'first_name', 'last_name'], + properties: [ + new OA\Property(property: 'email', type: 'string', format: 'email', example: 'speaker@example.com'), + new OA\Property(property: 'first_name', type: 'string', example: 'John'), + new OA\Property(property: 'last_name', type: 'string', example: 'Doe'), + new OA\Property( + property: 'tags', + type: 'array', + items: new OA\Items(type: 'string'), + example: ['tag1', 'tag2'], + nullable: true + ) + ] +)] +class SummitSubmissionInvitationCreateRequestSchema {} + +#[OA\Schema( + schema: 'SummitSubmissionInvitationUpdateRequest', + type: 'object', + properties: [ + new OA\Property(property: 'email', type: 'string', format: 'email', example: 'speaker@example.com', nullable: true), + new OA\Property(property: 'first_name', type: 'string', example: 'John', nullable: true), + new OA\Property(property: 'last_name', type: 'string', example: 'Doe', nullable: true), + new OA\Property( + property: 'tags', + type: 'array', + items: new OA\Items(type: 'string'), + example: ['tag1', 'tag2'], + nullable: true + ) + ] +)] +class SummitSubmissionInvitationUpdateRequestSchema {} + +#[OA\Schema( + schema: 'SendSummitSubmissionInvitationsRequest', + type: 'object', + required: ['email_flow_event'], + properties: [ + new OA\Property( + property: 'email_flow_event', + type: 'string', + enum: [InviteSubmissionEmail::EVENT_SLUG, ReInviteSubmissionEmail::EVENT_SLUG], + example: InviteSubmissionEmail::EVENT_SLUG + ), + new OA\Property(property: 'selection_plan_id', type: 'integer', example: 1, nullable: true), + new OA\Property( + property: 'invitations_ids', + type: 'array', + items: new OA\Items(type: 'integer'), + example: [1, 2, 3], + nullable: true + ), + new OA\Property( + property: 'excluded_invitations_ids', + type: 'array', + items: new OA\Items(type: 'integer'), + example: [4, 5], + nullable: true + ) + ] +)] +class SendSummitSubmissionInvitationsRequestSchema {} + // #[OA\Schema( @@ -72,4 +176,4 @@ class SpeakerOrganizationalRoleSchema )] class SpeakerOrganizationalRolesResponseSchema { -} \ No newline at end of file +}