survey-webapp/SurveyBackend/SurveyBackend.API/Controllers/AuthController.cs
2025-05-31 01:34:42 +05:00

85 lines
No EOL
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using SurveyBackend.Core.Contexts;
using SurveyBackend.Core.Services;
using SurveyBackend.DTOs.User;
using SurveyBackend.Mappers;
using IAuthorizationService = SurveyBackend.Core.Services.IAuthorizationService;
namespace SurveyBackend.Controllers;
/// <summary>
/// Контроллер для всего связанного с авторизацией пользователей
/// </summary>
[ApiController]
[Route("api/auth")]
public class AuthController : ControllerBase
{
private readonly IAuthorizationService _authorizationService;
private readonly IUserContext _userContext;
private readonly IUserService _userService;
/// <summary>
/// Нет ну вы прикалываетесь что ли мне ща каждый контроллер описывать?
/// </summary>
/// <param name="authorizationService"></param>
public AuthController(IAuthorizationService authorizationService, IUserContext userContext,
IUserService userService)
{
_authorizationService = authorizationService;
_userContext = userContext;
_userService = userService;
}
/// <summary>
/// Авторизация
/// </summary>
/// <remarks>Принимает на вход email и password. При отсутствии такого email вернет 404, при неправильном пароле 401, при успехе 200 и валидный токен</remarks>
/// <param name="loginData"></param>
/// <response code="200">Success: Возвращает токен</response>
/// <response code="401">Unauthorized: Неправильный пароль</response>
/// <returns></returns>
[AllowAnonymous]
[HttpPost("login")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> LogIn([FromBody] UserLoginDto loginData)
{
var token = await _authorizationService.LogInUser(loginData.Email, loginData.Password);
return Ok(new { token = token });
}
/// <summary>
/// Регистрация
/// </summary>
/// <remarks>Принимает на вход кучу всяких полей, потом разберемся</remarks>
/// <param name="registerData"></param>
/// <returns></returns>
[AllowAnonymous]
[HttpPost("register")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> Register([FromBody] UserRegistrationDto registerData)
{
var token = await _authorizationService.RegisterUser(
UserMapper.UserRegistrationToModel(registerData));
return Ok(new { token = token });
}
/// <summary>
/// Получить информацию о нынешнем юзере
/// </summary>
/// <remarks>Возвращает инфо о пользователе, токен которого был использован</remarks>
/// <returns></returns>
[Authorize]
[HttpGet("me")]
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
[ProducesResponseType(StatusCodes.Status200OK)]
public async Task<IActionResult> GetMe()
{
var userId = _userContext.UserId;
var user = await _userService.GetUserById(userId);
var result = UserMapper.ModelToOutput(user);
return Ok(result);
}
}