예제 #1
0
        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);
        }