Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] main from AzuraCast:main #125

Merged
merged 3 commits into from
Mar 8, 2025
Merged
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
2 changes: 1 addition & 1 deletion backend/src/Console/Command/Dev/GenerateApiDocsCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public function generate(
$srcDir . '/Radio/Enums', // Enums
$srcDir . '/Webhook/Enums', // Enums
], [
'Migrations',
'Migration',
]);

$generator = new Generator($this->logger);
Expand Down
32 changes: 29 additions & 3 deletions backend/src/Controller/Api/Admin/Acme/CertificateLogAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,40 @@

use App\Controller\Api\Traits\HasLogViewer;
use App\Controller\SingleActionInterface;
use App\Entity\Api\LogContents;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use App\Utilities\File;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[
OA\Get(
path: '/admin/acme-log/{path}',
operationId: 'adminAcmeViewLog',
description: 'View the logs of a manually run ACME certificate renewal.',
tags: [OpenApi::TAG_ADMIN],
parameters: [
new OA\Parameter(
name: 'path',
description: 'Log path as returned by the Run action.',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
),
],
responses: [
new OpenApi\Response\Success(
content: new OA\JsonContent(
ref: LogContents::class
)
),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\GenericError(),
]
),
]
final class CertificateLogAction implements SingleActionInterface
{
use HasLogViewer;
Expand Down
27 changes: 24 additions & 3 deletions backend/src/Controller/Api/Admin/Backups/DeleteAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,32 @@
use App\Flysystem\ExtendedFilesystemInterface;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[
OA\Delete(
path: '/admin/backups/delete/{path}',
operationId: 'deleteBackup',
description: 'Delete a given backup.',
tags: [OpenApi::TAG_ADMIN_BACKUPS],
parameters: [
new OA\Parameter(
name: 'path',
description: 'Download path (base64-encoded "StorageLocationID | Path")',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
),
],
responses: [
new OpenApi\Response\Success(),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\GenericError(),
]
)
]
final class DeleteAction extends AbstractFileAction
{
public function __invoke(
Expand Down
27 changes: 24 additions & 3 deletions backend/src/Controller/Api/Admin/Backups/DownloadAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,32 @@
use App\Flysystem\ExtendedFilesystemInterface;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[
OA\Get(
path: '/admin/backups/download/{path}',
operationId: 'downloadBackup',
description: 'Download a given backup.',
tags: [OpenApi::TAG_ADMIN_BACKUPS],
parameters: [
new OA\Parameter(
name: 'path',
description: 'Download path (base64-encoded "StorageLocationID | Path")',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
),
],
responses: [
new OpenApi\Response\SuccessWithDownload(),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\GenericError(),
]
)
]
final class DownloadAction extends AbstractFileAction
{
public function __invoke(
Expand Down
2 changes: 1 addition & 1 deletion backend/src/Controller/Api/Admin/Backups/GetAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
path: '/admin/backups',
operationId: 'getBackups',
description: 'Return a list of all current backups.',
tags: [OpenApi::TAG_ADMIN],
tags: [OpenApi::TAG_ADMIN_BACKUPS],
responses: [
new OpenApi\Response\Success(
content: new OA\JsonContent(
Expand Down
32 changes: 29 additions & 3 deletions backend/src/Controller/Api/Admin/Backups/GetLogAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,40 @@

use App\Controller\Api\Traits\HasLogViewer;
use App\Controller\SingleActionInterface;
use App\Entity\Api\LogContents;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use App\Utilities\File;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[
OA\Get(
path: '/admin/backups/log/{path}',
operationId: 'adminBackupsViewLog',
description: 'View a specific backup log contents.',
tags: [OpenApi::TAG_ADMIN_BACKUPS],
parameters: [
new OA\Parameter(
name: 'path',
description: 'Log path as returned by the Run action.',
in: 'path',
required: true,
schema: new OA\Schema(type: 'string')
),
],
responses: [
new OpenApi\Response\Success(
content: new OA\JsonContent(
ref: LogContents::class
)
),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\GenericError(),
]
),
]
final class GetLogAction implements SingleActionInterface
{
use HasLogViewer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use App\Assets\AssetTypes;
use App\Container\EnvironmentAwareTrait;
use App\Controller\SingleActionInterface;
use App\Entity\Api\CustomAsset;
use App\Entity\Api\UploadedRecordStatus;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
Expand All @@ -34,7 +34,7 @@ enum: AssetTypes::class
responses: [
new OpenApi\Response\Success(
content: new OA\JsonContent(
ref: CustomAsset::class
ref: UploadedRecordStatus::class
)
),
new OpenApi\Response\AccessDenied(),
Expand All @@ -57,7 +57,7 @@ public function __invoke(
$customAsset = AssetTypes::from($type)->createObject($this->environment);

return $response->withJson(
new CustomAsset(
new UploadedRecordStatus(
$customAsset->isUploaded(),
$customAsset->getUrl()
)
Expand Down
4 changes: 2 additions & 2 deletions backend/src/Controller/Api/Stations/Art/GetArtAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,10 @@
),
],
responses: [
new OpenApi\Response\Success(
new OpenApi\Response\SuccessWithImage(
description: 'The requested album artwork'
),
new OpenApi\Response\NotFound(
new OpenApi\Response\Redirect(
description: 'Image not found; generic filler image.'
),
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
use App\Assets\AssetTypes;
use App\Container\EnvironmentAwareTrait;
use App\Controller\SingleActionInterface;
use App\Entity\Api\CustomAsset;
use App\Entity\Api\UploadedRecordStatus;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
Expand Down Expand Up @@ -35,7 +35,7 @@ enum: AssetTypes::class
responses: [
new OpenApi\Response\Success(
content: new OA\JsonContent(
ref: CustomAsset::class
ref: UploadedRecordStatus::class
)
),
new OpenApi\Response\AccessDenied(),
Expand All @@ -61,7 +61,7 @@ public function __invoke(
);

return $response->withJson(
new CustomAsset(
new UploadedRecordStatus(
$customAsset->isUploaded(),
$customAsset->getUrl(),
)
Expand Down
31 changes: 17 additions & 14 deletions backend/src/Controller/Api/Stations/Fallback/GetFallbackAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

use App\Controller\SingleActionInterface;
use App\Entity\Api\Error;
use App\Entity\Api\UploadedRecordStatus;
use App\Flysystem\StationFilesystems;
use App\Http\Response;
use App\Http\ServerRequest;
Expand All @@ -23,7 +24,9 @@
],
responses: [
new OpenApi\Response\Success(
/* TODO API Body */
content: new OA\JsonContent(
ref: UploadedRecordStatus::class
)
),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\NotFound(),
Expand Down Expand Up @@ -56,14 +59,14 @@ public function __invoke(
);
}

return $response->withJson([
'hasRecord' => true,
'links' => [
'download' => $router->fromHere(
return $response->withJson(
new UploadedRecordStatus(
true,
$router->fromHere(
routeParams: ['do' => 'download']
),
],
]);
)
)
);
}
}

Expand All @@ -72,11 +75,11 @@ public function __invoke(
->withJson(Error::notFound());
}

return $response->withJson([
'hasRecord' => false,
'links' => [
'download' => null,
],
]);
return $response->withJson(
new UploadedRecordStatus(
false,
null,
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@
),
],
responses: [
new OpenApi\Response\Success(
/* TODO API Body */
),
new OpenApi\Response\SuccessWithDownload(),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\NotFound(),
new OpenApi\Response\GenericError(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,32 @@
use App\Entity\Repository\StationPlaylistRepository;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[OA\Delete(
path: '/station/{station_id}/playlist/{id}/queue',
operationId: 'deletePlaylistQueue',
description: 'Reset the internal playback queue of a shuffled, song-based playlist.',
tags: [OpenApi::TAG_STATIONS_PLAYLISTS],
parameters: [
new OA\Parameter(ref: OpenApi::REF_STATION_ID_REQUIRED),
new OA\Parameter(
name: 'id',
description: 'Playlist ID',
in: 'path',
required: true,
schema: new OA\Schema(type: 'int', format: 'int64')
),
],
responses: [
new OpenApi\Response\Success(),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\NotFound(),
new OpenApi\Response\GenericError(),
]
)]
final class DeleteQueueAction implements SingleActionInterface
{
public function __construct(
Expand Down
27 changes: 24 additions & 3 deletions backend/src/Controller/Api/Stations/Playlists/EmptyAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,32 @@
use App\Exception;
use App\Http\Response;
use App\Http\ServerRequest;
use App\OpenApi;
use OpenApi\Attributes as OA;
use Psr\Http\Message\ResponseInterface;

/*
* TODO API
*/
#[OA\Delete(
path: '/station/{station_id}/playlist/{id}/empty',
operationId: 'deleteEmptyPlaylist',
description: 'Empty the contents of a song-based playlist.',
tags: [OpenApi::TAG_STATIONS_PLAYLISTS],
parameters: [
new OA\Parameter(ref: OpenApi::REF_STATION_ID_REQUIRED),
new OA\Parameter(
name: 'id',
description: 'Playlist ID',
in: 'path',
required: true,
schema: new OA\Schema(type: 'int', format: 'int64')
),
],
responses: [
new OpenApi\Response\Success(),
new OpenApi\Response\AccessDenied(),
new OpenApi\Response\NotFound(),
new OpenApi\Response\GenericError(),
]
)]
final class EmptyAction implements SingleActionInterface
{
public function __construct(
Expand Down
Loading