Files
SVSimServer/SVSim.Database/Services/Friend/IFriendService.cs
gamer147 300eee36e9 feat(friend): IFriendService + IPlayedTogetherWriter + DTO records
Task 3: service contract (interface + DTOs) and FriendService skeleton.
All methods throw NotImplementedException; Tasks 4-6 fill in the logic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 21:44:51 -04:00

31 lines
1.6 KiB
C#

namespace SVSim.Database.Services.Friend;
public interface IFriendService
{
Task<FriendInfoResult> GetFriendsAsync(long viewerId, CancellationToken ct);
Task<ReceiveApplyInfoResult> GetReceiveAppliesAsync(long viewerId, CancellationToken ct);
Task<SendApplyInfoResult> GetSendAppliesAsync(long viewerId, CancellationToken ct);
Task<PlayedTogetherResult> GetPlayedTogetherAsync(long viewerId, CancellationToken ct);
/// <summary>Returns null when not found, self-search, or any error.</summary>
Task<FriendEntry?> SearchAsync(long viewerId, int targetViewerId, CancellationToken ct);
/// <summary>No-op if target missing, self, already friends, already-pending apply, or at outgoing-apply cap.</summary>
Task SendApplyAsync(long viewerId, int targetViewerId, CancellationToken ct);
/// <summary>No-op if apply not addressed to caller, would push either side past friend cap. Cleans reverse-direction apply if present.</summary>
Task ApproveApplyAsync(long viewerId, int applyId, CancellationToken ct);
/// <summary>No-op if apply not addressed to caller.</summary>
Task RejectApplyAsync(long viewerId, int applyId, CancellationToken ct);
/// <summary>No-op if apply not sent by caller.</summary>
Task CancelApplyAsync(long viewerId, int applyId, CancellationToken ct);
Task RejectAllAppliesAsync(long viewerId, CancellationToken ct);
Task CancelAllAppliesAsync(long viewerId, CancellationToken ct);
/// <summary>Deletes both directions of the friendship (A→B and B→A).</summary>
Task RejectFriendAsync(long viewerId, int targetViewerId, CancellationToken ct);
}