Skip to content

Commit

Permalink
Refactor repository
Browse files Browse the repository at this point in the history
  • Loading branch information
CamiloBernal committed Oct 4, 2022
1 parent 7434715 commit 6a90650
Showing 1 changed file with 33 additions and 58 deletions.
91 changes: 33 additions & 58 deletions src/Infrastructure/Store/UserWishlistsRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,100 +31,64 @@ public async Task<UserWishlists> CreateAsync(UserWishlists list, CancellationTok
public async Task<UserWishlists> UpdateAsync(UserWishlists list, string listName, string owner,
CancellationToken cancellationToken = default)
{
var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList is null)
{
throw new WishListNotFoundException();
}

foundList.Merge(list);
await _unitOfWork.UpdateAsync(filterDefinition, list, cancellationToken);
return foundList;
var foundList = await GetUserWishlist(listName, owner, cancellationToken: cancellationToken);
foundList.list.Merge(list);
await _unitOfWork.UpdateAsync(foundList.filterDefinition, list, cancellationToken);
return foundList.list;
}

public async Task<bool> DeleteAsync(string listName, string owner, CancellationToken cancellationToken = default)
{
var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList is null)
{
throw new WishListNotFoundException();
}

await _unitOfWork.RemoveAsync(filterDefinition, cancellationToken);
var filterDefinition =
await GetUserWishlist(listName, owner,
cancellationToken: cancellationToken); //For handle not found exception
await _unitOfWork.RemoveAsync(filterDefinition.filterDefinition, cancellationToken);
_log.LogWarning($"The Wishlist with name {listName} associated with the user {owner} and was deleted.");
return true;
}

public async Task<bool?> AddBooksAsync(string listName, IEnumerable<Book?>? books, string owner,
CancellationToken cancellationToken = default)
{
if (books is null)
if (books is null) return null;
var foundList = await GetUserWishlist(listName, owner, cancellationToken: cancellationToken);
if (foundList.list.Books is not null && foundList.list.Books.Any())
{
return null;
}

var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList is null)
{
throw new WishListNotFoundException();
}

if (foundList.Books is not null && foundList.Books.Any())
{
var conflictedBooks = (from registeredBooks in foundList.Books
var conflictedBooks = (from registeredBooks in foundList.list.Books
join newBooks in books on registeredBooks.BookId equals newBooks.BookId
select newBooks).ToList();
if (conflictedBooks.Any())
{
throw new DuplicatedBookInListException($"The book had already been added to the WishList {listName}");
}

foundList.Books = foundList.Books.Concat(books);
foundList.list.Books = foundList.list.Books.Concat(books);
}
else
{
foundList.Books = books;
foundList.list.Books = books;
}

await _unitOfWork.UpdateAsync(filterDefinition, foundList, cancellationToken);
await _unitOfWork.UpdateAsync(foundList.filterDefinition, foundList.list, cancellationToken);
return true;
}

public async Task<bool?> RemoveBooksAsync(string listName, string bookId, string owner,
CancellationToken cancellationToken = default)
{
var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList is null)
{
throw new WishListNotFoundException();
}

var foundBook = foundList.Books?.FirstOrDefault(b => b?.BookId == bookId);
if (foundBook is null)
{
throw new BookNotFoundInListException();
}

foundList.Books = foundList?.Books?.Where(b => b?.BookId != bookId);
await _unitOfWork.UpdateAsync(filterDefinition, foundList, cancellationToken);
var foundList = await GetUserWishlist(listName, owner, cancellationToken: cancellationToken);
var foundBook = foundList.list.Books?.FirstOrDefault(b => b?.BookId == bookId);
if (foundBook is null) throw new BookNotFoundInListException();
foundList.list.Books = foundList.list.Books?.Where(b => b?.BookId != bookId);
await _unitOfWork.UpdateAsync(foundList.filterDefinition, foundList.list, cancellationToken);
return true;
}

public async Task<IEnumerable<Book?>?> GetListBooks(string listName, string owner,
CancellationToken cancellationToken = default)
{
var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList is null)
{
throw new WishListNotFoundException();
}

return foundList.Books;
var foundList = await GetUserWishlist(listName, owner, cancellationToken: cancellationToken);
return foundList.list?.Books;
}

public Task<UserWishlists?> FindByNameAsync(string listName, string owner,
Expand All @@ -151,6 +115,17 @@ private static FilterDefinition<UserWishlists> GetFilterByNameAndOwner(string li
}


private async Task<(UserWishlists list, FilterDefinition<UserWishlists> filterDefinition)> GetUserWishlist(
string listName, string owner, bool handleNotFoundException = true,
CancellationToken cancellationToken = default)
{
var filterDefinition = GetFilterByNameAndOwner(listName, owner);
var foundList = await _unitOfWork.GetOneAsync(filterDefinition, cancellationToken);
if (foundList == null && handleNotFoundException) throw new WishListNotFoundException();
return (foundList, filterDefinition);
}


private async Task<bool> WishListExists(string listName, string owner,
CancellationToken cancellationToken = default)
{
Expand Down

0 comments on commit 6a90650

Please sign in to comment.