roles endpoints in media controller added

This commit is contained in:
2024-10-06 21:22:08 +02:00
Unverified
parent 41b15abef1
commit 4a5a688aa4
7 changed files with 148 additions and 2 deletions

View File

@@ -8,7 +8,13 @@ public class ActorRoleRequest : ActorRole, IActorRoleMediaRequest, IActorRolePer
PersonActorRole IActorRoleMediaRequest.CreateActorRole(long mediaId)
{
this.MediaId = mediaId;
MediaId = mediaId;
return CreateActorRole();
}
PersonActorRole IActorRolePersonRequest.CreateActorRole(long personId)
{
PersonId = personId;
return CreateActorRole();
}

View File

@@ -8,7 +8,13 @@ public class CreatorRoleRequest : CreatorRole, ICreatorRoleMediaRequest, ICreato
PersonCreatorRole ICreatorRoleMediaRequest.CreateCreatorRole(long mediaId)
{
this.MediaId = mediaId;
MediaId = mediaId;
return CreateCreatorRole();
}
PersonCreatorRole ICreatorRolePersonRequest.CreateCreatorRole(long personId)
{
PersonId = personId;
return CreateCreatorRole();
}

View File

@@ -1,4 +1,5 @@
using System.Text.Json.Serialization;
using WatchIt.Database.Model.Person;
namespace WatchIt.Common.Model.Roles;
@@ -16,4 +17,12 @@ public interface IActorRolePersonRequest
string Name { get; set; }
#endregion
#region PUBLIC METHODS
PersonActorRole CreateActorRole(long personId);
#endregion
}

View File

@@ -1,4 +1,5 @@
using System.Text.Json.Serialization;
using WatchIt.Database.Model.Person;
namespace WatchIt.Common.Model.Roles;
@@ -13,4 +14,12 @@ public interface ICreatorRolePersonRequest
short TypeId { get; set; }
#endregion
#region PUBLIC METHODS
PersonCreatorRole CreateCreatorRole(long personId);
#endregion
}

View File

@@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Roles;
using WatchIt.WebAPI.Services.Controllers.Persons;
namespace WatchIt.WebAPI.Controllers;
@@ -104,6 +105,40 @@ public class PersonsController : ControllerBase
[ProducesResponseType(typeof(void), StatusCodes.Status403Forbidden)]
public async Task<ActionResult> DeletePersonPhoto([FromRoute]long id) => await _personsControllerService.DeletePersonPhoto(id);
#endregion
#region Roles
[HttpGet("{id}/roles/actor")]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<ActorRoleResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetPersonAllActorRoles([FromRoute]long id, ActorRolePersonQueryParameters query) => await _personsControllerService.GetPersonAllActorRoles(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> PostPersonActorRole([FromRoute]long id, [FromBody]IActorRolePersonRequest body) => await _personsControllerService.PostPersonActorRole(id, body);
[HttpGet("{id}/roles/creator")]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<CreatorRoleResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetPersonAllCreatorRoles([FromRoute]long id, CreatorRolePersonQueryParameters query) => await _personsControllerService.GetPersonAllCreatorRoles(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> PostPersonCreatorRole([FromRoute]long id, [FromBody]ICreatorRolePersonRequest body) => await _personsControllerService.PostPersonCreatorRole(id, body);
#endregion
#endregion

View File

@@ -1,4 +1,5 @@
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Roles;
using WatchIt.WebAPI.Services.Controllers.Common;
namespace WatchIt.WebAPI.Services.Controllers.Persons;
@@ -16,4 +17,9 @@ public interface IPersonsControllerService
Task<RequestResult> GetPersonPhoto(long id);
Task<RequestResult> PutPersonPhoto(long id, PersonPhotoRequest data);
Task<RequestResult> DeletePersonPhoto(long id);
Task<RequestResult> GetPersonAllActorRoles(long personId, ActorRolePersonQueryParameters queryParameters);
Task<RequestResult> PostPersonActorRole(long personId, IActorRolePersonRequest data);
Task<RequestResult> GetPersonAllCreatorRoles(long personId, CreatorRolePersonQueryParameters queryParameters);
Task<RequestResult> PostPersonCreatorRole(long personId, ICreatorRolePersonRequest data);
}

View File

@@ -1,5 +1,6 @@
using Microsoft.EntityFrameworkCore;
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Roles;
using WatchIt.Database;
using WatchIt.Database.Model.Person;
using WatchIt.WebAPI.Services.Controllers.Common;
@@ -218,5 +219,79 @@ public class PersonsControllerService : IPersonsControllerService
#endregion
#region Roles
public async Task<RequestResult> GetPersonAllActorRoles(long personId, ActorRolePersonQueryParameters queryParameters)
{
Database.Model.Person.Person? person = await _database.Persons.FirstOrDefaultAsync(x => x.Id == personId);
if (person is null)
{
return RequestResult.NotFound();
}
IEnumerable<PersonActorRole> dataRaw = await _database.PersonActorRoles.Where(x => x.PersonId == personId).ToListAsync();
IEnumerable<ActorRoleResponse> data = dataRaw.Select(x => new ActorRoleResponse(x));
data = queryParameters.PrepareData(data);
return RequestResult.Ok(data);
}
public async Task<RequestResult> PostPersonActorRole(long personId, IActorRolePersonRequest data)
{
UserValidator validator = _userService.GetValidator().MustBeAdmin();
if (!validator.IsValid)
{
return RequestResult.Forbidden();
}
Database.Model.Person.Person? person = await _database.Persons.FirstOrDefaultAsync(x => x.Id == personId);
if (person is null)
{
return RequestResult.NotFound();
}
PersonActorRole item = data.CreateActorRole(personId);
await _database.PersonActorRoles.AddAsync(item);
await _database.SaveChangesAsync();
return RequestResult.Created($"roles/actor/{item.Id}", new ActorRoleResponse(item));
}
public async Task<RequestResult> GetPersonAllCreatorRoles(long personId, CreatorRolePersonQueryParameters queryParameters)
{
Database.Model.Person.Person? media = await _database.Persons.FirstOrDefaultAsync(x => x.Id == personId);
if (media is null)
{
return RequestResult.NotFound();
}
IEnumerable<PersonCreatorRole> dataRaw = await _database.PersonCreatorRoles.Where(x => x.PersonId == personId).ToListAsync();
IEnumerable<CreatorRoleResponse> data = dataRaw.Select(x => new CreatorRoleResponse(x));
data = queryParameters.PrepareData(data);
return RequestResult.Ok(data);
}
public async Task<RequestResult> PostPersonCreatorRole(long personId, ICreatorRolePersonRequest data)
{
UserValidator validator = _userService.GetValidator().MustBeAdmin();
if (!validator.IsValid)
{
return RequestResult.Forbidden();
}
Database.Model.Person.Person? media = await _database.Persons.FirstOrDefaultAsync(x => x.Id == personId);
if (media is null)
{
return RequestResult.NotFound();
}
PersonCreatorRole item = data.CreateCreatorRole(personId);
await _database.PersonCreatorRoles.AddAsync(item);
await _database.SaveChangesAsync();
return RequestResult.Created($"roles/creator/{item.Id}", new CreatorRoleResponse(item));
}
#endregion
#endregion
}