public async Task <object> AddUserBoook(User_BookVM book) { try { if (book != null) { var newBook = new Borrowed_Book() { BookId = book.BookId, UserId = book.UserId, }; var saveAsync = await context.Borrowed_Books.AddAsync(newBook); if (saveAsync != null) { await context.SaveChangesAsync(); } return(saveAsync); } return(null); } catch (Exception ex) { throw new Exception(ex.Message); } }
private bool PerformRentOperation(ObjectId userId, ObjectId bookId, bool rent) { using (var session = MongoClient.StartSession()) { var cancellationToken = CancellationToken.None; var bookToRent = new Borrowed_Book { Book = bookId, User = userId }; var builder = Builders <Book> .Filter.Where(x => x.Id == bookId); int copies_available = 0; int copies_on_rent = 0; var updateTime = DateTime.UtcNow; if (rent) { copies_available = -1; copies_on_rent = 1; } else { copies_available = 1; copies_on_rent = -1; } var result = session.WithTransaction((s, ct) => { try { var ObjectToUpdate = new BsonDocument { { "$inc", new BsonDocument { { "Total_Copies_Available", copies_available }, { "Copies_on_Rent", copies_on_rent }, { "UpdatedAt", updateTime.ToTimestamp() } } } }; if (rent) { _bookRentalCollection.InsertOne(bookToRent, new InsertOneOptions { BypassDocumentValidation = false }, cancellationToken: cancellationToken); } else { var rentalBuilder = Builders <Borrowed_Book> .Filter.Where(x => x.Book == bookId && x.User == userId); var ObjForUpdate = new BsonDocument { { "Returned", true }, { "UpdatedAt", updateTime.ToTimestamp() } }; } _bookCollection.UpdateOne(builder, ObjectToUpdate, cancellationToken: ct); return(true); } catch (Exception ex) { _logger.LogError("could not process rental service for user", ex); return(false); } }, cancellationToken: cancellationToken); if (result) { return(true); } } return(false); }