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); }
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); }
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)); }
// 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 + "."); }
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}!"); } }
// 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!"); }
// 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}!"); }
// 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!"); } }
// 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"); }
// 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!"); }
// 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}!"); } }
// 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}!"); } }
// 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!"); }
// 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}!"); }