using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; using PrivaPub.ClientModels; using PrivaPub.ClientModels.Post; using PrivaPub.Extensions; using PrivaPub.Resources; using PrivaPub.Services; namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/post"), Authorize(Policy = Policies.IsUser)] public class PostController : ControllerBase { readonly IPostsService _postsService; readonly IStringLocalizer _localizer; public PostController(IPostsService postsService, IStringLocalizer localizer) { _postsService = postsService; _localizer = localizer; } [HttpGet, Route("/clientapi/post/list")] public async Task List([FromQuery] string avatarId, [FromQuery] string groupId, CancellationToken token) => Answer(await _postsService.GetPosts(User.GetUserId(), avatarId, groupId, token)); [HttpPost, Route("/clientapi/post/insert")] public async Task Insert(InsertPostForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _postsService.InsertPost(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/post/delete")] public async Task Delete(DeletePostForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _postsService.DeletePost(User.GetUserId(), form, token)); [HttpGet, Route("/clientapi/dm/list")] public async Task Dms([FromQuery] string avatarId, [FromQuery] string dmGroupId, CancellationToken token) => Answer(await _postsService.GetDms(User.GetUserId(), avatarId, dmGroupId, token)); [HttpPost, Route("/clientapi/dm/insert")] public async Task InsertDm(InsertDmForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _postsService.InsertDm(User.GetUserId(), form, token)); IActionResult Invalid() => BadRequest(new WebResult().Invalidate(_localizer["Invalid model."])); IActionResult Answer(WebResult result) => result.IsValid ? Ok(result.Data) : StatusCode(result.StatusCode, result); } }