示例#1
0
        public static User SaveUser(string sub, string alias, string mail, string first_name, string last_name)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    user = new Database.User();
                }

                user.Alias     = alias;
                user.FirstName = first_name;
                user.LastName  = last_name;
                user.Mail      = mail;
                user.Sub       = sub;

                if (user.Id == 0)
                {
                    context.User.Add(user);
                }

                context.SaveChanges();

                return(ParseUser(user));
            }
        }
示例#2
0
        public static User SaveUser(User userNew)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == userNew.Sub);

                if (user == null)
                {
                    user = new Database.User();
                }

                user.Alias     = userNew.Alias;
                user.FirstName = userNew.FirstName;
                user.LastName  = userNew.LastName;
                user.Mail      = userNew.Mail;
                user.Sub       = userNew.Sub;

                if (user.Id == 0)
                {
                    context.User.Add(user);
                }

                context.SaveChanges();

                return(ParseUser(user));
            }
        }
示例#3
0
 public static User GetUserById(int id)
 {
     using (var context = new Database.postgresContext())
     {
         return(ParseUser(context.User.Find(id)));
     }
 }
示例#4
0
 public static User GetUserByAlias(string alias)
 {
     using (var context = new Database.postgresContext())
     {
         return(ParseUser(context.User.FirstOrDefault(u => u.Alias == alias)));
     }
 }
示例#5
0
        internal static Game UpdatePhoto(int game_id, string sub, string photo)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                if (user.Sub != sub)
                {
                    throw new Database.UserNotFoundException();
                }

                var game = context.Game.Find(game_id);

                if (game == null)
                {
                    throw new Database.GameNotFoundException();
                }

                game.Photo = photo;

                context.SaveChanges();

                return(ParseGame(game));
            }
        }
示例#6
0
 public static User GetUser(string sub)
 {
     using (var context = new Database.postgresContext())
     {
         return(ParseUser(context.User.FirstOrDefault(u => u.Sub == sub)));
     }
 }
示例#7
0
        internal static void JoinGame(string sub, int game_id)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                var game = context.Game.FirstOrDefault(g => g.Id == game_id);

                if (game == null)
                {
                    throw new Database.GameNotFoundException();
                }

                Database.GameUser gu = new Database.GameUser();
                gu.GameId = game.Id;
                gu.UserId = user.Id;
                context.GameUser.Add(gu);

                context.SaveChanges();
            }
        }
示例#8
0
        public static Game GetGame(int game_id, string sub)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                var game = context.Game.FirstOrDefault(g => g.Id == game_id);

                if (game == null)
                {
                    throw new Database.GameNotFoundException();
                }

                game.Clues   = context.Clue.Where(c => c.GameId == game.Id).Select(c => c.Text).ToArray();
                game.UserIds = context.GameUser.Where(c => c.GameId == game.Id).Select(c => c.UserId).ToArray();

                if (game.CreatorId != user.Id)
                {
                    game.WinCode = String.Empty;
                }

                return(ParseGame(game));
            }
        }
示例#9
0
 public static User FindUser(User user)
 {
     using (var context = new Database.postgresContext())
     {
         var u = context.User.FirstOrDefault(u => String.IsNullOrEmpty(user.Alias) ? u.Mail == user.Mail : u.Alias == user.Alias);
         return(ParseUser(u));
     }
 }
示例#10
0
        internal static Game SaveGame(string sub, DateTime endGame, double latitude, double longitude, string[] clues, int[] user_ids, string photo)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                var game = new Database.Game()
                {
                    CreatorId     = user.Id,
                    Ended         = false,
                    Latitude      = latitude,
                    Longitude     = longitude,
                    Photo         = photo,
                    StartDatetime = DateTime.Now,
                    EndDatetime   = endGame,
                    WinCode       = GenerateRandomCode()
                };

                context.Game.Add(game);

                context.SaveChanges();

                foreach (string clue in clues)
                {
                    Database.Clue c = new Database.Clue();
                    c.GameId = game.Id;
                    c.Text   = clue;
                    context.Clue.Add(c);
                }

                foreach (int user_id in user_ids)
                {
                    var u = context.User.Find(user_id);
                    Database.GameUser gu = new Database.GameUser();
                    gu.GameId = game.Id;
                    gu.UserId = user_id;
                    context.GameUser.Add(gu);
                    CloudMessagingService.GameInvitation(user.Sub, game.Id);
                }

                context.SaveChanges();

                return(ParseGame(game));
            }
        }
示例#11
0
        public static Game[] GetMyCreatedGames(string sub)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(x => x.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                return(context.Game.Where(g => g.CreatorId == user.Id).Select(g => ParseGame(g)).ToArray());
            }
        }
示例#12
0
        public static Game[] GetGames(string sub)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                var game_ids = context.GameUser.Where(gu => gu.UserId == user.Id).Select(gu => gu.GameId);

                return(context.Game.Where(g => game_ids.Contains(g.Id) && g.Ended).Select(g => ParseGame(g)).OrderBy(x => x.StartDatetime).ToArray());
            }
        }
示例#13
0
        internal static Game SaveGame(string sub, Game gameNew)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.First(u => u.Sub == sub);

                var game = new Database.Game()
                {
                    CreatorId     = user.Id,
                    Ended         = false,
                    Latitude      = gameNew.Latitude,
                    Longitude     = gameNew.Longitude,
                    Photo         = gameNew.Photo,
                    StartDatetime = DateTime.Now,
                    EndDatetime   = gameNew.EndDatetime,
                    WinCode       = GenerateRandomCode()
                };

                context.Game.Add(game);

                context.SaveChanges();

                foreach (string clue in gameNew.Clues)
                {
                    Database.Clue c = new Database.Clue();
                    c.GameId = game.Id;
                    c.Text   = clue;
                    context.Clue.Add(c);
                }

                foreach (int user_id in gameNew.UserIds)
                {
                    var u = context.User.Find(user_id);
                    Database.GameUser gu = new Database.GameUser();
                    gu.GameId = game.Id;
                    gu.UserId = user_id;
                    context.GameUser.Add(gu);
                    CloudMessagingService.GameInvitation(user.Sub, game.Id);
                }

                context.SaveChanges();



                return(ParseGame(game));
            }
        }
示例#14
0
        public static Game WinGame(int game_id, string sub, string win_code)
        {
            using (var context = new Database.postgresContext())
            {
                var user = context.User.FirstOrDefault(u => u.Sub == sub);

                if (user == null)
                {
                    throw new Database.UserNotFoundException();
                }

                using (var dbContextTransaction = context.Database.BeginTransaction())
                {
                    var game = context.Game.FirstOrDefault(g => g.Id == game_id);

                    if (game == null)
                    {
                        throw new Database.GameNotFoundException();
                    }

                    if (!game.Ended)
                    {
                        if (game.WinCode == win_code)
                        {
                            game.WinId        = user.Id;
                            game.WinTimestamp = DateTime.Now;
                            game.Ended        = true;

                            context.SaveChanges();

                            CloudMessagingService.GameEnded(game_id, user);
                        }
                    }

                    dbContextTransaction.Commit();

                    return(ParseGame(game));
                }
            }
        }