using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using mws.backend.dotnet.application.Common; using mws.backend.dotnet.application.MasterData; using mws.backend.dotnet.application.Permissions; namespace mws.backend.dotnet.api.Controllers; [ApiController] [Route("api/masterdata")] [Authorize] public class MasterDataController(ISender sender, IPermissionService permissions) : ControllerBase { [HttpGet("groups/{group}")] public async Task>> GetByGroup(string group, CancellationToken ct) { return Ok(await sender.Send(new GetMasterDataByGroupQuery(group), ct)); } [HttpGet] public async Task>> GetAll( [FromQuery] string? group, [FromQuery] string? q, [FromQuery] bool? isActive, [FromQuery] int page = 1, [FromQuery] int pageSize = 20, CancellationToken ct = default) { await permissions.EnsureAsync(User.GetUserId(), "masterdata", PermissionAction.View, ct); var filter = new MasterDataFilter(group, q, isActive); return Ok(await sender.Send(new GetMasterDataListQuery(filter, page, pageSize), ct)); } [HttpPost] public async Task> Create([FromBody] SaveMasterDataRequest request, CancellationToken ct) { await permissions.EnsureAsync(User.GetUserId(), "masterdata", PermissionAction.Create, ct); return Ok(await sender.Send(new CreateMasterDataCommand(request), ct)); } [HttpPut("{id:guid}")] public async Task> Update(Guid id, [FromBody] SaveMasterDataRequest request, CancellationToken ct) { await permissions.EnsureAsync(User.GetUserId(), "masterdata", PermissionAction.Edit, ct); return Ok(await sender.Send(new UpdateMasterDataCommand(id, request), ct)); } [HttpDelete("{id:guid}")] public async Task Delete(Guid id, CancellationToken ct) { await permissions.EnsureAsync(User.GetUserId(), "masterdata", PermissionAction.Delete, ct); await sender.Send(new DeleteMasterDataCommand(id), ct); return NoContent(); } }