Files
WatchIt/WatchIt.Common/WatchIt.Common.Model/Rating/RatingResponse.cs

54 lines
2.1 KiB
C#
Raw Normal View History

2024-09-20 23:37:55 +02:00
using System.Diagnostics.CodeAnalysis;
using System.Text.Json.Serialization;
2024-10-02 16:09:11 +02:00
using WatchIt.Database.Model.Person;
2024-09-29 23:00:32 +02:00
using WatchIt.Database.Model.Rating;
2024-09-20 23:37:55 +02:00
2024-09-28 02:36:53 +02:00
namespace WatchIt.Common.Model.Rating;
2024-09-20 23:37:55 +02:00
2024-09-28 02:36:53 +02:00
public class RatingResponse
2024-09-20 23:37:55 +02:00
{
#region PROPERTIES
2024-09-29 23:00:32 +02:00
[JsonPropertyName("average")]
2024-10-02 01:08:52 +02:00
public required decimal Average { get; set; }
2024-09-20 23:37:55 +02:00
2024-09-29 23:00:32 +02:00
[JsonPropertyName("count")]
public required long Count { get; set; }
2024-09-20 23:37:55 +02:00
#endregion
#region CONSTRUCTORS
[JsonConstructor]
2024-09-28 02:36:53 +02:00
public RatingResponse() {}
2024-09-29 23:00:32 +02:00
[SetsRequiredMembers]
2024-10-02 16:09:11 +02:00
private RatingResponse(long ratingSum, long ratingCount)
2024-09-20 23:37:55 +02:00
{
2024-10-02 16:09:11 +02:00
Average = ratingCount > 0 ? (decimal)ratingSum / ratingCount : 0;
2024-09-29 23:00:32 +02:00
Count = ratingCount;
2024-09-20 23:37:55 +02:00
}
2024-10-02 16:09:11 +02:00
public static RatingResponse Create(long ratingSum, long ratingCount) => new RatingResponse(ratingSum, ratingCount);
2024-10-20 00:32:35 +02:00
public static RatingResponse Create(IEnumerable<RatingMedia> ratingMedia) => Create(ratingMedia, x => x.Rating);
public static RatingResponse Create(IEnumerable<RatingPersonActorRole> ratingPersonActorRoles) => Create(ratingPersonActorRoles, x => x.Rating);
public static RatingResponse Create(IEnumerable<RatingPersonCreatorRole> ratingPersonCreatorRoles) => Create(ratingPersonCreatorRoles, x => x.Rating);
public static RatingResponse Create<T>(IEnumerable<T> ratingList, Func<T, short> ratingSelector) => new RatingResponse(ratingList.Sum(x => ratingSelector(x)), ratingList.Count());
2024-10-02 16:09:11 +02:00
public static RatingResponse Create(IEnumerable<PersonActorRole> personActorRoles, IEnumerable<PersonCreatorRole> personCreatorRoles)
{
IEnumerable<RatingPersonActorRole> ratingsActorRoles = personActorRoles.SelectMany(x => x.RatingPersonActorRole);
IEnumerable<RatingPersonCreatorRole> ratingsCreatorRoles = personCreatorRoles.SelectMany(x => x.RatingPersonCreatorRole);
long ratingSum = ratingsActorRoles.Sum(x => x.Rating) + ratingsCreatorRoles.Sum(x => x.Rating);
long ratingCount = ratingsActorRoles.Count() + ratingsCreatorRoles.Count();
return new RatingResponse(ratingSum, ratingCount);
}
2024-09-20 23:37:55 +02:00
#endregion
}