using qtc_api.Services.ContactService; using System.Security.Claims; namespace qtc_api.Controllers { [Route("api/contacts")] [ApiController] public class ContactController : ControllerBase { private IContactService _contactService; private IHubContext _chatGwContext; public ContactController(IContactService contactService, IHubContext chatGwContext) { _contactService = contactService; _chatGwContext = chatGwContext; } [HttpPost("add-contact")] [Authorize] public async Task>> AddContact(string userId) { var identity = HttpContext.User.Identity as ClaimsIdentity; if (identity != null) { IEnumerable claims = identity.Claims; var ownerId = claims.First().Value; var result = await _contactService.CreateContact(ownerId, userId); // refresh contacts list for both users await _chatGwContext.Clients.User(userId).SendAsync("RefreshContactsList"); await _chatGwContext.Clients.User(ownerId).SendAsync("RefreshContactsList"); return Ok(result); } return Unauthorized(); } [HttpPost("approve-contact")] [Authorize] public async Task>> ApproveContact(string userId) { var identity = HttpContext.User.Identity as ClaimsIdentity; if (identity != null) { IEnumerable claims = identity.Claims; var ownerId = claims.First().Value; var result = await _contactService.UpdateContactStatus(ownerId, userId, Contact.ContactStatus.Accepted, Contact.ContactStatus.Accepted); // refresh contacts list for both users await _chatGwContext.Clients.User(userId).SendAsync("RefreshContactsList"); await _chatGwContext.Clients.User(ownerId).SendAsync("RefreshContactsList"); return Ok(result); } return Unauthorized(); } [HttpDelete("remove-contact")] [Authorize] public async Task>> RemoveContact(string userId) { var identity = HttpContext.User.Identity as ClaimsIdentity; if (identity != null) { IEnumerable claims = identity.Claims; var ownerId = claims.First().Value; var response = await _contactService.DeleteContact(ownerId, userId); // refresh contacts list for both users await _chatGwContext.Clients.User(userId).SendAsync("RefreshContactsList"); await _chatGwContext.Clients.User(ownerId).SendAsync("RefreshContactsList"); return Ok(response); } return Unauthorized(); } [HttpGet("get-user-contacts")] [Authorize] public async Task>>> GetUserContacts(User user) { var result = await _contactService.GetUserContacts(user); return Ok(result); } } }