예제 #1
0
 public async Task <bool> UserExists(long chatId)
 {
     using (var db = new Vk2TgDbContext())
     {
         return(await db.Users.AnyAsync(u => u.ChatId == chatId));
     }
 }
예제 #2
0
 public async Task <DateTime> GetLastLogDate()
 {
     using (var db = new Vk2TgDbContext())
     {
         return(await db.Logs.AnyAsync() ? await db.Logs.OrderByDescending(l => l.DateTime).Select(l => l.DateTime).FirstOrDefaultAsync() : DateTime.Now);
     }
 }
예제 #3
0
 public async Task <List <Subscription> > GetSubscriptionsToCheck()
 {
     using (var db = new Vk2TgDbContext())
     {
         return(await db.Subscriptions.Where(s => s.Users.Any(u => !u.HasBlocked)).Include(s => s.Users).ToListAsync());
     }
 }
예제 #4
0
        public async Task <bool> AddSubscription(long id, string name, string prettyName, long lastpostId, long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Include(u => u.Subscriptions).Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                if (user.Subscriptions.Any(s => s.SubscriptionId == id))
                {
                    return(false);
                }

                var subscription = await db.Subscriptions.Where(s => s.SubscriptionId == id).FirstOrDefaultAsync();

                if (subscription == null)
                {
                    subscription = new Subscription {
                        SubscriptionId         = id,
                        SubscriptionName       = name,
                        SubscriptionPrettyName = prettyName,
                        LastPostId             = lastpostId
                    };
                    db.Subscriptions.Add(subscription);
                }

                user.Subscriptions.Add(subscription);

                await db.SaveChangesAsync();

                return(true);
            }
        }
예제 #5
0
 public async Task <List <User> > GetUsersToSendDonateMessage()
 {
     using (var db = new Vk2TgDbContext())
     {
         return(await db.Users.Include(u => u.Subscriptions).Where(u => !u.HasBlocked && !u.DonateMessageSent).ToListAsync());
     }
 }
예제 #6
0
        public async Task <List <string> > GetUserSubscriptions(long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Include(u => u.Subscriptions).Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                return(user?.Subscriptions.Select(s => s.SubscriptionName).ToList() ?? new List <string>());
            }
        }
예제 #7
0
 public async Task AddWait(string token, int seconds)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.TokensWaits.Add(new TokensWait
         {
             Token     = token,
             WaitUntil = DateTime.UtcNow.AddSeconds(seconds)
         });
         await db.SaveChangesAsync();
     }
 }
예제 #8
0
        public async Task Block(long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                if (user != null)
                {
                    user.HasBlocked = true;
                    await db.SaveChangesAsync();
                }
            }
        }
예제 #9
0
 public async Task AddErrorLog(string error)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.ErrorLogs.Add(new ErrorLog
         {
             DateTime = DateTime.UtcNow,
             Message  = error,
             IsError  = true
         });
         await db.SaveChangesAsync();
     }
 }
예제 #10
0
 public void AddErrorLogSync(Exception e)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.ErrorLogs.Add(new ErrorLog {
             DateTime   = DateTime.UtcNow,
             Message    = e.Message,
             StackTrace = e.StackTrace,
             IsError    = true
         });
         db.SaveChanges();
     }
 }
예제 #11
0
 public async Task AddErrorLog(Exception e)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.ErrorLogs.Add(new ErrorLog {
             DateTime   = DateTime.UtcNow,
             Message    = e.Message,
             StackTrace = e.StackTrace,
             IsError    = true
         });
         await db.SaveChangesAsync();
     }
 }
예제 #12
0
 public async Task AddLog(int subscriptionId, long postID, string link)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.Logs.Add(new Log {
             DateTime       = DateTime.UtcNow,
             SubscriptionId = subscriptionId,
             Link           = link,
             PostId         = postID
         });
         await db.SaveChangesAsync();
     }
 }
예제 #13
0
        public async Task DonateMessageSent(long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                if (user != null)
                {
                    user.DonateMessageSent = true;
                    await db.SaveChangesAsync();
                }
            }
        }
예제 #14
0
 public async Task AddTraceLog(string message)
 {
     using (var db = new Vk2TgDbContext())
     {
         db.ErrorLogs.Add(new ErrorLog
         {
             DateTime = DateTime.UtcNow,
             Message  = message,
             IsError  = false
         });
         await db.SaveChangesAsync();
     }
 }
예제 #15
0
        public async Task <List <string> > AllowedTokens(string[] tokens)
        {
            using (var db = new Vk2TgDbContext())
            {
                var delete = await db.TokensWaits.Where(w => w.WaitUntil < DateTime.UtcNow).ToListAsync();

                db.TokensWaits.RemoveRange(delete);
                await db.SaveChangesAsync();

                var tokensToWait = await db.TokensWaits.Select(t => t.Token).ToListAsync();

                return(tokens.Except(tokensToWait).ToList());
            }
        }
예제 #16
0
        public async Task SetLastPost(long subscriptionId, long postId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var subscription = await db.Subscriptions.FirstOrDefaultAsync(s => s.SubscriptionId == subscriptionId);

                if (subscription != null)
                {
                    if (subscription.LastPostId < postId)
                    {
                        subscription.LastPostId = postId;
                        await db.SaveChangesAsync();
                    }
                }
            }
        }
예제 #17
0
        public async Task UpdateUserInfo(long chatId, string username, string firstName, string lastName)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                if (user != null)
                {
                    user.Username   = username;
                    user.FirstName  = firstName;
                    user.LastName   = lastName;
                    user.HasBlocked = false;
                    await db.SaveChangesAsync();
                }
            }
        }
예제 #18
0
        public async Task RegisterUser(long chatId, string username)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.FirstOrDefaultAsync(u => u.ChatId == chatId);

                if (user == null)
                {
                    db.Users.Add(new User {
                        ChatId    = chatId,
                        Username  = username,
                        CreatedAt = DateTime.UtcNow
                    });
                }

                await db.SaveChangesAsync();
            }
        }
예제 #19
0
        public async Task RemoveUser(long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                if (user != null)
                {
                    db.Users.Remove(user);
                    await db.SaveChangesAsync();
                }
                var subscriptions = await db.Subscriptions.Where(s => !s.Users.Any()).ToListAsync();

                if (!subscriptions.Any())
                {
                    db.Subscriptions.RemoveRange(subscriptions);
                }
            }
        }
예제 #20
0
        public async Task <bool> RemoveSubscription(long id, long chatId)
        {
            using (var db = new Vk2TgDbContext())
            {
                var user = await db.Users.Include(u => u.Subscriptions).Where(u => u.ChatId == chatId).FirstOrDefaultAsync();

                var subscription = user.Subscriptions.FirstOrDefault(s => s.SubscriptionId == id);
                if (subscription == null)
                {
                    return(false);
                }

                subscription.Users.Remove(user);
                if (!subscription.Users.Any())
                {
                    db.Subscriptions.Remove(subscription);
                }
                await db.SaveChangesAsync();

                return(true);
            }
        }