the basis for group and private messages

This commit is contained in:
Artemy
2025-07-04 14:33:54 +07:00
parent fab3d6b67b
commit bdcfd32b11
20 changed files with 418 additions and 207 deletions
+11 -4
View File
@@ -1,9 +1,16 @@
using Govor.Application.Interfaces.Messages;
using Govor.Application.Interfaces.Messages.Parameters;
using Govor.Core.Models;
namespace Govor.API.Services;
namespace Govor.Application.Interfaces;
public interface IGroupService : IMessageSendingService, IMessageManagementService
public interface IGroupService
{
ChatGroup GetGroupByInvite(string code);
Task<ChatGroup> GetGroupByIdAsync(Guid groupId);
Task<ChatGroup> CreateGroupAsync(string name, Guid creatorId, IEnumerable<Guid> initialMemberIds);
Task<Result> AddUserToGroupByInvitationAsync(Guid userId, string invitationCode);
Task<Result> RemoveUserFromGroupAsync(Guid groupId, Guid userId, Guid removedByUserId);
Task<Result> DeleteGroupAsync(Guid groupId, Guid userId);
Task<List<User>> GetGroupMembersAsync(Guid groupId);
Task<List<ChatGroup>>GetUserGroupsAsync(Guid userId);
ChatGroup GetGroupByInviteCode(string code);
}
@@ -1,8 +0,0 @@
namespace Govor.Application.Interfaces.Messages;
public interface IChatService : IMessageSendingService, IMessageManagementService
{
}
@@ -1,9 +0,0 @@
using Govor.Application.Interfaces.Messages.Parameters;
namespace Govor.Application.Interfaces.Messages;
public interface IMessageManagementService
{
Task<Result> EditMessageAsync(Guid editorId, Guid messageId, string newContent);
Task<Result> DeleteMessageAsync(Guid editorId, Guid messageId);
}
@@ -1,6 +0,0 @@
namespace Govor.Application.Interfaces.Messages;
public interface IMessageReactionService
{
}
@@ -1,8 +0,0 @@
using Govor.Application.Interfaces.Messages.Parameters;
namespace Govor.Application.Interfaces.Messages;
public interface IMessageSendingService
{
Task<Result> SendMessageAsync(SendMessage newMessage);
}
@@ -0,0 +1,30 @@
using Govor.Application.Interfaces.Messages.Parameters;
using Govor.Core.Models;
namespace Govor.Application.Interfaces.Messages;
// Combining IChatService and IGroupService functionalities relevant to messages
public interface IMessageService
{
Task<SendMessageResult> SendMessageAsync(SendMessage messageParameters);
Task<EditMessageResult> EditMessageAsync(EditMessage messageParameters);
Task<DeleteMessageResult> DeleteMessageAsync(DeleteMessage messageParameters);
// Potentially other message-related methods like:
// Task<GetMessagesResult> GetMessagesAsync(Guid userId, Guid chatId, RecipientType chatType, int pageNumber, int pageSize);
// Task<Result> MarkMessageAsReadAsync(Guid userId, Guid messageId);
}
// Define specific result types for clarity, including original message for notifications if needed
public record SendMessageResult(bool IsSuccess, Exception? Exception, Guid MessageId)
: Result(IsSuccess, Exception, MessageId);
public record EditMessageResult(bool IsSuccess, Exception? Exception, Message? OriginalMessage)
: Result(IsSuccess, Exception, OriginalMessage?.Id ?? Guid.Empty)
{
// OriginalMessage can be useful for the Hub to know details like RecipientType, RecipientId for notifications
}
public record DeleteMessageResult(bool IsSuccess, Exception? Exception, Message? OriginalMessage)
: Result(IsSuccess, Exception, OriginalMessage?.Id ?? Guid.Empty);
@@ -0,0 +1,5 @@
namespace Govor.Application.Interfaces.Messages.Parameters;
public record DeleteMessage(
Guid DeleterId,
Guid MessageId);
@@ -0,0 +1,7 @@
namespace Govor.Application.Interfaces.Messages.Parameters;
public record EditMessage(
Guid EditorId,
Guid MessageId,
string NewContent,
DateTime EditedAt);
@@ -2,7 +2,4 @@ using Govor.Core.Models;
namespace Govor.Application.Interfaces.Messages.Parameters;
public record SendMedia(Guid Id,
string EncryptedKey,
MediaType Type,
string MimeType);
public record SendMedia(Guid MediaId, string EncryptedKey, MediaType Type, string MimeType);
@@ -1,8 +1,11 @@
using Govor.Core.Models;
namespace Govor.Application.Interfaces.Messages.Parameters;
public record SendMessage(
string EncryptContent,
Guid? ReplyToMessageId,
RecipientType RecipientType,
Guid RecipientId,
Guid FromUserId,
DateTime SendAt,