Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Services / DevHive.Services / Services / FriendsService.cs
diff options
context:
space:
mode:
1 files changed, 45 insertions, 0 deletions
-rw-r--r--src/Services/DevHive.Services/Services/FriendsService.cs45
diff --git a/src/Services/DevHive.Services/Services/FriendsService.cs b/src/Services/DevHive.Services/Services/FriendsService.cs
new file mode 100644
index 0000000..98f654b
--- /dev/null
+++ b/src/Services/DevHive.Services/Services/FriendsService.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Threading.Tasks;
+using DevHive.Common.Constants;
+using DevHive.Data.Interfaces;
+using DevHive.Data.Models;
+using DevHive.Services.Interfaces;
+
+namespace DevHive.Services.Services
+{
+ public class FriendsService : IFriendsService
+ {
+ private readonly IUserRepository _friendRepository;
+
+ public FriendsService(IUserRepository friendRepository)
+ {
+ this._friendRepository = friendRepository;
+ }
+
+ public async Task<bool> AddFriend(Guid userId, string friendUsername)
+ {
+ User user = await this._friendRepository.GetByIdAsync(userId) ??
+ throw new ArgumentNullException(string.Format(ErrorMessages.DoesNotExist, nameof(user)));
+
+ User friend = await this._friendRepository.GetByUsernameAsync(friendUsername) ??
+ throw new ArgumentNullException(string.Format(ErrorMessages.DoesNotExist, nameof(friend)));
+
+ bool addedToUser = user.Friends.Add(friend) && await this._friendRepository.EditAsync(userId, user);
+ bool addedToFriend = friend.Friends.Add(user) && await this._friendRepository.EditAsync(friend.Id, friend);
+ return addedToUser && addedToFriend;
+ }
+
+ public async Task<bool> RemoveFriend(Guid userId, string friendUsername)
+ {
+ User user = await this._friendRepository.GetByIdAsync(userId) ??
+ throw new ArgumentNullException(string.Format(ErrorMessages.DoesNotExist, nameof(user)));
+
+ User friend = await this._friendRepository.GetByUsernameAsync(friendUsername) ??
+ throw new ArgumentNullException(string.Format(ErrorMessages.DoesNotExist, nameof(friend)));
+
+ bool addedToUser = user.Friends.Remove(friend) && await this._friendRepository.EditAsync(userId, user);
+ bool addedToFriend = friend.Friends.Remove(user) && await this._friendRepository.EditAsync(friend.Id, friend);
+ return addedToUser && addedToFriend;
+ }
+ }
+}