models added, roles endpoints in media controller added

This commit is contained in:
2024-10-06 14:51:58 +02:00
Unverified
parent b86c021b9b
commit 6cae764d1d
19 changed files with 537 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ using WatchIt.Common.Model.Genres;
using WatchIt.Common.Model.Media;
using WatchIt.Common.Model.Photos;
using WatchIt.Common.Model.Rating;
using WatchIt.Common.Model.Roles;
using WatchIt.WebAPI.Services.Controllers.Media;
namespace WatchIt.WebAPI.Controllers;
@@ -160,6 +161,40 @@ public class MediaController : ControllerBase
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> PostPhoto([FromRoute]long id, [FromBody]MediaPhotoRequest body) => await _mediaControllerService.PostMediaPhoto(id, body);
#endregion
#region Roles
[HttpGet("{id}/roles/actor")]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<ActorRoleResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetMediaAllActorRoles([FromRoute]long id, ActorRoleMediaQueryParameters query) => await _mediaControllerService.GetMediaAllActorRoles(id, query);
[HttpPost("{id}/roles/actor")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[ProducesResponseType(typeof(ActorRoleResponse), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> PostMediaActorRole([FromRoute]long id, [FromBody]IActorRoleMediaRequest body) => await _mediaControllerService.PostMediaActorRole(id, body);
[HttpGet("{id}/roles/creator")]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<CreatorRoleResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetMediaAllCreatorRoles([FromRoute]long id, CreatorRoleMediaQueryParameters query) => await _mediaControllerService.GetMediaAllCreatorRoles(id, query);
[HttpPost("{id}/roles/creator")]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[ProducesResponseType(typeof(CreatorRoleResponse), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(void), StatusCodes.Status401Unauthorized)]
[ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> PostMediaCreatorRole([FromRoute]long id, [FromBody]ICreatorRoleMediaRequest body) => await _mediaControllerService.PostMediaCreatorRole(id, body);
#endregion
#endregion

View File

@@ -1,6 +1,7 @@
using WatchIt.Common.Model.Media;
using WatchIt.Common.Model.Photos;
using WatchIt.Common.Model.Rating;
using WatchIt.Common.Model.Roles;
using WatchIt.WebAPI.Services.Controllers.Common;
namespace WatchIt.WebAPI.Services.Controllers.Media;
@@ -27,4 +28,9 @@ public interface IMediaControllerService
Task<RequestResult> GetMediaPhotos(long mediaId, PhotoQueryParameters queryParameters);
Task<RequestResult> GetMediaPhotoRandomBackground(long mediaId);
Task<RequestResult> PostMediaPhoto(long mediaId, MediaPhotoRequest data);
Task<RequestResult> GetMediaAllActorRoles(long mediaId, ActorRoleMediaQueryParameters queryParameters);
Task<RequestResult> PostMediaActorRole(long mediaId, IActorRoleMediaRequest data);
Task<RequestResult> GetMediaAllCreatorRoles(long mediaId, CreatorRoleMediaQueryParameters queryParameters);
Task<RequestResult> PostMediaCreatorRole(long mediaId, ICreatorRoleMediaRequest data);
}

View File

@@ -4,8 +4,10 @@ using WatchIt.Common.Model.Genres;
using WatchIt.Common.Model.Media;
using WatchIt.Common.Model.Photos;
using WatchIt.Common.Model.Rating;
using WatchIt.Common.Model.Roles;
using WatchIt.Database;
using WatchIt.Database.Model.Media;
using WatchIt.Database.Model.Person;
using WatchIt.Database.Model.Rating;
using WatchIt.Database.Model.ViewCount;
using WatchIt.WebAPI.Services.Controllers.Common;
@@ -267,7 +269,7 @@ public class MediaControllerService(DatabaseContext database, IUserService userS
await database.SaveChangesAsync();
MediaPosterResponse returnData = new MediaPosterResponse(media.MediaPosterImage);
MediaPosterResponse returnData = new MediaPosterResponse(media.MediaPosterImage!);
return RequestResult.Ok(returnData);
}
@@ -351,5 +353,79 @@ public class MediaControllerService(DatabaseContext database, IUserService userS
#endregion
#region Roles
public async Task<RequestResult> GetMediaAllActorRoles(long mediaId, ActorRoleMediaQueryParameters queryParameters)
{
Database.Model.Media.Media? media = await database.Media.FirstOrDefaultAsync(x => x.Id == mediaId);
if (media is null)
{
return RequestResult.NotFound();
}
IEnumerable<PersonActorRole> dataRaw = await database.PersonActorRoles.Where(x => x.MediaId == mediaId).ToListAsync();
IEnumerable<ActorRoleResponse> data = dataRaw.Select(x => new ActorRoleResponse(x));
data = queryParameters.PrepareData(data);
return RequestResult.Ok(data);
}
public async Task<RequestResult> PostMediaActorRole(long mediaId, IActorRoleMediaRequest data)
{
UserValidator validator = userService.GetValidator().MustBeAdmin();
if (!validator.IsValid)
{
return RequestResult.Forbidden();
}
Database.Model.Media.Media? media = await database.Media.FirstOrDefaultAsync(x => x.Id == mediaId);
if (media is null)
{
return RequestResult.NotFound();
}
PersonActorRole item = data.CreateActorRole(mediaId);
await database.PersonActorRoles.AddAsync(item);
await database.SaveChangesAsync();
return RequestResult.Created($"roles/actor/{item.Id}", new ActorRoleResponse(item));
}
public async Task<RequestResult> GetMediaAllCreatorRoles(long mediaId, CreatorRoleMediaQueryParameters queryParameters)
{
Database.Model.Media.Media? media = await database.Media.FirstOrDefaultAsync(x => x.Id == mediaId);
if (media is null)
{
return RequestResult.NotFound();
}
IEnumerable<PersonCreatorRole> dataRaw = await database.PersonCreatorRoles.Where(x => x.MediaId == mediaId).ToListAsync();
IEnumerable<CreatorRoleResponse> data = dataRaw.Select(x => new CreatorRoleResponse(x));
data = queryParameters.PrepareData(data);
return RequestResult.Ok(data);
}
public async Task<RequestResult> PostMediaCreatorRole(long mediaId, ICreatorRoleMediaRequest data)
{
UserValidator validator = userService.GetValidator().MustBeAdmin();
if (!validator.IsValid)
{
return RequestResult.Forbidden();
}
Database.Model.Media.Media? media = await database.Media.FirstOrDefaultAsync(x => x.Id == mediaId);
if (media is null)
{
return RequestResult.NotFound();
}
PersonCreatorRole item = data.CreateCreatorRole(mediaId);
await database.PersonCreatorRoles.AddAsync(item);
await database.SaveChangesAsync();
return RequestResult.Created($"roles/creator/{item.Id}", new CreatorRoleResponse(item));
}
#endregion
#endregion
}