Add surrogate PK (IDENTITY bigint) to GuildInvite for wire invite_id. Implement InviteAsync, CancelInviteAsync, RejectInviteAsync, ListOutgoingInvitesAsync, ListInvitedGuildsAsync in GuildService. Wire 5 endpoints: invite_user_list, invited_guild_list, invite, cancel_invite, reject_invite in GuildController. Migration: AddGuildInviteSurrogatePk — drops composite PK, adds Id IDENTITY column, adds unique index on (GuildId, InviteeViewerId). 6 integration tests in GuildInviteFlowTests all green. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
17 lines
1022 B
C#
17 lines
1022 B
C#
using SVSim.Database.Entities.Guild;
|
|
|
|
namespace SVSim.Database.Repositories.Guild;
|
|
|
|
public interface IGuildInviteRepository
|
|
{
|
|
Task<GuildInvite?> GetAsync(int guildId, long inviteeViewerId, CancellationToken ct = default);
|
|
Task<GuildInvite?> GetByIdAsync(long inviteId, CancellationToken ct = default);
|
|
Task<IReadOnlyList<GuildInvite>> ListPendingForInviteeAsync(long viewerId, CancellationToken ct = default);
|
|
Task<IReadOnlyList<GuildInvite>> ListPendingForGuildAsync(int guildId, CancellationToken ct = default);
|
|
Task<int> CountPendingForInviteeAsync(long viewerId, CancellationToken ct = default);
|
|
Task AddAsync(GuildInvite invite, CancellationToken ct = default);
|
|
Task UpdateStatusAsync(int guildId, long inviteeViewerId, GuildInviteStatus status, DateTime respondedAt, CancellationToken ct = default);
|
|
Task ConsumePendingForViewerAsync(long viewerId, DateTime respondedAt, CancellationToken ct = default);
|
|
Task DeleteAllForGuildAsync(int guildId, CancellationToken ct = default);
|
|
}
|