using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; using PrivaPub.ClientModels; using PrivaPub.ClientModels.Group; using PrivaPub.Extensions; using PrivaPub.Resources; using PrivaPub.Services; namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/group"), Authorize(Policy = Policies.IsUser)] public class GroupController : ControllerBase { readonly IGroupUsersService _groupUsersService; readonly IStringLocalizer _localizer; public GroupController(IGroupUsersService groupUsersService, IStringLocalizer localizer) { _groupUsersService = groupUsersService; _localizer = localizer; } [HttpGet, Route("/clientapi/group/list")] public async Task List([FromQuery] string avatarId, CancellationToken token) => Answer(await _groupUsersService.GetGroups(User.GetUserId(), avatarId, token)); [HttpPost, Route("/clientapi/group/insert")] public async Task Insert(InsertGroupForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _groupUsersService.InsertGroup(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/group/update")] public async Task Update(UpdateGroupForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _groupUsersService.UpdateGroup(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/group/join")] public async Task Join(JoinGroupForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _groupUsersService.JoinGroup(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/group/leave")] public async Task Leave(GroupMembershipForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _groupUsersService.LeaveGroup(User.GetUserId(), form, token)); [HttpPost, Route("/clientapi/group/approve")] public async Task Approve(GroupMembershipForm form, CancellationToken token) => !ModelState.IsValid ? Invalid() : Answer(await _groupUsersService.ApproveMember(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); } }