feat(guild): add Guild aggregate schema + migration
This commit is contained in:
17
SVSim.Database/Entities/Guild/Guild.cs
Normal file
17
SVSim.Database/Entities/Guild/Guild.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using SVSim.Database.Models;
|
||||
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public class Guild
|
||||
{
|
||||
public int GuildId { get; set; } // server-generated 9-digit
|
||||
public string Name { get; set; } = "";
|
||||
public string Description { get; set; } = "";
|
||||
public long LeaderViewerId { get; set; }
|
||||
public long EmblemId { get; set; }
|
||||
public GuildActivity Activity { get; set; }
|
||||
public GuildJoinCondition JoinCondition { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? BreakupAt { get; set; } // soft-delete on breakup
|
||||
public List<GuildMember> Members { get; set; } = new();
|
||||
}
|
||||
16
SVSim.Database/Entities/Guild/GuildChatMessage.cs
Normal file
16
SVSim.Database/Entities/Guild/GuildChatMessage.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public class GuildChatMessage
|
||||
{
|
||||
public long Id { get; set; } // global PK
|
||||
public int GuildId { get; set; }
|
||||
public int MessageId { get; set; } // per-guild monotonic, unique with GuildId
|
||||
public long AuthorViewerId { get; set; }
|
||||
public GuildChatMessageType MessageType { get; set; }
|
||||
public string Body { get; set; } = "";
|
||||
public string? DeckPayload { get; set; } // jsonb
|
||||
public string? ReplayPayload { get; set; } // jsonb
|
||||
public string? RoomPayload { get; set; } // jsonb
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public Guild Guild { get; set; } = null!;
|
||||
}
|
||||
36
SVSim.Database/Entities/Guild/GuildEnums.cs
Normal file
36
SVSim.Database/Entities/Guild/GuildEnums.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public enum GuildRole : int
|
||||
{
|
||||
Regular = 0,
|
||||
Leader = 1,
|
||||
SubLeader = 2,
|
||||
}
|
||||
|
||||
public enum GuildJoinCondition : int
|
||||
{
|
||||
Free = 1,
|
||||
Approval = 2,
|
||||
OnlyInvite = 3,
|
||||
}
|
||||
|
||||
// Matches GuildDetailInfo.ActivityType (1..16). All / Beginner / Enjoy / Stoic / FriendOnly /
|
||||
// per-class (Elf..Nemesis) / Rotation / Unlimited / TwoPick.
|
||||
public enum GuildActivity : int
|
||||
{
|
||||
All = 1, Beginner = 2, Enjoy = 3, Stoic = 4, FriendOnly = 5,
|
||||
Elf = 6, Royal = 7, Witch = 8, Dragon = 9, Necro = 10,
|
||||
Vampire = 11, Bishop = 12, Nemesis = 13,
|
||||
Rotation = 14, Unlimited = 15, TwoPick = 16,
|
||||
}
|
||||
|
||||
public enum GuildInviteStatus : int { Pending = 0, Canceled = 1, Rejected = 2, Consumed = 3 }
|
||||
public enum GuildJoinRequestStatus : int { Pending = 0, Canceled = 1, Rejected = 2, Accepted = 3 }
|
||||
|
||||
// Per docs/api-spec/.../guild_chat-messages.md. 12..18 are gathering-only — never emit on guild.
|
||||
public enum GuildChatMessageType : int
|
||||
{
|
||||
Normal = 0, Stamp = 1, Deck = 2, Join = 3, Leave = 4, Replay = 5,
|
||||
ChangeLeader = 6, ChangeSubLeader = 7, CreateGuild = 8, Remove = 9,
|
||||
RoomMatch = 10, Description = 11,
|
||||
}
|
||||
12
SVSim.Database/Entities/Guild/GuildInvite.cs
Normal file
12
SVSim.Database/Entities/Guild/GuildInvite.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public class GuildInvite
|
||||
{
|
||||
public int GuildId { get; set; }
|
||||
public long InviteeViewerId { get; set; }
|
||||
public long InviterViewerId { get; set; }
|
||||
public GuildInviteStatus Status { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? RespondedAt { get; set; }
|
||||
public Guild Guild { get; set; } = null!;
|
||||
}
|
||||
11
SVSim.Database/Entities/Guild/GuildJoinRequest.cs
Normal file
11
SVSim.Database/Entities/Guild/GuildJoinRequest.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public class GuildJoinRequest
|
||||
{
|
||||
public int GuildId { get; set; }
|
||||
public long ViewerId { get; set; }
|
||||
public GuildJoinRequestStatus Status { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? RespondedAt { get; set; }
|
||||
public Guild Guild { get; set; } = null!;
|
||||
}
|
||||
10
SVSim.Database/Entities/Guild/GuildMember.cs
Normal file
10
SVSim.Database/Entities/Guild/GuildMember.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace SVSim.Database.Entities.Guild;
|
||||
|
||||
public class GuildMember
|
||||
{
|
||||
public int GuildId { get; set; }
|
||||
public long ViewerId { get; set; }
|
||||
public GuildRole Role { get; set; }
|
||||
public DateTime JoinedAt { get; set; }
|
||||
public Guild Guild { get; set; } = null!;
|
||||
}
|
||||
Reference in New Issue
Block a user