Example #1
0
        public User Create(string username, string password, string confirmPassword, string email)
        {
            if (password != confirmPassword)
            {
                throw new ArgumentException("Passwords do not match!");
            }

            var user = this.ByUsername(username);

            if (user != null)
            {
                throw new InvalidOperationException($"Username {username} is already taken!");
            }

            user = new User
            {
                Username     = username,
                Email        = email,
                Password     = password,
                RegisteredOn = DateTime.Now
            };

            context.Users.Add(user);

            context.SaveChanges();

            return(user);
        }
Example #2
0
        public User CreateUser(string username, string password, string repPassword, string email)
        {
            if (Exist(username))
            {
                throw new InvalidOperationException($"Username {username} is already taken!");
            }

            if (password != repPassword)
            {
                throw new ArgumentException("Passwords do not match!");
            }

            User user = new User
            {
                Username         = username,
                Password         = password,
                Email            = email,
                IsDeleted        = false,
                RegisteredOn     = DateTime.Now,
                LastTimeLoggedIn = DateTime.Now
            };

            context.Users.Add(user);
            context.SaveChanges();

            return(user);
        }
Example #3
0
        public Album Create(int userId, string albumName, string backgroundColor, string[] tagNames)
        {
            Album album = new Album()
            {
                Name            = albumName,
                BackgroundColor = Enum.Parse <Color>(backgroundColor, true),
            };

            context.Albums.Add(album);
            context.SaveChanges();
            AlbumRole albumRole = new AlbumRole()
            {
                AlbumId = album.Id,
                UserId  = userId,
                Role    = Role.Owner
            };

            context.AlbumRoles.Add(albumRole);
            context.SaveChanges();
            foreach (var tagName in tagNames)
            {
                Tag      tag      = context.Tags.FirstOrDefault(t => t.Name == tagName);
                AlbumTag albumTag = new AlbumTag()
                {
                    AlbumId = album.Id,
                    TagId   = tag.Id
                };
                context.AlbumTags.Add(albumTag);
            }
            context.SaveChanges();
            return(album);
        }
        public void ChangePassword(int userId, string password)
        {
            var user = this.ById <User>(userId);

            user.Password = password;

            context.SaveChanges();
        }
        public Album CreateAlbum(string username, string albumTitle, string bgColor, params string[] tags)
        {
            var user = context.Users
                       .ToArray()
                       .SingleOrDefault(u => u.Username.Equals(username));

            if (user is null)
            {
                throw new ArgumentException($"User {username} not found!");
            }

            var album = context.Albums
                        .ToArray()
                        .SingleOrDefault(a => a.Name.Equals(albumTitle));

            if (album != null)
            {
                throw new ArgumentException($"Album {albumTitle} exists!");
            }

            var albumColor = typeof(Color)
                             .GetFields()
                             .SingleOrDefault(fi => fi.Name.Equals(bgColor));

            if (albumColor is null)
            {
                throw new ArgumentException($"Color {bgColor} not found!");
            }

            var dbColor = albumColor.GetRawConstantValue();

            var dbTags = context.Tags
                         .Select(t => t.Name)
                         .ToArray();

            if (tags.Any(ct => !dbTags.Contains(ct)))
            {
                throw new ArgumentException("Invalid tags!");
            }

            // CreateAlbum pesho PeshoAlbum White #CoolPhotos

            var albumTags = GetAlbumTags(dbTags);

            var dbAlbum = new Album(albumTitle, (Color)dbColor, albumTags);

            context.Albums.Add(dbAlbum);

            context.SaveChanges();

            var createdAlbum = context.Albums.SingleOrDefault(a => a.Name.Equals(albumTitle));

            ShareAlbum(createdAlbum.Id, username, "Owner");

            return(dbAlbum);
        }
        public void ChangePassword()
        {
            ModifyUserValidator.InvalidPassword(this.NewValue);

            context.Users.SingleOrDefault(u => u.Username == this.Username).Password = this.NewValue;
            context.SaveChanges();

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(string.Format(ModifyMessage.Success, this.Username, this.Property, this.NewValue));
        }
