diff --git a/Controllers/ContactsController.cs b/Controllers/ContactsController.cs index 7a6c116..64f635b 100644 --- a/Controllers/ContactsController.cs +++ b/Controllers/ContactsController.cs @@ -28,6 +28,49 @@ public class ContactsController : ControllerBase #endregion #region Methods + [HttpGet, DisableRequestSizeLimit] + public IActionResult RetrieveContacts([FromQuery(Name = "user_id")] string? userID) + { + var response = new CreateContactResponse(); + var connString = this._config.GetConnectionString("MongoDBURI"); + var userRepo = new UsersRepository(connString!); + var contactsRepo = new ContactsRepository(connString!); + + try + { + var contacts = contactsRepo.RetrieveAll(); + var users = userRepo.RetrieveAllUsers(); + + if (users.Count() == 0) + { + return BadRequest(response); + } + + var user = users.FirstOrDefault(us => us.Id!.Equals(userID)); + + if (user == null) + { + return BadRequest(response); + } + + contacts = contacts.Where(c => c.UserID!.Equals(userID)).ToList(); + + if (contacts == null || contacts.Count() == 0) + { + return BadRequest(response); + } + + response.Data = contacts; + } + catch (Exception ex) + { + this._logger.LogError($"An error occurred: {ex.Message}"); + } + + return Ok(response); + } + + [HttpPost("new"), DisableRequestSizeLimit] public IActionResult CreateContact([FromBody] Contact contact) { @@ -139,6 +182,56 @@ public class ContactsController : ControllerBase return Ok(response); } + + + [HttpDelete("delete"), DisableRequestSizeLimit] + public IActionResult DeleteContact([FromBody] Contact contact) + { + var response = new CreateContactResponse(); + var connString = this._config.GetConnectionString("MongoDBURI"); + var userRepo = new UsersRepository(connString!); + var contactsRepo = new ContactsRepository(connString!); + + try + { + var contacts = contactsRepo.RetrieveAll(); + var users = userRepo.RetrieveAllUsers(); + + if (users.Count() == 0 || contacts.Count() == 0) + { + return BadRequest(response); + } + + var c = contacts.FirstOrDefault(c => c.Id!.Equals(contact.Id)); + + if (c == null || + string.IsNullOrEmpty(contact.UserID)) + { + // The Contact does not exists or no user id provided + return BadRequest(response); + } + + if (!userRepo.Exists(contact.UserID!).Item1) + { + return BadRequest(response); + } + + if (!c.UserID!.Equals(contact.UserID)) + { + // The provided user id does is not the same that created the contact + return BadRequest(response); + } + + contactsRepo.Delete(c); + response.Data.Add(c); + } + catch (Exception ex) + { + this._logger.LogError($"An error occurred: {ex.Message}"); + } + + return Ok(response); + } #endregion