/
egopen
/
Lab1
Обзор
Документация
Войти
/
egopen
/
Lab1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Lab4/library/Controllers/AuthController.cs
97 строк
3 KB
Egopen
lab 4
01 ноя 2025, 18:03
01 ноя 2025, 18:03
78d017c
Код
Авторство
О чём код?
using library.DTO; using library.QueueMessages; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.OpenApi.Models; using Microsoft.OpenApi.Validations; using RabbitMQ.Client; using System.Text; using System.Text.Json; namespace library.Controllers { [ApiController] [Route("api/[controller]")] public class AuthController : ControllerBase { private readonly IChannel _channel; public AuthController(IConnection rabbitConnection) { _channel = rabbitConnection.CreateChannelAsync().GetAwaiter().GetResult(); } [HttpPost("register")] [ProducesResponseType(typeof(object), 200)] [ProducesResponseType(typeof(OpenApiError), 400)] [ProducesResponseType(typeof(Conflict), 409)] [ProducesResponseType(typeof(OpenApiError), 500)] public async Task<IActionResult> Register([FromBody] RegisterRequest request) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var message = new BaseMessage { Id = Guid.NewGuid(), Version = "v1", Action = "register", Data = new { request.Name, request.Email, request.Password, request.Role } }; var props = new BasicProperties(); props.ContentType = "application/json"; props.MessageId = message.Id.ToString(); var messageBytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(message)); await _channel.BasicPublishAsync("Auth", "register.request",true, props, messageBytes); return Accepted(new { message = "Registration request sent", requestId = message.Id }); } [HttpPost("login")] [ProducesResponseType(typeof(object), 200)] [ProducesResponseType(typeof(OpenApiError), 400)] [ProducesResponseType(typeof(NotFound), 404)] [ProducesResponseType(typeof(OpenApiError), 500)] public async Task<IActionResult> Login([FromBody] LoginRequest request) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var message = new BaseMessage { Id = Guid.NewGuid(), Version = "v1", Action = "login", Data = new { request.Email, request.Password, request.Role } }; var props = new BasicProperties(); props.ContentType = "application/json"; props.MessageId = message.Id.ToString(); var messageBytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(message)); await _channel.BasicPublishAsync("Auth", "login.request",true, props, messageBytes); return Accepted(new { message = "Login request sent", requestId = message.Id }); } } }