technical edits

This commit is contained in:
Artemy
2025-12-12 17:23:01 +07:00
parent bf2aca40d3
commit 7e6f914878
23 changed files with 461 additions and 114 deletions
@@ -30,7 +30,7 @@ public class AuthController : Controller
_logger = logger;
}
[RequireHttps]
//[RequireHttps]
[HttpPost("register")]// api/auth/register
public async Task<IActionResult> Register([FromBody] RegistrationRequest registrationRequest)
{
@@ -74,7 +74,7 @@ public class AuthController : Controller
}
}
[RequireHttps]
//[RequireHttps]
[HttpPost("login")]// api/auth/login
public async Task<IActionResult> Login([FromBody] LoginRequest loginRequest)
{
@@ -14,13 +14,15 @@ public class RefreshController : Controller
private readonly ILogger<RefreshController> _logger;
private readonly IUserSessionRefresher _userSession;
public RefreshController(ILogger<RefreshController> logger, IUserSessionRefresher userSession)
public RefreshController(
ILogger<RefreshController> logger,
IUserSessionRefresher userSession)
{
_logger = logger;
_userSession = userSession;
}
[RequireHttps]
//[RequireHttps]
[HttpPost("refresh")] // api/auth/token/refresh
public async Task<IActionResult> Refresh([FromBody] RefreshTokenRequest refreshRequest)
{
@@ -8,9 +8,10 @@ using Microsoft.AspNetCore.Mvc;
namespace Govor.API.Controllers.Friends;
[ApiController]
[Authorize]
[Route("api/friends")]
[ApiController]
public class FriendsRequestQueryController : Controller
{
private readonly ILogger<FriendsRequestQueryController> _logger;
@@ -18,7 +19,8 @@ public class FriendsRequestQueryController : Controller
private readonly ICurrentUserService _currentUserService;
private readonly IMapper _mapper;
public FriendsRequestQueryController(ILogger<FriendsRequestQueryController> logger,
public FriendsRequestQueryController(
ILogger<FriendsRequestQueryController> logger,
IFriendRequestQueryService friendsService,
ICurrentUserService currentUserService,
IMapper mapper)
@@ -16,7 +16,8 @@ public class FriendshipController : Controller
private readonly ICurrentUserService _currentUserService;
private readonly IMapper _mapper;
public FriendshipController(ILogger<FriendshipController> logger,
public FriendshipController(
ILogger<FriendshipController> logger,
IFriendshipService friendsService,
ICurrentUserService currentUserService,
IMapper mapper)
+93 -7
View File
@@ -1,11 +1,15 @@
using AutoMapper;
using Govor.API.Hubs;
using Govor.Application.Interfaces;
using Govor.Application.Interfaces.Infrastructure.Extensions;
using Govor.Application.Interfaces.Medias;
using Govor.Contracts.DTOs;
using Govor.Contracts.Requests;
using Govor.Core.Models;
using Govor.Data.Repositories.Exceptions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
namespace Govor.API.Controllers;
@@ -18,6 +22,7 @@ public class ProfileController : ControllerBase
private readonly IMediaService _mediaService;
private readonly IProfileService _profileService;
private readonly ICurrentUserService _currentUserService;
private readonly IHubContext<ProfileHub> _profileHubContext;
private readonly IMapper _mapper;
public ProfileController(
@@ -25,26 +30,80 @@ public class ProfileController : ControllerBase
IMediaService mediaService,
IProfileService profileService,
ICurrentUserService currentUserService,
IHubContext<ProfileHub> profileHubContext,
IMapper mapper)
{
_logger = logger;
_mediaService = mediaService;
_profileService = profileService;
_profileHubContext = profileHubContext;
_currentUserService = currentUserService;
_mapper = mapper;
}
[RequestSizeLimit(40_000)]
[HttpPost("avatar")] // api/profile/avatar
public async Task<IActionResult> UploadAvatar([FromForm] AvatarUploadRequest request)
{
var userId = _currentUserService.GetCurrentUserId();
if (request.FromFile == null || request.FromFile.Length == 0)
{
return BadRequest("File is empty.");
}
try
{
byte[] fileBytes = await ReadFileAsync(request.FromFile);
[HttpGet("dowload")]
public async Task<IActionResult> DowloadProfile()
var media = new Media(
_currentUserService.GetCurrentUserId(),
DateTime.UtcNow,
Path.GetFileName(request.FromFile.FileName),
fileBytes,
request.Type,
request.MimeType,
String.Empty,
MediaOwnerType.Avatar,
userId);
var mediaInfo = await _mediaService.UploadMediaAsync(media);
await _profileService.SetNewIcon(userId, mediaInfo.MediaId);
var iconId = mediaInfo.MediaId;
var payload = new { userId, iconId };
await _profileHubContext.Clients.All.SendAsync(
"AvatarUpdated",
payload
);
return Ok(mediaInfo);
}
catch (System.Exception ex)
{
return StatusCode(500, new { Message = "Avatar processing error.", Details = ex.Message });
}
}
private async Task<byte[]> ReadFileAsync(IFormFile file)
{
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
return ms.ToArray();
}
[HttpGet("dowload/me")]
public async Task<IActionResult> DownloadProfile()
{
try
{
var userId = _currentUserService.GetCurrentUserId();
var user = await _profileService.GetUserProfileAsync(userId);
if (user is null)
return NotFound("Profile not found");
var dto = _mapper.Map<UserProfileDto>(user);
return Ok(dto);
}
@@ -56,7 +115,34 @@ public class ProfileController : ControllerBase
catch (NotFoundException ex)
{
_logger.LogWarning(ex, ex.Message);
return BadRequest(ex.Message);
return NotFound("Profile not found");
}
catch (Exception ex)
{
_logger.LogError(ex, ex.Message);
return StatusCode(500, "Unexpected Error! Please try again later.");
}
}
[HttpGet("download/{id}")]
public async Task<IActionResult> DowloadProfileByUserId(Guid id)
{
try
{
var user = await _profileService.GetUserProfileAsync(id);
var dto = _mapper.Map<UserProfileDto>(user);
return Ok(dto);
}
catch (UnauthorizedAccessException ex)
{
_logger.LogWarning(ex.Message);
return Forbid(ex.Message);
}
catch (NotFoundException ex)
{
_logger.LogWarning(ex, ex.Message);
return NotFound("Profile not found");
}
catch (Exception ex)
{