diff options
| author | transtrike <transtrike@gmail.com> | 2020-12-17 23:05:20 +0200 |
|---|---|---|
| committer | transtrike <transtrike@gmail.com> | 2020-12-17 23:05:20 +0200 |
| commit | faa2e47b6718c59feadecea176020f3326076d5d (patch) | |
| tree | 6c67123d1ebcc897bb80a640108d5e1d5d636a0c /src/DevHive.Services | |
| parent | b24b9b1ffa528f29aa87f0e48097a35386fbb8b1 (diff) | |
| download | DevHive-faa2e47b6718c59feadecea176020f3326076d5d.tar DevHive-faa2e47b6718c59feadecea176020f3326076d5d.tar.gz DevHive-faa2e47b6718c59feadecea176020f3326076d5d.zip | |
Implemented Friends layer
Diffstat (limited to 'src/DevHive.Services')
| -rw-r--r-- | src/DevHive.Services/Services/FriendsService.cs | 70 | ||||
| -rw-r--r-- | src/DevHive.Services/Services/UserService.cs | 18 |
2 files changed, 71 insertions, 17 deletions
diff --git a/src/DevHive.Services/Services/FriendsService.cs b/src/DevHive.Services/Services/FriendsService.cs new file mode 100644 index 0000000..21a2aac --- /dev/null +++ b/src/DevHive.Services/Services/FriendsService.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using AutoMapper; +using DevHive.Data.Models; +using DevHive.Data.Repositories; +using DevHive.Services.Models.Identity.User; +using DevHive.Services.Options; + +namespace DevHive.Services.Services +{ + public class FriendsService : UserService + { + private readonly FriendsRepository _friendsRepository; + private readonly IMapper _friendsMapper; + + public FriendsService(DevHiveContext context, IMapper mapper, JWTOptions jwtOptions) + : base(context, mapper, jwtOptions) + { + this._friendsRepository = new FriendsRepository(context); + this._friendsMapper = mapper; + } + + //Create + public async Task<bool> AddFriend(Guid userId, Guid friendId) + { + User user = await this._friendsRepository.GetByIdAsync(userId); + User friend = await this._friendsRepository.GetByIdAsync(friendId); + + return user != default(User) && friend != default(User) ? + await this._friendsRepository.AddFriendAsync(user, friend) : + throw new ArgumentException("Invalid user!"); + } + + //Read + public async Task<UserServiceModel> GetFriendById(Guid friendId) + { + if(!_friendsRepository.DoesUserExist(friendId)) + throw new ArgumentException("User does not exist!"); + + User friend = await this._friendsRepository.GetByIdAsync(friendId); + + return this._friendsMapper.Map<UserServiceModel>(friend); + } + + public async Task<bool> RemoveFriend(Guid userId, Guid friendId) + { + if(!this._friendsRepository.DoesUserExist(userId) && + !this._friendsRepository.DoesUserExist(friendId)) + throw new ArgumentException("Invalid user!"); + + User user = await this._friendsRepository.GetByIdAsync(userId); + + if(!this.DoesUserHaveFriends(user)) + throw new ArgumentException("User does not have any friends."); + + return await this.RemoveFriend(user.Id, friendId); + } + + //Validation + private bool DoesUserHaveThisFriend(User user, User friend) + { + return user.Friends.Contains(friend); + } + + private bool DoesUserHaveFriends(User user) + { + return user.Friends.Count >= 1; + } + } +}
\ No newline at end of file diff --git a/src/DevHive.Services/Services/UserService.cs b/src/DevHive.Services/Services/UserService.cs index 3e65dab..6f69d6d 100644 --- a/src/DevHive.Services/Services/UserService.cs +++ b/src/DevHive.Services/Services/UserService.cs @@ -72,13 +72,7 @@ namespace DevHive.Services.Services User user = await this._userRepository.GetByIdAsync(id) ?? throw new ArgumentException("User does not exist!"); - //Here User has 1 role - - UserServiceModel model = this._userMapper.Map<UserServiceModel>(user); - - //here model has 0 roles - - return model; + return this._userMapper.Map<UserServiceModel>(user); } public async Task<UserServiceModel> UpdateUser(UpdateUserServiceModel updateModel) @@ -111,16 +105,6 @@ namespace DevHive.Services.Services throw new InvalidOperationException("Unable to delete user!"); } - public async Task<bool> AddFriend(Guid userId, Guid friendId) - { - User user = await this._userRepository.GetByIdAsync(userId); - User friend = await this._userRepository.GetByIdAsync(friendId); - - return user != default(User) && friend != default(User) ? - await this._userRepository.AddFriend(user, friend) : - throw new ArgumentException("Invalid user!"); - } - private string GeneratePasswordHash(string password) { return string.Join(string.Empty, SHA512.HashData(Encoding.ASCII.GetBytes(password))); |
