diff --git a/src/Web/Features/Contents/Handlers/ChangeSocials.cs b/src/Web/Features/Contents/Handlers/ChangeSocials.cs new file mode 100644 index 0000000..cbb7bf0 --- /dev/null +++ b/src/Web/Features/Contents/Handlers/ChangeSocials.cs @@ -0,0 +1,50 @@ +using FastEndpoints; +using Hutopy.Web.Features.Contents.Data; +using Microsoft.EntityFrameworkCore; + +namespace Hutopy.Web.Features.Contents.Handlers; + +public record ChangeSocialsRequest( + Guid CreatorId, + string? FacebookUrl, + string? InstagramUrl, + string? XUrl, + string? LinkedInUrl, + string? TikTokUrl, + string? YoutubeUrl, + string? RedditUrl, + string? WebsiteUrl); + +public class ChangeSocialsHandler( + ContentDbContext context) + : Endpoint +{ + public override void Configure() + { + Post("/api/creators/{CreatorId}/socials"); + Options(o => o.WithTags("Contents")); + } + + public override async Task HandleAsync(ChangeSocialsRequest request, CancellationToken ct) + { + var creator = await context + .Creators + .Include(c => c.ProfileColors) + .SingleAsync( + c => c.Id == request.CreatorId, + cancellationToken: ct); + + creator.SocialNetworks.FacebookUrl = request.FacebookUrl; + creator.SocialNetworks.InstagramUrl = request.InstagramUrl; + creator.SocialNetworks.XUrl = request.XUrl; + creator.SocialNetworks.LinkedInUrl = request.LinkedInUrl; + creator.SocialNetworks.TikTokUrl = request.TikTokUrl; + creator.SocialNetworks.YoutubeUrl = request.YoutubeUrl; + creator.SocialNetworks.RedditUrl = request.RedditUrl; + creator.SocialNetworks.WebsiteUrl = request.WebsiteUrl; + + await context.SaveChangesAsync(ct); + + await SendOkAsync(ct); + } +}