using API.Extension; using Application.Interfaces; using Application.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace API.Controllers; public class UserController(IUserService userService) : BaseApiController { [Authorize(Roles = "SuperAdmin, Admin")] [HttpGet] public async Task GetAllUsers( [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 10) { var users = await userService.GetAsync(pageNumber, pageSize); return users.ToHttpResponse(); } [Authorize] [HttpPut] public async Task UpdateUser([FromBody] UserUpdateRequest userUpdateRequest) { var result = await userService.UpdateAsync(userUpdateRequest); return result.ToHttpResponse(); } [Authorize] [HttpDelete("{id}")] public async Task DeleteUser(int id) { var currentUserId = int.Parse(User.FindFirst("UserId")!.Value); var result = await userService.DeleteAsync(id, currentUserId); return result.ToHttpResponse(); } [Authorize] [HttpGet("{id}")] public async Task GetUserById(int id) { var user = await userService.GetUserByIdAsync(id); return user.ToHttpResponse(); } [Authorize(Roles = "SuperAdmin")] [HttpPost("assign-role")] public async Task AssignRole([FromBody] AssingRoleRequest roleRequest) { var result = await userService.AssignRoleAsync(roleRequest); return result.ToHttpResponse(); } [Authorize(Roles = "SuperAdmin")] [HttpDelete("revoke-role")] public async Task RevokeRole([FromBody] AssingRoleRequest roleRequest) { var result = await userService.RevokeRoleAsync(roleRequest); return result.ToHttpResponse(); } }