Rated people panel added

This commit is contained in:
2024-11-01 20:44:01 +01:00
Unverified
parent 226b2b619c
commit 1154cc547b
28 changed files with 479 additions and 59 deletions

View File

@@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using WatchIt.Common.Model.Accounts;
using WatchIt.Common.Model.Movies;
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Series;
using WatchIt.WebAPI.Services.Controllers.Accounts;
@@ -69,4 +70,10 @@ public class AccountsController(IAccountsControllerService accountsControllerSer
[ProducesResponseType(typeof(IEnumerable<SeriesRatedResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetAccountRatedSeries([FromRoute]long id, SeriesRatedQueryParameters query) => await accountsControllerService.GetAccountRatedSeries(id, query);
[HttpGet("{id}/persons")]
[AllowAnonymous]
[ProducesResponseType(typeof(IEnumerable<PersonRatedResponse>), StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult> GetAccountRatedPersons([FromRoute]long id, PersonRatedQueryParameters query) => await accountsControllerService.GetAccountRatedPersons(id, query);
}

View File

@@ -7,6 +7,7 @@ using SimpleToolkit.Extensions;
using WatchIt.Common.Model.Accounts;
using WatchIt.Common.Model.Media;
using WatchIt.Common.Model.Movies;
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Series;
using WatchIt.Database;
using WatchIt.Database.Model.Account;
@@ -18,6 +19,7 @@ using WatchIt.WebAPI.Services.Utility.Tokens.Exceptions;
using WatchIt.WebAPI.Services.Utility.User;
using Account = WatchIt.Database.Model.Account.Account;
using AccountProfilePicture = WatchIt.Common.Model.Accounts.AccountProfilePicture;
using Person = WatchIt.Database.Model.Person.Person;
namespace WatchIt.WebAPI.Services.Controllers.Accounts;
@@ -190,6 +192,24 @@ public class AccountsControllerService(
response = query.PrepareData(response);
return RequestResult.Ok(response);
}
public async Task<RequestResult> GetAccountRatedPersons(long id, PersonRatedQueryParameters query)
{
Account? account = await database.Accounts.FirstOrDefaultAsync(x => x.Id == id);
if (account is null)
{
return RequestResult.NotFound();
}
IEnumerable<RatingPersonActorRole> actorRolesRatings = account.RatingPersonActorRole;
IEnumerable<RatingPersonCreatorRole> creatorRolesRatings = account.RatingPersonCreatorRole;
IEnumerable<Person> persons = actorRolesRatings.Select(x => x.PersonActorRole.Person)
.Union(creatorRolesRatings.Select(x => x.PersonCreatorRole.Person));
IEnumerable<PersonRatedResponse> response = persons.Select(x => new PersonRatedResponse(x, actorRolesRatings.Where(y => y.PersonActorRole.Person.Id == x.Id), creatorRolesRatings.Where(y => y.PersonCreatorRole.Person.Id == x.Id)));
response = query.PrepareData(response);
return RequestResult.Ok(response);
}
#endregion

View File

@@ -1,6 +1,7 @@
using WatchIt.Common.Model.Accounts;
using WatchIt.Common.Model.Media;
using WatchIt.Common.Model.Movies;
using WatchIt.Common.Model.Persons;
using WatchIt.Common.Model.Series;
using WatchIt.WebAPI.Services.Controllers.Common;
@@ -17,4 +18,5 @@ public interface IAccountsControllerService
Task<RequestResult> PutAccountInfo(AccountRequest data);
Task<RequestResult> GetAccountRatedMovies(long id, MovieRatedQueryParameters query);
Task<RequestResult> GetAccountRatedSeries(long id, SeriesRatedQueryParameters query);
Task<RequestResult> GetAccountRatedPersons(long id, PersonRatedQueryParameters query);
}

View File

@@ -118,7 +118,9 @@ public class MediaControllerService(DatabaseContext database, IUserService userS
return RequestResult.NotFound();
}
RatingResponse ratingResponse = RatingResponse.Create(item.RatingMedia);
RatingResponse ratingResponse = RatingResponseBuilder.Initialize()
.Add(item.RatingMedia, x => x.Rating)
.Build();
return RequestResult.Ok(ratingResponse);
}

View File

@@ -335,7 +335,10 @@ public class PersonsControllerService : IPersonsControllerService
return RequestResult.NotFound();
}
RatingResponse ratingResponse = RatingResponse.Create(item.PersonActorRoles, item.PersonCreatorRoles);
RatingResponse ratingResponse = RatingResponseBuilder.Initialize()
.Add(item.PersonActorRoles.SelectMany(x => x.RatingPersonActorRole), x => x.Rating)
.Add(item.PersonCreatorRoles.SelectMany(x => x.RatingPersonCreatorRole), x => x.Rating)
.Build();
return RequestResult.Ok(ratingResponse);
}
@@ -347,10 +350,11 @@ public class PersonsControllerService : IPersonsControllerService
{
return RequestResult.NotFound();
}
IEnumerable<RatingPersonActorRole> actorRoleRatings = item.PersonActorRoles.SelectMany(x => x.RatingPersonActorRole).Where(x => x.AccountId == userId);
IEnumerable<RatingPersonCreatorRole> creatorRoleRatings = item.PersonCreatorRoles.SelectMany(x => x.RatingPersonCreatorRole).Where(x => x.AccountId == userId);
RatingResponse ratingResponse = RatingResponse.Create(actorRoleRatings, creatorRoleRatings);
RatingResponse ratingResponse = RatingResponseBuilder.Initialize()
.Add(item.PersonActorRoles.SelectMany(x => x.RatingPersonActorRole).Where(x => x.AccountId == userId), x => x.Rating)
.Add(item.PersonCreatorRoles.SelectMany(x => x.RatingPersonCreatorRole).Where(x => x.AccountId == userId), x => x.Rating)
.Build();
return RequestResult.Ok(ratingResponse);
}

View File

@@ -97,7 +97,9 @@ public class RolesControllerService : IRolesControllerService
return RequestResult.NotFound();
}
RatingResponse ratingResponse = RatingResponse.Create(item.RatingPersonActorRole);
RatingResponse ratingResponse = RatingResponseBuilder.Initialize()
.Add(item.RatingPersonActorRole, x => x.Rating)
.Build();
return RequestResult.Ok(ratingResponse);
}
@@ -281,7 +283,9 @@ public class RolesControllerService : IRolesControllerService
return RequestResult.NotFound();
}
RatingResponse ratingResponse = RatingResponse.Create(item.RatingPersonCreatorRole);
RatingResponse ratingResponse = RatingResponseBuilder.Initialize()
.Add(item.RatingPersonCreatorRole, x => x.Rating)
.Build();
return RequestResult.Ok(ratingResponse);
}