32 lines
1.1 KiB
C#
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);
|
|
}
|
|
} |