Пример #1
0
        public async Task <int> CreateUserAsync(string lineUserId)
        {
            if (string.IsNullOrEmpty(lineUserId))
            {
                return(-1);
            }

            using (var db = new ZombieRunnerDbContex())
            {
                if (!db.User.Any(o => o.LineUserId == lineUserId))
                {
                    var newUser = new User
                    {
                        LineUserId = lineUserId,
                        Name       = string.Empty,
                        IsEnabled  = true,
                        CreatedOn  = DateTime.UtcNow,
                        ModifiedOn = DateTime.UtcNow
                    };
                    db.Entry(newUser).State = EntityState.Added;
                    await db.SaveChangesAsync();

                    return(newUser.Id);
                }
                return(0);
            }
        }
Пример #2
0
        public async Task <IEnumerable <User> > GetAvailableUsers()
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var users = await db.User.Where(o => o.IsEnabled == true && o.IsDeleted != true).ToArrayAsync();

                return(users);
            }
        }
Пример #3
0
        public async Task <Event[]> GetAvailableEvents()
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var evs = await db.Event.Where(o => o.IsEnabled == true && o.IsDeleted != true).ToArrayAsync();

                return(evs);
            }
        }
Пример #4
0
        public async Task <Signup> FindLatestForSignupAsync()
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var now  = DateTime.UtcNow;
                var game = await db.Signup.FirstOrDefaultAsync(o => o.StartTime <= now && o.EndTime >= now && o.IsEnabled == true && o.IsDeleted != true && o.IsOnGoing != true && o.IsStoryPushed != true);

                return(game);
            }
        }
Пример #5
0
        public async Task <User> GetUserByLineUserIdAsync(string lineUserId)
        {
            if (string.IsNullOrEmpty(lineUserId))
            {
                return(null);
            }

            using (var db = new ZombieRunnerDbContex())
            {
                var user = await db.User.FirstOrDefaultAsync(o => o.LineUserId == lineUserId);

                return(user);
            }
        }
Пример #6
0
        public async Task ResetToEndAsync(Signup game)
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var gameToEnd = await db.Signup.FirstOrDefaultAsync(o => o.Id == game.Id);

                if (gameToEnd != null)
                {
                    gameToEnd.IsStoryPushed = true;
                    //gameToEnd.StoryEndedTime = DateTime.UtcNow;
                    db.Entry(gameToEnd).State = EntityState.Modified;
                }
                await db.SaveChangesAsync();
            }
        }
Пример #7
0
        public async Task SetToBeginAsync(Signup game)
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var gameToStart = await db.Signup.FirstOrDefaultAsync(o => o.Id == game.Id);

                if (gameToStart != null)
                {
                    gameToStart.IsOnGoing = true;
                    var now = DateTime.UtcNow;
                    gameToStart.StoryBeginTime  = now;
                    gameToStart.StoryEndedTime  = now.AddMinutes(60);
                    db.Entry(gameToStart).State = EntityState.Modified;
                }
                await db.SaveChangesAsync();
            }
        }
Пример #8
0
        public async Task <IEnumerable <User> > FindLatestGameUsersAsync()
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var now  = DateTime.UtcNow;
                var game = await db.Signup.FirstOrDefaultAsync(o => o.StartTime <= now && o.EndTime >= now && o.IsEnabled == true && o.IsDeleted != true && o.IsOnGoing != true && o.IsStoryPushed != true);

                if (game != null)
                {
                    var gameMembers = db.GameMember.Where(x => x.SignupId == game.Id).Select(y => y.User);
                    return(gameMembers);
                }
                else
                {
                    return(new User[] { });
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 啟用/停用使用者帳戶
        /// </summary>
        /// <param name="lineUserId">The line user identifier.</param>
        /// <param name="isEnabled">if set to <c>true</c> [is enabled].</param>
        /// <returns></returns>
        public async Task EnableUserAsync(string lineUserId, bool isEnabled)
        {
            if (string.IsNullOrEmpty(lineUserId))
            {
                return;
            }

            using (var db = new ZombieRunnerDbContex())
            {
                var user = await db.User.FirstOrDefaultAsync(o => o.LineUserId == lineUserId);

                if (user != null)
                {
                    user.IsEnabled       = isEnabled;
                    db.Entry(user).State = EntityState.Modified;
                    await db.SaveChangesAsync();
                }
            }
        }
Пример #10
0
        public async Task <Event> AddEvents(string content, bool hasDead, string createdBy)
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var ev = new Event {
                    Seed         = new Random().Next(DateTime.UtcNow.Millisecond * 1000),
                    Content      = content,
                    IsEnabled    = true,
                    IsAnyoneDead = hasDead,
                    CreatedOn    = DateTime.UtcNow,
                    CreatedBy    = createdBy,
                    ModifiedOn   = DateTime.UtcNow
                };
                db.Entry(ev).State = EntityState.Added;
                await db.SaveChangesAsync();

                return(ev);
            }
        }
