using Govor.Contracts.DTOs; using Govor.Core.Models; using Govor.Core.Models.Users; using Govor.Core.Repositories.Friendships; using Govor.Data.Repositories.Exceptions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Govor.API.Controllers.AdminStuff; [ApiController] [Route("api/admin/[controller]")] [Authorize(Roles = "Admin")] public class FriendshipsController : Controller { private readonly ILogger _logger; private readonly IFriendshipsRepository _friendshipsRepository; public FriendshipsController(ILogger logger, IFriendshipsRepository friendshipsRepository) { _logger = logger; _friendshipsRepository = friendshipsRepository; } [HttpGet] public async Task Get() { try { _logger.LogInformation("Get all friendships by administrator"); var result = await _friendshipsRepository.GetAllAsync(); return Ok(result); } catch (NotFoundException ex) { _logger.LogWarning(ex.Message); return NotFound(ex.Message); } catch (Exception e) { _logger.LogError(e, e.Message); return StatusCode(500, new { error = "Internal server error." }); } } [HttpGet("{userId}")] public async Task GetByUserId(Guid userId) { if(userId == Guid.Empty) return BadRequest("User id can't be empty."); try { _logger.LogInformation($"Get user's {userId} all friendships by administrator"); var result = await _friendshipsRepository.FindByUserIdAsync(userId); return Ok(result); } catch (NotFoundByKeyException ex) { _logger.LogWarning(ex.Message); return NotFound(ex.Message); } catch (Exception e) { _logger.LogError(e, e.Message); return StatusCode(500, new { error = "Internal server error." }); } } [HttpPost] public async Task RemoveFriendship(Guid Id) { if(Id == Guid.Empty) return BadRequest("FS id can't be empty."); try { var result = await _friendshipsRepository.GetByIdAsync(Id); await _friendshipsRepository.RemoveAsync(result); return Ok(); } catch (NotFoundByKeyException ex) { _logger.LogWarning(ex.Message); return NotFound(ex.Message); } catch (Exception ex) { _logger.LogError(ex, ex.Message); return StatusCode(500, new { error = "Internal server error." }); } } }