Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php namespace App\Http\Controllers;
<?php
namespace App\Http\Controllers;
/**
* Copyright 2021 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -13,24 +14,27 @@
**/

use App\Http\Utils\EpochCellFormatter;
use App\Models\Foundation\Main\IGroup;
use App\Models\Foundation\Summit\Repositories\IPresentationActionTypeRepository;
use App\Security\SummitScopes;
use App\Services\Model\ISummitPresentationActionTypeService;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Input;
use models\exceptions\ValidationException;
use models\oauth2\IResourceServerContext;
use models\summit\ISummitRepository;
use models\summit\Summit;
use models\utils\IEntity;
use ModelSerializers\SerializerRegistry;
use OpenApi\Attributes as OA;
use utils\Filter;
use utils\FilterElement;

/**
* Class OAuth2SummitPresentationActionTypeApiController
* @package App\Http\Controllers
*/
final class OAuth2SummitPresentationActionTypeApiController
extends OAuth2ProtectedController
final class OAuth2SummitPresentationActionTypeApiController extends OAuth2ProtectedController
{
/**
* @var ISummitRepository
Expand All @@ -55,8 +59,7 @@ public function __construct
IPresentationActionTypeRepository $repository,
ISummitRepository $summit_repository,
IResourceServerContext $resource_server_context
)
{
) {
parent::__construct($resource_server_context);
$this->repository = $repository;
$this->summit_repository = $summit_repository;
Expand Down Expand Up @@ -84,7 +87,7 @@ protected function addChild(Summit $summit, array $payload): IEntity
/**
* @inheritDoc
*/
function getAddValidationRules(array $payload): array
public function getAddValidationRules(array $payload): array
{
return SummitPresentationActionTypeValidationRulesFactory::build($payload, false);
}
Expand Down Expand Up @@ -116,7 +119,7 @@ protected function getChildFromSummit(Summit $summit, $child_id): ?IEntity
/**
* @inheritDoc
*/
function getUpdateValidationRules(array $payload): array
public function getUpdateValidationRules(array $payload): array
{
return SummitPresentationActionTypeValidationRulesFactory::build($payload, true);
}
Expand All @@ -133,10 +136,259 @@ protected function updateChild(Summit $summit, int $child_id, array $payload): I
* @param $summit_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Post(
path: '/api/v1/summits/{id}/presentation-action-types',
summary: 'Create a new presentation action type',
operationId: 'createPresentationActionType',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::WriteSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
],
requestBody: new OA\RequestBody(
required: true,
content: new OA\JsonContent(ref: '#/components/schemas/PresentationActionTypeCreateRequest')
),
responses: [
new OA\Response(
response: Response::HTTP_CREATED,
description: 'Presentation action type created',
content: new OA\JsonContent(ref: '#/components/schemas/PresentationActionType')
),
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 parent::add($summit_id);
}

/**
* @param $summit_id
* @param $action_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Get(
path: '/api/v1/summits/{id}/presentation-action-types/{action_id}',
summary: 'Get a presentation action type by ID',
operationId: 'getPresentationActionType',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::ReadAllSummitData,
SummitScopes::ReadSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'action_id', in: 'path', required: true, description: 'Presentation Action Type ID', schema: new OA\Schema(type: 'integer')),
],
responses: [
new OA\Response(
response: Response::HTTP_OK,
description: 'Successful response',
content: new OA\JsonContent(ref: '#/components/schemas/PresentationActionType')
),
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, $action_id)
{
return parent::get($summit_id, $action_id);
}

/**
* @param $summit_id
* @param $action_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Put(
path: '/api/v1/summits/{id}/presentation-action-types/{action_id}',
summary: 'Update a presentation action type',
operationId: 'updatePresentationActionType',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::WriteSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'action_id', in: 'path', required: true, description: 'Presentation Action Type ID', schema: new OA\Schema(type: 'integer')),
],
requestBody: new OA\RequestBody(
required: true,
content: new OA\JsonContent(ref: '#/components/schemas/PresentationActionTypeUpdateRequest')
),
responses: [
new OA\Response(
response: Response::HTTP_OK,
description: 'Presentation action type updated',
content: new OA\JsonContent(ref: '#/components/schemas/PresentationActionType')
),
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, $action_id)
{
return parent::update($summit_id, $action_id);
}

/**
* @param $summit_id
* @param $action_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Delete(
path: '/api/v1/summits/{id}/presentation-action-types/{action_id}',
summary: 'Delete a presentation action type',
operationId: 'deletePresentationActionType',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::WriteSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'action_id', in: 'path', required: true, description: 'Presentation Action Type ID', 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, $action_id)
{
return parent::delete($summit_id, $action_id);
}

/**
* @param $summit_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Get(
path: '/api/v1/summits/{id}/presentation-action-types',
summary: 'Get all presentation action types for a summit',
operationId: 'getAllPresentationActionTypes',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
IGroup::TrackChairs,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::ReadAllSummitData,
SummitScopes::ReadSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(
name: 'page',
in: 'query',
required: false,
description: 'Page number for pagination',
schema: new OA\Schema(type: 'integer', example: 1)
),
new OA\Parameter(
name: 'per_page',
in: 'query',
required: false,
description: 'Items per page',
schema: new OA\Schema(type: 'integer', example: 10, maximum: 100)
),
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'filter', in: 'query', description: 'Filter by label (label=@value, label==value)', schema: new OA\Schema(type: 'string')),
new OA\Parameter(name: 'order', in: 'query', description: 'Order by: +/-id, +/-label, +/-order', schema: new OA\Schema(type: 'string')),
new OA\Parameter(name: 'selection_plan_id', in: 'query', description: 'Filter by selection plan and include order field', schema: new OA\Schema(type: 'integer')),
],
responses: [
new OA\Response(
response: Response::HTTP_OK,
description: 'Successful response',
content: new OA\JsonContent(ref: '#/components/schemas/PaginatedPresentationActionTypesResponse')
),
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 getAllBySummit($summit_id)
{
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id);
if (is_null($summit)) return $this->error404();
if (is_null($summit))
return $this->error404();

return $this->_getAll(
function () {
Expand Down Expand Up @@ -178,10 +430,70 @@ function () {
* @param $summit_id
* @return \Illuminate\Http\JsonResponse|mixed
*/
#[OA\Get(
path: '/api/v1/summits/{id}/presentation-action-types/csv',
summary: 'Get all presentation action types for a summit in CSV format',
operationId: 'getAllPresentationActionTypesCSV',
x: [
'required-groups' => [
IGroup::SuperAdmins,
IGroup::Administrators,
IGroup::SummitAdministrators,
IGroup::TrackChairsAdmins,
]
],
security: [
[
'presentation_action_types_oauth2' => [
SummitScopes::ReadAllSummitData,
SummitScopes::ReadSummitData,
]
]
],
tags: ['Summits', 'Presentation Action Types'],
parameters: [
new OA\Parameter(
name: 'page',
in: 'query',
required: false,
description: 'Page number for pagination',
schema: new OA\Schema(type: 'integer', example: 1)
),
new OA\Parameter(
name: 'per_page',
in: 'query',
required: false,
description: 'Items per page',
schema: new OA\Schema(type: 'integer', example: 10, maximum: 100)
),
new OA\Parameter(name: 'id', in: 'path', required: true, description: 'Summit ID', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'filter', in: 'query', description: 'Filter by label (label=@value, label==value)', schema: new OA\Schema(type: 'string')),
new OA\Parameter(name: 'order', in: 'query', description: 'Order by: +/-id, +/-label, +/-order', schema: new OA\Schema(type: 'string')),
new OA\Parameter(name: 'selection_plan_id', in: 'query', description: 'Filter by selection plan and include order field', schema: new OA\Schema(type: 'integer')),
new OA\Parameter(name: 'columns', in: 'query', description: 'Comma-separated list of columns (allowed: id, created, last_edited, label, order)', schema: new OA\Schema(type: 'string')),
],
responses: [
new OA\Response(
response: Response::HTTP_OK,
description: 'CSV file',
content: new OA\MediaType(
mediaType: 'text/csv',
schema: new OA\Schema(type: 'string', format: 'binary')
)
),
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)
{
$summit = SummitFinderStrategyFactory::build($this->summit_repository, $this->getResourceServerContext())->find($summit_id);
if (is_null($summit)) return $this->error404();
if (is_null($summit))
return $this->error404();

return $this->_getAllCSV(
function () {
Expand Down
Loading