Files
BeReadyBackend/BeReadyBackend/Endpoints/Messages/SendMessageEndpoint.cs
T

32 lines
1.1 KiB
C#

using BeReadyBackend.DTO.Messages;
using BeReadyBackend.Hubs;
using BeReadyBackend.Models;
using BeReadyBackend.Repositories;
using BeReadyBackend.Services;
using FastEndpoints;
using Microsoft.AspNetCore.SignalR;
namespace BeReadyBackend.Endpoints.Messages;
public class SendMessageEndpoint(UserService userService, AutoMapper.IMapper mapper, MessagesRepository messagesRepository, IHubContext<GroupHub> hubContext)
: Endpoint<CreateMessageDto>
{
public override void Configure()
{
Post("/Messages/Groups/{@GroupId}/", x => new { x.GroupId });
}
public override async Task HandleAsync(CreateMessageDto req, CancellationToken ct)
{
Message message = new();
mapper.Map(req, message);
message.UserId = userService.GetUserIdFromToken();
await messagesRepository.AddAsync(message, ct);
await messagesRepository.SaveChangesAsync(ct);
await hubContext.Clients.Group($"group-{req.GroupId}").SendAsync("ReceiveMessage", message, cancellationToken: ct);
await Send.OkAsync(ct);
}
}