using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using eprintServer.Services; using eprintServer.Responses; using eprintServer.Requests; using eprintServer.Enums; using eprintServer.Entities; namespace eprintServer.Controllers; [ApiController] [Route("api/v1/customers")] [Authorize(Roles = "ADMIN,SUB_ADMIN")] public class CustomersController : ControllerBase { private readonly UserService _userService; public CustomersController(UserService userService, SubAdminService subAdminService) { _userService = userService; } [HttpGet("get_all_customers")] public async Task>> GetSubAdmins( [FromQuery] int page = 0, [FromQuery] int size = 5, [FromQuery] string? search = null) { try { var pagedResult = await _userService.GetPagedUsersByCriteriaAsync( page: page, size: size, role: RoleEnum.ROLE_USER, search ); return Ok(pagedResult); } catch (Exception e) { return StatusCode(StatusCodes.Status406NotAcceptable, $"An error occurred while fetching Users: {e.Message}"); } } [HttpPatch("toggle-active/{userId}")] public async Task> ToggleActive(long userId) { try { var updatedUser = await _userService.ToggleUserActiveStatusAsync(userId); if (updatedUser == null) { return NotFound($"User with ID {userId} not found."); } return Ok(updatedUser); } catch (Exception e) { return StatusCode(StatusCodes.Status406NotAcceptable, $"An error occurred while toggling user status: {e.Message}"); } } [HttpPatch("customer-basic-info/{id}")] public async Task UpdateBasicInfo(long id, [FromBody] UpdateUserBasicInfoRequest request) { try { var (updatedUser, error) = await _userService.UpdateUserBasicInfoAsync(id, request); if (error != null) { if (error == "User not found") return NotFound(error); // Return 406 Status for existing data as requested if (error == "EMAIL_EXISTS") return StatusCode(StatusCodes.Status406NotAcceptable, "Email already exists"); if (error == "PHONE_EXISTS") return StatusCode(StatusCodes.Status406NotAcceptable, "Phone number already exists"); } return Ok(updatedUser); } catch (Exception e) { return StatusCode(StatusCodes.Status500InternalServerError, $"An error occurred: {e.Message}"); } } }