Example #7
0
        // ModifyUser <username> <property> <new value>
        // For example:
        // ModifyUser <username> Password <NewPassword>
        // ModifyUser <username> BornTown <newBornTownName>
        // ModifyUser <username> CurrentTown <newCurrentTownName>
        // !!! Cannot change username
        public string Execute(string[] data)
        {
            Authorization.Instance.ValidateIsUserLoggedIn();

            string userName = data[0];
            string property = data[1];
            string value    = data[2];

            if (Authorization.Instance.CurrentUser.Username != userName)
            {
                throw new InvalidOperationException("You can modify only your profile!");
            }
            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (!context.Users.Any(u => u.Username == userName))
                {
                    throw new ArgumentException($"User {userName} not found!");
                }

                User user = context.Users.FirstOrDefault(u => u.Username == userName);

                switch (property)
                {
                case "Password":
                    user.Password = value;
                    context.SaveChanges();
                    break;

                case "BornTown":
                    if (!context.Towns.Any(t => t.Name == value))
                    {
                        throw new ArgumentException($"Value {value} not valid!\nTown {value} not found!");
                    }
                    Town town = context.Towns.FirstOrDefault(t => t.Name == value);
                    user.BornTown = town;
                    context.SaveChanges();
                    break;

                case "CurrentTown":
                    if (!context.Towns.Any(t => t.Name == value))
                    {
                        throw new ArgumentException($"Value {value} not valid!\nTown {value} not found!");
                    }
                    Town town1 = context.Towns.FirstOrDefault(t => t.Name == value);
                    user.CurrentTown = town1;
                    context.SaveChanges();
                    break;

                default:
                    throw new ArgumentException($"Property {property} not supported!");
                }
            }

            return("User " + userName + " " + property + " is " + value + ".");
        }
Example #8
0
        public Album CreateAlbum(string username, string albumTitle, string color, string[] tags)
        {
            var user = userService.ByUsername(username);

            if (user == null)
            {
                throw new ArgumentException($"User {username} not found!");
            }

            object bgColor;

            if (!Enum.TryParse(typeof(Color), color, out bgColor))
            {
                throw new ArgumentException($"Color {color} not found!");
            }

            Color backColor = (Color)bgColor;

            if (!tags.All(t => this.TagByName(t) != null))
            {
                throw new ArgumentException("Invalid tags!");
            }

            var album = this.AlbumByName(albumTitle);

            if (album != null)
            {
                throw new ArgumentException($"Album {albumTitle} exists!");
            }

            var albumTags = tags.Select(t => this.TagByName(t));

            album = new Album
            {
                BackgroundColor = backColor,
                Name            = albumTitle
            };

            context.Albums.Add(album);

            albumTags.ToList()
            .ForEach(at => context.AlbumTags.Add(new AlbumTag {
                Album = album, Tag = at
            }));

            context.AlbumRoles.Add(new AlbumRole {
                Album = album, User = user, Role = Role.Owner
            });

            context.SaveChanges();

            return(album);
        }
        // AddTown <townName> <countryName>
        public static string Execute(string[] data)
        {
            if (data.Length != 3)
            {
                throw new InvalidOperationException($"Command {data[0]} not valid!");
            }

            AuthenticationCheck.CheckLogin();

            string townName = data[1];
            string country  = data[2];

            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (context.Towns.Any(t => t.Name == townName))
                {
                    throw new ArgumentException($"Town {townName} was already added!");
                }

                Town town = new Town
                {
                    Name    = townName,
                    Country = country
                };

                context.Towns.Add(town);
                context.SaveChanges();

                return($"Town {townName} was added successfully!");
            }
        }
        public void UpdateUser(string username, string property, string newValue)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                User user = context.Users
                            .Include(u => u.BornTown)    // or .Include("BornTown")
                            .Include(u => u.CurrentTown) // or .Include("CurrentTown")
                            .SingleOrDefault(u => u.Username == username);

                switch (property)
                {
                case "Password":
                    user.Password = newValue;
                    break;

                case "BornTown":
                    user.BornTown = context.Towns.SingleOrDefault(t => t.Name == newValue);
                    break;

                case "CurrentTown":
                    user.CurrentTown = context.Towns.SingleOrDefault(t => t.Name == newValue);
                    break;
                }

                context.SaveChanges();
            }
        }
        // AddTagTo <albumName> <tag>
        public string Execute(string[] data)
        {
            if (Session.User == null)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                string albumName = data[1];
                string tagName   = data[2];

                if (context.Albums.Any(a => a.Name != albumName) || context.Tags.Any(t => t.Name != tagName))
                {
                    throw new ArgumentException("Either tag or album do not exist!");
                }

                var album = context.Albums.FirstOrDefault(a => a.Name == albumName);
                var tag   = context.Tags.FirstOrDefault(t => t.Name == tagName);

                var albumTag = new AlbumTag()
                {
                    Album = album,
                    Tag   = tag
                };

                album.AlbumTags.Add(albumTag);

                context.SaveChanges();

                return($"Tag{tag} added to {album}!");
            }
        }