Пример #11
0
        public async Task <Dinner> AddDinner(string dinner, string createdBy)
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var data = new Dinner
                {
                    Seed       = new Random().Next(DateTime.UtcNow.Millisecond * 1000),
                    Content    = dinner,
                    IsEnabled  = true,
                    CreatedOn  = DateTime.UtcNow,
                    CreatedBy  = createdBy,
                    ModifiedOn = DateTime.UtcNow
                };
                db.Entry(data).State = EntityState.Added;
                await db.SaveChangesAsync();

                return(data);
            }
        }
Пример #12
0
        public async Task <int> CreateAsync(string lineUserId, string desc)
        {
            if (string.IsNullOrEmpty(lineUserId))
            {
                return(-1);
            }

            using (var db = new ZombieRunnerDbContex())
            {
                var now = DateTime.UtcNow;
                var b   = await db.Signup.AnyAsync(o => o.HostUserId == lineUserId && o.EndTime >= now && o.IsEnabled == true && o.IsDeleted != true);

                await Cores.Logger.WriteInfoLog($"CreateAsync, b = {b}");

                if (b)
                {
                    //  已有報名,do nothing
                    return(-1);
                }
                else
                {
                    var signup = new Signup
                    {
                        HostUserId  = lineUserId,
                        Description = desc,
                        StartTime   = now,
                        EndTime     = now.AddMinutes(30),    // 報名截止

                        StoryBeginTime = now.AddMinutes(31), // 開團,第 31 分鐘動啟故事訊息推送
                        StoryEndedTime = now.AddMinutes(65), // 遊戲循環結束

                        IsEnabled  = true,
                        CreatedOn  = now,
                        ModifiedOn = now
                    };
                    db.Entry(signup).State = EntityState.Added;
                    await db.SaveChangesAsync();

                    return(signup.Id);
                }
            }
        }
Пример #13
0
        public async Task UpdateUserNameAsync(string lineUserId, string name)
        {
            if (string.IsNullOrEmpty(lineUserId) || string.IsNullOrEmpty(name))
            {
                return;
            }

            using (var db = new ZombieRunnerDbContex())
            {
                var user = await db.User.FirstOrDefaultAsync(o => o.LineUserId == lineUserId);

                if (user != null)
                {
                    user.Name            = name;
                    user.ModifiedOn      = DateTime.UtcNow;
                    db.Entry(user).State = EntityState.Modified;
                    await db.SaveChangesAsync();
                }
            }
        }
Пример #14
0
        /// <summary>
        /// 遊戲中還活著的倖存者
        /// </summary>
        public async Task <GameSurvivors> FindAvailableUsersInOngoingGame()
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var now  = DateTime.UtcNow;
                var game = await db.Signup.FirstOrDefaultAsync(o => (o.IsOnGoing == true || o.EndTime <= now) && o.StoryBeginTime <= now && o.StoryEndedTime >= now && o.IsEnabled == true && o.IsDeleted != true && o.IsStoryPushed != true);

                if (game != null)
                {
                    var gameMembers = db.GameMember.Where(x => x.SignupId == game.Id && x.IsDead != true).Select(y => y.User);
                    return(new GameSurvivors {
                        Game = game,
                        Survivors = gameMembers
                    });
                }
                else
                {
                    return(null);
                }
            }
        }
Пример #15
0
        public async Task <int> CreateAsync(int userId, int signupId)
        {
            using (var db = new ZombieRunnerDbContex())
            {
                var userInGame = await db.GameMember.AnyAsync(o => o.SignupId == signupId && o.UserId == userId);

                if (!userInGame)
                {
                    var gmember = new GameMember
                    {
                        SignupId   = signupId,
                        UserId     = userId,
                        CreatedOn  = DateTime.UtcNow,
                        ModifiedOn = DateTime.UtcNow
                    };
                    db.Entry(gmember).State = EntityState.Added;
                    await db.SaveChangesAsync();

                    return(gmember.Id);
                }
                return(-1);
            }
        }