using Marco.Pms.Model.Dtos.Directory; using Marco.Pms.Model.Utilities; using Marco.Pms.Services.Helpers; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Marco.Pms.Services.Controllers { [ApiController] [Route("api/[controller]")] [Authorize] public class DirectoryController : ControllerBase { private readonly DirectoryHelper _directoryHelper; private readonly ILoggingService _logger; public DirectoryController(DirectoryHelper directoryHelper, ILoggingService logger) { _directoryHelper = directoryHelper; _logger = logger; } [HttpGet] public async Task GetContactList() { var response = await _directoryHelper.GetListOfContacts(); if (response.StatusCode == 200) { return Ok(response); } else { return BadRequest(response); } } [HttpGet("contact-bucket/{bucketId}")] public async Task GetContactsListByBucketId(Guid bucketId) { var response = await _directoryHelper.GetContactsListByBucketId(bucketId); if (response.StatusCode == 200) { return Ok(response); } else if (response.StatusCode == 401) { return Unauthorized(response); } else { return BadRequest(response); } } [HttpPost] public async Task CreateContact([FromBody] CreateContactDto createContact) { if (!ModelState.IsValid) { var errors = ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage) .ToList(); _logger.LogError("User sent Invalid Date while marking attendance"); return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } var response = await _directoryHelper.CreateContact(createContact); if (response.StatusCode == 200) { return Ok(response); } else { return BadRequest(response); } } [HttpPut("{id}")] public async Task UpdateContact(Guid id, [FromBody] UpdateContactDto updateContact) { var response = await _directoryHelper.UpdateContact(id, updateContact); if (response.StatusCode == 200) { return Ok(response); } else if (response.StatusCode == 404) { return NotFound(response); } else { return BadRequest(response); } } [HttpGet("buckets")] public async Task GetBucketList() { var response = await _directoryHelper.GetBucketList(); return Ok(response); } [HttpPost("bucket")] public async Task CreateBucket(CreateBucketDto bucketDto) { if (!ModelState.IsValid) { var errors = ModelState.Values .SelectMany(v => v.Errors) .Select(e => e.ErrorMessage) .ToList(); _logger.LogError("User sent Invalid Date while marking attendance"); return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } var response = await _directoryHelper.CreateBucket(bucketDto); if (response.StatusCode == 200) { return Ok(response); } else if (response.StatusCode == 409) { return Conflict(response); } else { return BadRequest(response); } } } }