using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; namespace DeluxeNET.Data { public class Room { [Key] [JsonPropertyName("RoomId")] public long RoomId { get; set; } [JsonPropertyName("Accessibility")] public int Accessibility { get; set; } [JsonPropertyName("CloningAllowed")] public bool CloningAllowed { get; set; } [JsonPropertyName("CreatedAt")] public DateTime CreatedAt { get; set; } [JsonPropertyName("CreatorAccountId")] public int CreatorAccountId { get; set; } [JsonPropertyName("CustomWarning")] public string CustomWarning { get; set; } [JsonPropertyName("DataBlob")] [NotMapped] public object DataBlob { get; set; } [JsonPropertyName("Description")] public string Description { get; set; } [JsonPropertyName("DisableMicAutoMute")] public bool DisableMicAutoMute { get; set; } [JsonPropertyName("DisableRoomComments")] public bool DisableRoomComments { get; set; } [JsonPropertyName("EncryptVoiceChat")] public bool EncryptVoiceChat { get; set; } [JsonPropertyName("ImageName")] public string ImageName { get; set; } [JsonPropertyName("IsDeveloperOwned")] public bool IsDeveloperOwned { get; set; } [JsonPropertyName("IsDorm")] public bool IsDorm { get; set; } [JsonPropertyName("IsRRO")] public bool IsRRO { get; set; } [JsonPropertyName("LoadScreenLocked")] public bool LoadScreenLocked { get; set; } [JsonPropertyName("LoadScreens")] [NotMapped] public List LoadScreens { get; set; } [JsonPropertyName("MaxPlayerCalculationMode")] public int MaxPlayerCalculationMode { get; set; } [JsonPropertyName("MaxPlayers")] public int MaxPlayers { get; set; } [JsonPropertyName("MinLevel")] public int MinLevel { get; set; } [JsonPropertyName("Name")] public string Name { get; set; } [JsonPropertyName("PromoExternalContent")] [NotMapped] public List PromoExternalContent { get; set; } [JsonPropertyName("PromoImages")] [NotMapped] public List PromoImages { get; set; } [JsonPropertyName("Roles")] public List Roles { get; set; } = new(); [JsonPropertyName("State")] public int State { get; set; } [JsonPropertyName("Stats")] public RoomStats Stats { get; set; } [JsonPropertyName("SupportsJuniors")] public bool SupportsJuniors { get; set; } [JsonPropertyName("SupportsLevelVoting")] public bool SupportsLevelVoting { get; set; } [JsonPropertyName("SupportsMobile")] public bool SupportsMobile { get; set; } [JsonPropertyName("SupportsQuest2")] public bool SupportsQuest2 { get; set; } [JsonPropertyName("SupportsScreens")] public bool SupportsScreens { get; set; } [JsonPropertyName("SupportsTeleportVR")] public bool SupportsTeleportVR { get; set; } [JsonPropertyName("SupportsVRLow")] public bool SupportsVRLow { get; set; } [JsonPropertyName("SupportsWalkVR")] public bool SupportsWalkVR { get; set; } [JsonPropertyName("Tags")] public List Tags { get; set; } [JsonPropertyName("Version")] public int Version { get; set; } [JsonPropertyName("WarningMask")] public int WarningMask { get; set; } [JsonPropertyName("SubRooms")] public List SubRooms { get; set; } = new(); } public class RoomRole { [Key] public long Id { get; set; } [ForeignKey("Room")] [JsonPropertyName("RoomId")] public long RoomId { get; set; } [JsonIgnore] public Room Room { get; set; } [JsonPropertyName("AccountId")] public int AccountId { get; set; } [JsonPropertyName("InvitedRole")] public int InvitedRole { get; set; } [JsonPropertyName("Role")] public int Role { get; set; } } public class RoomStats { [Key] public long Id { get; set; } [ForeignKey("Room")] [JsonPropertyName("RoomId")] public long RoomId { get; set; } [JsonIgnore] public Room Room { get; set; } [JsonPropertyName("CheerCount")] public int CheerCount { get; set; } [JsonPropertyName("FavoriteCount")] public int FavoriteCount { get; set; } [JsonPropertyName("VisitCount")] public int VisitCount { get; set; } [JsonPropertyName("VisitorCount")] public int VisitorCount { get; set; } } public class SubRoom { [Key] [JsonPropertyName("SubRoomId")] public int SubRoomId { get; set; } [ForeignKey("Room")] [JsonPropertyName("RoomId")] public long RoomId { get; set; } [JsonIgnore] public Room Room { get; set; } [JsonPropertyName("Accessibility")] public int Accessibility { get; set; } [JsonPropertyName("CurrentSave")] public SubRoomSave CurrentSave { get; set; } [JsonIgnore] public List SubRoomSaves { get; set; } = new(); [JsonPropertyName("IsSandbox")] public bool IsSandbox { get; set; } [JsonPropertyName("MaxPlayers")] public int MaxPlayers { get; set; } [JsonPropertyName("Name")] public string Name { get; set; } [JsonPropertyName("UnitySceneId")] public string UnitySceneId { get; set; } } public class SubRoomSave { [Key] public long Id { get; set; } [ForeignKey("Room")] [JsonPropertyName("RoomId")] public long RoomId { get; set; } [JsonIgnore] public Room Room { get; set; } [ForeignKey("SubRoom")] [JsonPropertyName("SubRoomId")] public int SubRoomId { get; set; } [JsonIgnore] public SubRoom SubRoom { get; set; } [JsonPropertyName("SubRoomDataSaveId")] public int SubRoomDataSaveId { get; set; } [JsonPropertyName("DataBlob")] public string DataBlob { get; set; } [JsonPropertyName("SavedByAccountId")] public int SavedByAccountId { get; set; } [JsonPropertyName("SavedOnPlatform")] [NotMapped] public object SavedOnPlatform { get; set; } [JsonPropertyName("SavedOnDeviceClass")] [NotMapped] public object SavedOnDeviceClass { get; set; } [JsonPropertyName("Description")] public string Description { get; set; } [JsonPropertyName("CreatedAt")] public DateTime CreatedAt { get; set; } [JsonPropertyName("UnityAssetId")] public string UnityAssetId { get; set; } } }