diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitDocumentsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitDocumentsApiController.php index fd3e057cd..f60f3aa55 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitDocumentsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitDocumentsApiController.php @@ -1,4 +1,7 @@ -service = $service; } - /** - * @param LaravelRequest $request - * @param $summit_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Get( + path: "/api/v1/summits/{id}/summit-documents", + description: "Get all summit documents", + summary: "Get summit documents", + operationId: "getAllSummitDocuments", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::ReadAllSummitData, + ]]], + 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, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Filter operators: name=@/==, description=@/==, label=@/==, event_type=@/==, selection_plan_id==' + ), + new OA\Parameter( + name: 'order', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Order by fields: id, name, label' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to expand: event_types, summit, selection_plan' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include: event_types, summit, selection_plan' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/PaginatedSummitDocumentsResponse") + ), + 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 getAllBySummit($summit_id) { + return $this->traitGetAllBySummit($summit_id); + } + + #[OA\Get( + path: "/api/v1/summits/{id}/summit-documents/{document_id}", + description: "Get a specific summit document", + summary: "Get summit document", + operationId: "getSummitDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::ReadAllSummitData, + ]]], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document id' + ), + new OA\Parameter( + name: 'expand', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to expand: event_types, summit, selection_plan' + ), + new OA\Parameter( + name: 'relations', + in: 'query', + required: false, + explode: false, + schema: new OA\Schema(type: 'string'), + description: 'Relations to include: event_types, summit, selection_plan' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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, $document_id) { + return $this->traitGet($summit_id, $document_id); + } + + #[OA\Post( + path: "/api/v1/summits/{id}/summit-documents", + description: "Create a new summit document", + summary: "Create summit document", + operationId: "addSummitDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + 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/SummitDocumentCreateRequest") + ) + ), + responses: [ + new OA\Response( + response: 201, + description: "Created", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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(LaravelRequest $request, $summit_id){ try { @@ -140,12 +331,59 @@ public function add(LaravelRequest $request, $summit_id){ } } - /** - * @param LaravelRequest $request - * @param $summit_id - * @param $document_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: "/api/v1/summits/{id}/summit-documents/{document_id}", + description: "Update an existing summit document", + summary: "Update summit document", + operationId: "updateSummitDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document id' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: 'multipart/form-data', + schema: new OA\Schema(ref: "#/components/schemas/SummitDocumentUpdateRequest") + ) + ), + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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(LaravelRequest $request, $summit_id, $document_id){ try { @@ -208,6 +446,50 @@ public function update(LaravelRequest $request, $summit_id, $document_id){ } } + #[OA\Delete( + path: "/api/v1/summits/{id}/summit-documents/{document_id}", + description: "Delete a summit document", + summary: "Delete summit document", + operationId: "deleteSummitDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document 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, $document_id) { + return $this->traitDelete($summit_id, $document_id); + } + /** * @inheritDoc */ @@ -269,12 +551,59 @@ protected function getOrderRules():array{ ]; } - /** - * @param $summit_id - * @param $document_id - * @param $event_type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Put( + path: "/api/v1/summits/{id}/summit-documents/{document_id}/event-types/{event_type_id}", + description: "Add an event type to a summit document", + summary: "Add event type to document", + operationId: "addEventTypeToDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document id' + ), + new OA\Parameter( + name: 'event_type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The event type id' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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 addEventType($summit_id, $document_id, $event_type_id){ try { @@ -307,12 +636,59 @@ public function addEventType($summit_id, $document_id, $event_type_id){ } } - /** - * @param $summit_id - * @param $document_id - * @param $event_type_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Delete( + path: "/api/v1/summits/{id}/summit-documents/{document_id}/event-types/{event_type_id}", + description: "Remove an event type from a summit document", + summary: "Remove event type from document", + operationId: "removeEventTypeFromDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document id' + ), + new OA\Parameter( + name: 'event_type_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The event type id' + ) + ], + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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 removeEventType($summit_id, $document_id, $event_type_id){ try { @@ -345,12 +721,69 @@ public function removeEventType($summit_id, $document_id, $event_type_id){ } } - /** - * @param LaravelRequest $request - * @param $summit_id - * @param $document_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Post( + path: "/api/v1/summits/{id}/summit-documents/{document_id}/file", + description: "Add or replace a file for a summit document", + summary: "Add file to document", + operationId: "addFileToDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document id' + ) + ], + requestBody: new OA\RequestBody( + required: true, + content: new OA\MediaType( + mediaType: 'multipart/form-data', + schema: new OA\Schema( + required: ['file'], + properties: [ + new OA\Property( + property: 'file', + type: 'string', + format: 'binary', + description: 'Document file to upload' + ) + ] + ) + ) + ), + responses: [ + new OA\Response( + response: 200, + description: "OK", + content: new OA\JsonContent(ref: "#/components/schemas/SummitDocument") + ), + 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 addFile(LaravelRequest $request, $summit_id, $document_id){ return $this->processRequest(function () use ($request, $summit_id, $document_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); @@ -371,11 +804,46 @@ public function addFile(LaravelRequest $request, $summit_id, $document_id){ }); } - /** - * @param $summit_id - * @param $document_id - * @return \Illuminate\Http\JsonResponse|mixed - */ + #[OA\Delete( + path: "/api/v1/summits/{id}/summit-documents/{document_id}/file", + description: "Remove a file from a summit document", + summary: "Remove file from document", + operationId: "removeFileFromDocument", + tags: ['Summit Documents'], + security: [['summit_document_oauth2' => [ + SummitScopes::WriteSummitData, + ]]], + x: [ + 'required-groups' => [ + IGroup::SuperAdmins, + IGroup::Administrators, + IGroup::SummitAdministrators, + ] + ], + parameters: [ + new OA\Parameter( + name: 'id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The summit id' + ), + new OA\Parameter( + name: 'document_id', + in: 'path', + required: true, + schema: new OA\Schema(type: 'integer'), + description: 'The document 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 removeFile($summit_id, $document_id){ return $this->processRequest(function () use ($summit_id, $document_id) { $summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->resource_server_context)->find($summit_id); @@ -385,4 +853,4 @@ public function removeFile($summit_id, $document_id){ return $this->deleted(); }); } -} \ No newline at end of file +} diff --git a/app/Swagger/Models/SummitBadgeTypeSchema.php b/app/Swagger/Models/SummitBadgeTypeSchema.php index 6125c571c..c3fdc6118 100644 --- a/app/Swagger/Models/SummitBadgeTypeSchema.php +++ b/app/Swagger/Models/SummitBadgeTypeSchema.php @@ -10,12 +10,12 @@ type: 'object', properties: [ new OA\Property(property: 'id', type: 'integer', example: 1), - new OA\Property(property: 'created', type: 'integer', example: 1), - new OA\Property(property: 'last_edited', type: 'integer', example: 1), - new OA\Property(property: 'name', type: 'string'), - new OA\Property(property: 'description', type: 'string'), - new OA\Property(property: 'template_content', type: 'string'), - new OA\Property(property: 'is_default', type: 'boolean'), + 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: "name", type: "string", example: "Attendee"), + new OA\Property(property: "description", type: "string", example: "Standard attendee badge"), + new OA\Property(property: "template_content", type: "string", nullable: true, example: "Badge template content"), + new OA\Property(property: "is_default", type: "boolean", example: false), new OA\Property(property: 'summit_id', type: 'integer', description: 'Summit ID, use expand=summit for full object details'), new OA\Property( property: 'access_levels', diff --git a/app/Swagger/Security/SummitAuthSchema.php b/app/Swagger/Security/SummitAuthSchema.php new file mode 100644 index 000000000..2e5550a54 --- /dev/null +++ b/app/Swagger/Security/SummitAuthSchema.php @@ -0,0 +1,25 @@ + 'Read All Summit Data', + SummitScopes::WriteSummitData => 'Write Summit Data', + ], + ), + ], + ) +] +class SummitAuthSchema {} diff --git a/app/Swagger/SummitRegistrationSchemas.php b/app/Swagger/SummitRegistrationSchemas.php index e9440c4e6..2d2860b2a 100644 --- a/app/Swagger/SummitRegistrationSchemas.php +++ b/app/Swagger/SummitRegistrationSchemas.php @@ -6,43 +6,6 @@ // Badge Types -#[OA\Schema( - schema: "SummitBadgeType", - description: "Summit badge 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: "name", type: "string", example: "Attendee"), - new OA\Property(property: "description", type: "string", example: "Standard attendee badge"), - new OA\Property(property: "template_content", type: "string", nullable: true, example: "Badge template content"), - new OA\Property(property: "is_default", type: "boolean", example: false), - new OA\Property(property: "summit_id", type: "integer", example: 1), - new OA\Property( - property: "access_levels", - type: "array", - items: new OA\Items(type: "integer"), - description: "SummitAccessLevelType IDs, full objects when expanded" - ), - new OA\Property( - property: "badge_features", - type: "array", - items: new OA\Items(type: "integer"), - description: "SummitBadgeFeatureType IDs, full objects when expanded", - ), - new OA\Property( - property: "allowed_view_types", - type: "array", - items: new OA\Items(type: "integer"), - description: "SummitBadgeViewType IDs, full objects when expanded", - ), - ], -)] -class SummitBadgeType -{ -} - #[OA\Schema( schema: "PaginatedSummitBadgeTypesResponse", description: "Paginated list of summit badge types", diff --git a/app/Swagger/SummitSchemas.php b/app/Swagger/SummitSchemas.php index 489d39517..16c096390 100644 --- a/app/Swagger/SummitSchemas.php +++ b/app/Swagger/SummitSchemas.php @@ -4,6 +4,104 @@ use OpenApi\Attributes as OA; +// Summit Documents + +#[OA\Schema( + schema: "SummitDocument", + description: "Summit document", + 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: "name", type: "string", example: "Code of Conduct"), + new OA\Property(property: "description", type: "string", example: "Summit code of conduct document"), + new OA\Property(property: "show_always", type: "boolean", example: true), + new OA\Property(property: "label", type: "string", example: "Code of Conduct"), + new OA\Property(property: "file", type: "string", format: "uri", nullable: true, example: "https://example.com/document.pdf"), + new OA\Property(property: "web_link", type: "string", format: "uri", nullable: true, example: "https://example.com/page"), + new OA\Property(property: "selection_plan_id", type: "integer", nullable: true, description: "SelectionPlan ID, full object description when ?expand=summit (summit)"), + new OA\Property( + property: "event_types", + type: "array", + items: new OA\Items(type: "integer"), + description: "Array of SummitEventType: objects when expanded, ids otherwise", + ), + new OA\Property(property: "summit_id", type: "integer", description: "Summit ID, full object description when ?expand=summit (summit)"), + ] +)] +class SummitDocumentSchema {} + +#[OA\Schema( + schema: "PaginatedSummitDocumentsResponse", + description: "Paginated list of summit documents", + 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/SummitDocument") + ) + ] + ) + ] +)] +class PaginatedSummitDocumentsResponseSchema {} + +#[OA\Schema( + schema: "SummitDocumentCreateRequest", + description: "Request to create a summit document", + required: ["name", "label"], + type: "object", + properties: [ + new OA\Property(property: "name", type: "string", example: "Code of Conduct"), + new OA\Property(property: "label", type: "string", example: "Code of Conduct"), + new OA\Property(property: "description", type: "string", nullable: true, example: "Summit code of conduct document"), + new OA\Property(property: "show_always", type: "boolean", nullable: true, example: true), + new OA\Property(property: "web_link", type: "string", format: "uri", nullable: true, example: "https://example.com/page"), + new OA\Property(property: "selection_plan_id", type: "integer", nullable: true, example: 1), + new OA\Property( + property: "event_types", + type: "array", + nullable: true, + items: new OA\Items(type: "integer"), + example: [1, 2, 3] + ), + new OA\Property( + property: "file", + type: "string", + format: "binary", + nullable: true, + description: "Document file upload (required if web_link not provided)" + ), + ] +)] +class SummitDocumentCreateRequest {} + +#[OA\Schema( + schema: "SummitDocumentUpdateRequest", + description: "Request to update a summit document", + type: "object", + properties: [ + new OA\Property(property: "name", type: "string", nullable: true, example: "Code of Conduct"), + new OA\Property(property: "label", type: "string", nullable: true, example: "Code of Conduct"), + new OA\Property(property: "description", type: "string", nullable: true, example: "Summit code of conduct document"), + new OA\Property(property: "show_always", type: "boolean", nullable: true, example: true), + new OA\Property(property: "web_link", type: "string", format: "uri", nullable: true, example: "https://example.com/page"), + new OA\Property(property: "selection_plan_id", type: "integer", nullable: true, example: 1), + new OA\Property( + property: "event_types", + type: "array", + nullable: true, + items: new OA\Items(type: "integer"), + example: [1, 2, 3] + ), + ] +)] +class SummitDocumentUpdateRequest {} + // Summit Attendee Badges #[OA\Schema(