Example #12
0
        // AcceptFriend <username1> <username2>
        public static string Execute(string[] data)
        {
            var friendAccepter  = data[0];
            var friendRequester = data[1];

            using (var context = new PhotoShareContext())
            {
                if (!context.Users.Any(x => x.Username == friendAccepter))
                {
                    throw new ArgumentException($"{friendAccepter} not found!");
                }
                if (!context.Users.Any(x => x.Username == friendRequester))
                {
                    throw new ArgumentException($"{friendRequester} not found!");
                }
                if (context.Users.FirstOrDefault(x => x.Username == friendRequester).FriendsAdded
                    .Any(x => x.Friend.Username == friendAccepter))
                {
                    throw new InvalidOperationException($"{friendRequester} is already a friend to {friendAccepter}");
                }
                if (!context.Users.FirstOrDefault(x => x.Username == friendAccepter)
                    .AddedAsFriendBy.Any(x => x.Friend.Username == friendRequester))
                {
                    throw   new InvalidOperationException($"{friendRequester} has not added {friendAccepter} as a friend");
                }

                context.Users.FirstOrDefault(x => x.Username == friendAccepter).FriendsAdded.Add(new Friendship()
                {
                    User   = context.Users.FirstOrDefault(x => x.Username == friendAccepter),
                    Friend = context.Users.FirstOrDefault(x => x.Username == friendRequester)
                });
                context.SaveChanges();
                return($"{friendAccepter} accepted {friendRequester} as a friend");
            }
        }
        // DeleteUser <username>
        public string Execute(string[] data)
        {
            string username = data[0];

            if (Session.User == null || Session.User.Username != username)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                User user = context.Users.FirstOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new ArgumentException($"User {username} not found!");
                }

                bool userAlreadyDeleted = user.IsDeleted.Value;

                if (userAlreadyDeleted)
                {
                    throw new InvalidOperationException($"User {username} is already deleted!");
                }

                context.Users.Remove(user);

                context.SaveChanges();

                return($"User {username} was deleted successfully!");
            }
        }
        // DeleteUser <username>
        public string Execute(string[] data)
        {
            if (data.Length != 1)
            {
                throw new InvalidOperationException("Command DeleteUser not valid!");
            }

            string username = data[0];

            if (Session.LoggedUser == null || username != Session.LoggedUser.Username)
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                var user = context.Users.SingleOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new InvalidOperationException($"User {username} not found!");
                }

                if (user.IsDeleted == true)
                {
                    throw new InvalidOperationException($"User {username} is already deleted!");
                }

                user.IsDeleted = true;

                context.SaveChanges();
            }

            return($"User {username} was deleted from the database!");
        }
