using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; using PrivaPub.ClientModels; using PrivaPub.ClientModels.Social; using PrivaPub.Domain.Social; using PrivaPub.Extensions; using PrivaPub.Resources; namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/social"), Authorize(Policy = Policies.IsUser)] public class SocialController : ControllerBase { readonly IFollowService _follows; readonly IStringLocalizer _localizer; public SocialController(IFollowService follows, IStringLocalizer localizer) { _follows = follows; _localizer = localizer; } [HttpPost, Route("/clientapi/follow")] public async Task Follow(FollowForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _follows.Follow(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/unfollow")] public async Task Unfollow(FollowForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _follows.Unfollow(User.GetUserId(), form, token)); [HttpGet, Route("/clientapi/following")] public async Task Following([FromQuery] string avatarId, CancellationToken token) => Answer(await _follows.Followings(User.GetUserId(), avatarId, token)); IActionResult Invalid() => BadRequest(new WebResult().Invalidate(_localizer["Invalid model."])); IActionResult Answer(WebResult result) => result.IsValid ? Ok(result.Data) : StatusCode(result.StatusCode, result); } }