/// <summary> /// Добавить или обновить данные о сервере, на котором играет участник /// </summary> /// <param name="uid">Uid участника</param> /// <param name=""></param> public void AddOsuServerInfo(ulong uid, string server, int id) { using (IDocumentSession session = store.OpenSession()) { WAVMember member = session.Query <WAVMember>() .Include(x => x.OsuServers) .FirstOrDefault(x => x.Uid == uid); if (member is null) { throw new NullReferenceException("No such object in DB"); } WAVMemberOsuProfileInfo serverInfo = member.OsuServers.FirstOrDefault(x => x.Server == server); if (serverInfo is not null) { serverInfo.Id = id; } else { member.OsuServers.Add(new WAVMemberOsuProfileInfo() { Server = server, Id = id, BestLast = DateTime.Now, RecentLast = DateTime.Now }); } } }
static void Main(string[] args) { var store = DocumentStoreProvider.Store; WAVMember membesr = new WAVMember() { Uid = 708860200341471264, ActivityPoints = 4, LastActivity = DateTime.Now, OsuServers = new List <WAVMemberOsuProfileInfo>() { new WAVMemberOsuProfileInfo() { BestLast = DateTime.Now, Id = 4, RecentLast = DateTime.Now, Server = "bancho", TrackBest = true, TrackRecent = true } } }; using (IDocumentSession session = store.OpenSession()) { WAVMember member = session.Query <WAVMember>() .FirstOrDefault(x => x.Uid == 708860200341471264); Console.ReadKey(); } Console.WriteLine("Done"); }
/// <summary> /// Указать, что участник принял участие в конкурсе WAV /// </summary> /// <param name="uid">Discord id участника</param> public void SetCompitInfo(ulong uid) { using (IDocumentSession session = store.OpenSession()) { WAVMember member = session.Query <WAVMember>() .Include(x => x.OsuServers) .FirstOrDefault(x => x.Uid == uid); member.CompitionInfo.ProvidedScore = true; } }
/// <summary> /// Получить информацию об участии данного пользователя в конкурсах WAV /// </summary> /// <param name="uid">Discord id</param> /// <returns></returns> public WAVMemberCompitInfo GetCompitInfo(ulong uid) { using (IDocumentSession session = store.OpenSession(new SessionOptions() { NoTracking = true })) { WAVMember member = session.Query <WAVMember>() .Include(x => x.OsuServers) .FirstOrDefault(x => x.Uid == uid); return(member.CompitionInfo ?? throw new NullReferenceException($"Couldn't get CompitionInfo from user {uid}")); } }
/// <summary> /// Получить информацию об участнике WAV /// </summary> /// <param name="uid">Discord uid</param> /// <returns></returns> public WAVMember GetMember(ulong uid) { using (IDocumentSession session = store.OpenSession(new SessionOptions() { NoTracking = true })) { WAVMember member = session.Query <WAVMember>() .Include(x => x.OsuServers) .FirstOrDefault(x => x.Uid == uid); return(member); } }
/// <summary> /// Получить информацию об osu! профиле участника WAV /// </summary> /// <param name="uid">Discord id участника WAV</param> /// <param name="server">Название сервера</param> /// <returns></returns> public WAVMemberOsuProfileInfo GetOsuProfileInfo(ulong uid, string server) { using (IDocumentSession session = store.OpenSession(new SessionOptions() { NoTracking = true })) { WAVMember member = session.Query <WAVMember>() .Include(x => x.OsuServers) .FirstOrDefault(x => x.Uid == uid); return(member.OsuServers.FirstOrDefault(x => x.Server == server)); } }
/// <summary> /// Добавить участника в БД /// </summary> /// <param name="uid">Discord id участника, добавляемого в БД</param> public void CreateMember(ulong uid) { WAVMember member = new WAVMember() { Uid = uid, CompitionInfo = new WAVMemberCompitInfo(), LastActivity = DateTime.Now, OsuServers = new List <WAVMemberOsuProfileInfo>() }; using (IDocumentSession session = store.OpenSession()) { session.Store(member); session.SaveChanges(); } }