Example #15
0
        // DeleteUser <username>
        public static string Execute(string[] data, Session session)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            string username = data[0];

            using (PhotoShareContext context = new PhotoShareContext())
            {
                var user = context.Users.FirstOrDefault(u => u.Username == username);

                if (user == null)
                {
                    throw new InvalidOperationException($"User with {username} was not found!");
                }

                if (user.Username != session.User.Username)
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                // TODO: Delete User by username (only mark him as inactive)
                if (user.IsDeleted.Value)
                {
                    throw new InvalidOperationException($"User {user.Username} is already deleted!");
                }

                user.IsDeleted = true;
                context.SaveChanges();

                return($"User {username} was deleted from the database!");
            }
        }
        public void AddAlbum(string username, string albumName, Color color, string[] tagNames)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                Album album = new Album()
                {
                    Name            = albumName,
                    BackgroundColor = color,
                    Tags            = context.Tags.Where(t => tagNames.Contains(t.Name)).ToList()
                };
                User owner = context.Users.SingleOrDefault(u => u.Username == username);

                AlbumRole albumRole = new AlbumRole()
                {
                    User  = owner,
                    Album = album,
                    Role  = Role.Owner
                };
                context.AlbumRoles.Add(albumRole);  // v.1
                //album.AlbumRoles.Add(albumRole);  // v.2
                //context.Albums.Add(album);        // v.2

                context.SaveChanges();
            }
        }
        // AddTagTo <albumName> <tag>
        public string Execute(string[] data)
        {
            Authorization.Instance.ValidateIsUserLoggedIn();
            string albumName = data[0];
            string tagName   = data[1].ValidateOrTransform();

            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (!context.Albums.Any(a => a.Name == albumName) || !context.Tags.Any(t => t.Name == tagName))
                {
                    throw new ArgumentException($"Either {tagName} or {albumName} do not exist!");
                }

                Album album = context.Albums.FirstOrDefault(a => a.Name == albumName);

                string username = Authorization.Instance.CurrentUser.Username;

                if (!album.AlbumRoles.Any(ar => ar.User.Username == username && ar.Role == Role.Owner))
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                Tag tag = context.Tags.FirstOrDefault(t => t.Name == tagName);

                album.Tags.Add(tag);
                context.SaveChanges();
            }

            return($"Tag {tagName} added to {albumName}!");
        }
Example #18
0
        // UploadPicture <albumName> <pictureTitle> <pictureFilePath>
        public string Execute(string[] data)
        {
            string albumTitle   = data[0];
            string pictureTitle = data[1];
            string picturePath  = data[2];

            if (!IsAlbumExisting(albumTitle))
            {
                throw new ArgumentException($"Album {albumTitle} not found!");
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                Album   album   = context.Albums.SingleOrDefault(a => a.Name == albumTitle);
                Picture picture = new Picture()
                {
                    Path  = picturePath,
                    Title = pictureTitle,
                };

                album.Pictures.Add(picture);
                context.SaveChanges();
            }

            return($"Picture {pictureTitle} added to {albumTitle}");
        }
        // DeleteUser <username>
        public override string Execute(string[] data)
        {
            if (data.Length != DataLength)
            {
                throw new ArgumentException(ErrorMessages.InvalidCommandName);
            }

            var username = data[1];

            using (var context = new PhotoShareContext())
            {
                var user = context.Users.Single(u => u.Username == username);
                if (user is null)
                {
                    throw new InvalidOperationException(string.Format(ErrorMessages.NonExistentUser, username));
                }

                if (!user.Username.Equals(Session.User.Username))
                {
                    throw new InvalidOperationException(ErrorMessages.InvalidCredentials);
                }

                if (user.IsDeleted is null || user.IsDeleted.Value)
                {
                    throw new InvalidOperationException(string.Format(ErrorMessages.UserIsAlreadyDeleted, username));
                }

                user.IsDeleted = true;
                context.SaveChanges();

                return($"User {username} was deleted from the database!");
            }
        }
