using StickyBoard.Core.DTOs.SocialAndMessaging; using StickyBoard.Core.Models; namespace StickyBoard.Core.Services.SocialAndMessaging.Contracts; public interface IContactService { // ============================================================ // LIST CONTACTS (with joined user details) // ============================================================ Task> GetContactsAsync( Guid userId, ContactStatus? status, CancellationToken ct); // ============================================================ // SEND CONTACT INVITE (delegates to InviteService) // ============================================================ Task SendContactInviteAsync( Guid senderId, Guid targetUserId, CancellationToken ct); // ============================================================ // ACCEPT CONTACT (post-invite) // ============================================================ Task AcceptContactAsync( Guid userId, Guid otherUserId, CancellationToken ct); // ============================================================ // BLOCK / UNBLOCK // ============================================================ Task BlockContactAsync( Guid userId, Guid contactId, CancellationToken ct); Task UnblockContactAsync( Guid userId, Guid contactId, CancellationToken ct); // ============================================================ // DELETE CONTACT (reciprocal) // ============================================================ Task DeleteContactAsync( Guid userId, Guid contactId, CancellationToken ct); }