using LiteDB; using Vanadium.Classes.DBs.DBClasses; using System; using System.Collections.Generic; using System.IO; using System.Linq; using static Vanadium.Classes.DBs.DBClasses.PhotonAccessTokenDBClasses; namespace Vanadium.Classes.DBs { public class PhotonAccessTokenDB { public static LiteDatabase PhotonDBFile = new LiteDatabase("Filename=" + Path.Join(Program.dataDir, "DBs", "PhotonAccessToken.db") + ";Connection=shared"); public static readonly ILiteCollection PermissionSets = PhotonDBFile.GetCollection("SubroomPermissions"); public static void Setup() { PermissionSets.EnsureIndex(x => x.RoomId); PermissionSets.EnsureIndex(x => x.SubRoomId); } public static long GetNextId() { if (PermissionSets.Count() == 0) return 1; return PermissionSets.Max(x => x.Id) + 1; } public static SubroomPermissionSet? GetPermissions(long roomId, long subRoomId) { return PermissionSets.FindOne(x => x.RoomId == roomId && x.SubRoomId == subRoomId); } public static SubroomPermissionSet SetPermissions(long roomId, long subRoomId, List incomingPermissions) { var existing = PermissionSets.FindOne(x => x.RoomId == roomId && x.SubRoomId == subRoomId); if (existing == null) { existing = new SubroomPermissionSet { Id = GetNextId(), RoomId = roomId, SubRoomId = subRoomId, Permissions = new List(), UpdatedAt = DateTime.UtcNow }; } foreach (var incoming in incomingPermissions) { var match = existing.Permissions.FirstOrDefault(p => p.Permission == incoming.Permission && p.Role == incoming.Role && p.Type == incoming.Type); if (match == null) { existing.Permissions.Add(new StoredPermissionEntry { Permission = incoming.Permission, Role = incoming.Role, Type = incoming.Type, Override = incoming.Override, Value = incoming.Value }); } else { match.Override = incoming.Override; match.Value = incoming.Value; } } existing.UpdatedAt = DateTime.UtcNow; if (existing.Id == 0) existing.Id = GetNextId(); PermissionSets.Upsert(existing); return existing; } public static void DeletePermissions(long roomId, long subRoomId) { var existing = PermissionSets.FindOne(x => x.RoomId == roomId && x.SubRoomId == subRoomId); if (existing != null) PermissionSets.Delete(existing.Id); } } }