Example #20
0
        // DeleteUser <username>

        public string Execute(Session session, string[] data)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            string userName = data[1];

            using (var context = new PhotoShareContext())
            {
                var user = context.Users.FirstOrDefault(u => u.Username == userName);
                if (user == null)
                {
                    throw new ArgumentException($"User {userName} not found!");
                }

                if (user.Username != session.User.Username)
                {
                    throw new InvalidOperationException("Invalid credentials!");
                }

                if (user.IsDeleted != null && user.IsDeleted.Value)
                {
                    throw new InvalidOperationException($"User {userName} is already deleted!");
                }

                user.IsDeleted = true;

                context.SaveChanges();
            }

            return($"User {userName} was deleted successfully!");
        }
        // AcceptFriend <username1> <username2>

        public string Execute(Session session, string[] data)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            if (data.Length != 3)
            {
                throw new InvalidOperationException($"Command {data[0]} not valid!");
            }

            var userName1 = data[1];
            var userName2 = data[2];

            using (var context = new PhotoShareContext())
            {
                var user1 = context.Users
                            .Include(u => u.FriendsAdded)
                            .ThenInclude(fa => fa.Friend)
                            .SingleOrDefault(u => u.Username == userName1);

                var user2 = context.Users
                            .Include(u => u.FriendsAdded)
                            .ThenInclude(fa => fa.Friend)
                            .FirstOrDefault(u => u.Username == userName2);

                if (user1 == null)
                {
                    throw new ArgumentException($"{userName1} not found!");
                }
                if (user2 == null)
                {
                    throw new ArgumentException($"{userName2} not found!");
                }
                if (user1.FriendsAdded.Any(f => f.Friend.Username == userName2))
                {
                    throw new InvalidOperationException($"{userName2} is already a friend to {userName1}");
                }
                if (user2.FriendsAdded.Any(f => f.Friend.Username == userName1))
                {
                    throw new InvalidOperationException($"{userName1} is already a friend to {userName2}");
                }
                if (user1.AddedAsFriendBy.All(f => f.Friend.Username != userName2))
                {
                    throw new InvalidOperationException($"{userName2} has not added {userName1} as a friend");
                }

                var friendShip = new Friendship()
                {
                    User = user1, Friend = user2
                };

                user1.FriendsAdded.Add(friendShip);

                context.SaveChanges();
            }

            return($"{userName1} accepted {userName2} as a friend");
        }
Example #22
0
        // AddTag <tag>
        public static string Execute(string[] data)
        {
            string tag = data[1].ValidateOrTransform();

            if (Session.User == null)
            {
                throw new InvalidOperationException($"Invalid credentials!");
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (context.Tags.Any(x => x.Name == tag))
                {
                    throw new ArgumentException($"Tag {tag} exists!");
                }
                context.Tags.Add(new Tag
                {
                    Name = tag
                });

                context.SaveChanges();
            }

            return($"Tag {tag} was added successfully!");
        }
Example #23
0
        // RegisterUser <username> <password> <repeat-password> <email>
        public static string Execute(string[] data)
        {
            string username       = data[1];
            string password       = data[2];
            string repeatPassword = data[3];
            string email          = data[4];

            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (context.Users.Any(u => u.Username == username))
                {
                    throw new InvalidOperationException($"Username {username} is already taken!");
                }

                if (password != repeatPassword)
                {
                    throw new ArgumentException("Passwords do not match!");
                }

                var user = new User(username, password, email, false, DateTime.Now, DateTime.Now);

                context.Users.Add(user);
                context.SaveChanges();
            }

            return($"User {username} was registered successfully!");
        }
        // UploadPicture <albumName> <pictureTitle> <pictureFilePath>
        public static string Execute(string[] data)
        {
            var albumName = data[1];
            var picTitle  = data[2];
            var path      = data[3];

            using (var db = new PhotoShareContext())
            {
                var album = db.Albums
                            .Where(x => x.Name == albumName)
                            .SingleOrDefault();

                if (album == null)
                {
                    throw new ArgumentException($"Album {albumName} not found!");
                }

                if (db.Pictures.Where(x => x.Album == album).Any(x => x.Title == picTitle))
                {
                    throw new ArgumentException($"Photo with such name already exists in {albumName}");
                }

                var picture = new Picture()
                {
                    Album = album,
                    Title = picTitle,
                    Path  = path
                };
                db.Pictures.Add(picture);
                db.SaveChanges();

                return($"Picture {picTitle} added to {albumName}!");
            }
        }
Example #25
0
        // AddTagTo <albumName> <tag>
        public static string Execute(string[] data)
        {
            var albumName = data[1];
            var albumTag  = data[2];

            using (var db = new PhotoShareContext())
            {
                var album = db.Albums
                            .Where(x => x.Name == albumName)
                            .SingleOrDefault();

                var tag = db.Tags
                          .Where(x => x.Name == albumTag)
                          .SingleOrDefault();

                if (album == null || tag == null)
                {
                    throw new ArgumentException($"Either tag or album do not exist!");
                }

                var newAlbum = new AlbumTag()
                {
                    Album = album,
                    Tag   = tag
                };

                db.AlbumTags.Add(newAlbum);
                db.SaveChanges();

                return($"Tag #{tag} added to {album}!");
            }
        }
