using SVSim.Database.Entities.Guild; namespace SVSim.Database.Repositories.Guild; public interface IGuildRepository { Task GetByIdAsync(int guildId, CancellationToken ct = default); /// Returns guild only if not soft-deleted (BreakupAt is null). Task GetActiveByIdAsync(int guildId, CancellationToken ct = default); /// Returns guild + populated Members list (split-query). Task GetWithMembersAsync(int guildId, CancellationToken ct = default); Task NameExistsAsync(string name, CancellationToken ct = default); Task AddAsync(Entities.Guild.Guild g, CancellationToken ct = default); /// Soft-delete: sets BreakupAt to UtcNow. Caller is responsible for cascading /// hard-deletes on Members / Invites / JoinRequests / ChatMessages. Task MarkBrokenUpAsync(int guildId, DateTime brokenUpAt, CancellationToken ct = default); /// Filtered + bucketed search. Empty name = match-all; activity/joinCondition/bucket = 0 = any. Task> SearchAsync( string name, int activity, int joinCondition, int memberBucket, int maxMemberCap, int resultCap, CancellationToken ct = default); /// Updates activity and/or join_condition. Only non-null fields are written. Task UpdateActivityAndJoinConditionAsync(int guildId, int? activity, int? joinCondition, CancellationToken ct = default); /// Overwrites the description field. Task UpdateDescriptionAsync(int guildId, string description, CancellationToken ct = default); /// Overwrites the emblem_id field. Task UpdateEmblemAsync(int guildId, long emblemId, CancellationToken ct = default); }