/// <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
                    });
                }
            }
        }
示例#2
0
        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();
            }
        }