Example #26
0
        // AddTown <townName> <countryName>
        public static string Execute(string[] data, Session session)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException("Invalid credentials!");
            }

            string townName = data[0];
            string country  = data[1];

            using (PhotoShareContext context = new PhotoShareContext())
            {
                if (context.Towns.Any(t => t.Name == townName))
                {
                    throw new ArgumentException($"Town {townName} was already added!");
                }

                Town town = new Town
                {
                    Name    = townName,
                    Country = country
                };

                context.Towns.Add(town);
                context.SaveChanges();

                return($"Town {townName} was added to database!");
            }
        }
        public void UpdateUser(User updatedUser)
        {
            using (PhotoShareContext context = new PhotoShareContext())
            {
                User userToUpdate = context.Users
                                    .Include("BornTown")
                                    .Include("CurrentTown")
                                    .SingleOrDefault(u => u.Id == updatedUser.Id);

                if (userToUpdate != null)
                {
                    if (updatedUser.BornTown != null &&
                        (userToUpdate.BornTown == null || updatedUser.BornTown.Id != userToUpdate.BornTown.Id))
                    {
                        userToUpdate.BornTown = context.Towns.Find(updatedUser.BornTown.Id);
                    }

                    if (updatedUser.CurrentTown != null &&
                        (userToUpdate.CurrentTown == null || updatedUser.CurrentTown.Id != userToUpdate.CurrentTown.Id))
                    {
                        userToUpdate.CurrentTown = context.Towns.Find(updatedUser.CurrentTown.Id);
                    }

                    if (updatedUser.Password != userToUpdate.Password)
                    {
                        userToUpdate.Password = updatedUser.Password;
                    }

                    context.Entry(userToUpdate).State = EntityState.Modified;
                    context.SaveChanges();
                }
            }
        }
        // AddTag <tag>

        public string Execute(Session session, string[] data)
        {
            if (!session.IsLoggedIn())
            {
                throw new InvalidOperationException($"Invalid credentials!");
            }

            if (data.Length != 2)
            {
                throw new InvalidOperationException($"Command {data[0]} not valid!");
            }

            string tag = data[1].ValidateOrTransform();

            using (var context = new PhotoShareContext())
            {
                if (context.Tags.Any(t => t.Name == tag))
                {
                    throw new ArgumentException($"Tag {tag} exists!");
                }

                context.Tags.Add(new Tag
                {
                    Name = tag
                });

                context.SaveChanges();
            }

            return($"Tag {tag} was added successfully!");
        }
Example #29
0
        // AddTown <townName> <countryName>
        public static string Execute(string[] data)
        {
            string townName = data[0];
            string country  = data[1];

            using (var db = new PhotoShareContext())
            {
                var checkTown = db.Towns
                                .FirstOrDefault(x => x.Name == townName);

                if (checkTown != null)
                {
                    throw new ArgumentException($"Town {townName} was already added!");
                }
            }

            using (PhotoShareContext context = new PhotoShareContext())
            {
                Town town = new Town
                {
                    Name    = townName,
                    Country = country
                };

                context.Towns.Add(town);
                context.SaveChanges();

                return($"Town {townName} was added successfully!");
            }
        }
        // UploadPicture <albumName> <pictureTitle> <pictureFilePath>
        public override string Execute(string[] data, PhotoShareContext context)
        {
            string albumName = data[0];
            string picTitle  = data[1];
            string picPath   = data[2];

            Album album = context.Albums
                          .Include(a => a.Pictures)
                          .SingleOrDefault(a => a.Name.Equals(albumName));

            if (album == null)
            {
                throw new ArgumentException($"Album {albumName} not found!");
            }

            Picture currentPicture = new Picture
            {
                Title = picTitle,
                Path  = picPath,
                Album = album
            };

            album.Pictures.Add(currentPicture);
            context.SaveChanges();

            return($"Picture {picTitle} added to {albumName}!");
        }