// PUT api/UserBook/5
        public async Task <IHttpActionResult> PutUserBook(int id, UserBookDto userBookDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var userBook = db.UserBooks.Find(id);

            userBookDto.Update(userBook);
            //userBook.Name = bookDto.name;
            //db.Entry(userBook.ToBookEntity()).State = EntityState.Modified;

            try {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException) {
                if (!UserBookExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
        public async Task <IActionResult> Post([FromBody] UserBookDto userbook)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                _logger.LogInformation("UserBooksController:: POST called");

                var exists = await _unitOfWork.UserBooks.FindAsync(x => x.BookId == userbook.BookId && x.UserId == userbook.UserId);

                if (exists.Count() > 0)
                {
                    return(BadRequest(new { message = "User already subscribed to selected book" }));
                }

                var ub = _mapper.Map <UserBook>(userbook);
                await _unitOfWork.UserBooks.AddAsync(ub);

                await _unitOfWork.CompleteAsync();

                return(CreatedAtAction(nameof(GetById), new { id = ub.UserId }, new { message = "Subscribed successfully..." }));
            }
            catch (Exception ex)
            {
                _logger.LogError("UserBooksController:: POST error", ex.StackTrace);
                return(StatusCode(StatusCodes.Status500InternalServerError, "Server error"));
            }
        }
        public async Task <IActionResult> Delete([FromBody] UserBookDto userbook)
        {
            try
            {
                _logger.LogInformation("UserBooksController:: Delete called");
                var ub = await _unitOfWork.UserBooks.FindAsync(x => x.BookId == userbook.BookId && x.UserId == userbook.UserId);


                if (ub.Count() < 0)
                {
                    return(BadRequest(new { message = "Specified record not in database" }));
                }

                _unitOfWork.UserBooks.Remove(ub.First());

                await _unitOfWork.CompleteAsync();

                //return NoContent(); // Best practice but for an api to be consumed externally, message responses are good
                return(Ok(new { message = "Book subscription removed successfully" }));
            }
            catch (Exception ex)
            {
                _logger.LogError("UserBooksController:: DELETE error", ex.StackTrace);
                return(StatusCode(StatusCodes.Status500InternalServerError, "Server error"));
            }
        }
Beispiel #4
0
        // POST api/Book
        public async Task <IHttpActionResult> PostBook(BookDto bookDto)
        {
            if (ModelState.IsValid)
            {
                LanguageType bookLanguage;
                if (!Enum.TryParse <LanguageType>(bookDto.language, out bookLanguage))
                {
                    return(BadRequest("Invalid book language"));
                }
                var      userId   = User.Identity.GetUserId();
                UserBook userBook = await db.FindUserBookAsync(userId, bookDto.name, bookLanguage);

                if (userBook != null)
                {
                    ModelState.AddModelError("name", string.Format("You already have book \"{0}\"", bookDto.name));
                }
                else
                {
                    userBook = await db.CreateUserBookAsync(User.Identity.GetUserId(), bookLanguage, bookDto.name);

                    var userBookDto = new UserBookDto(userBook);
                    return(CreatedAtRoute("DefaultApi", new { id = userBook.Id },
                                          new {
                        emberDataFormat = true,
                        books = new List <dynamic> {
                            userBookDto.BookDto
                        },
                        userBooks = new List <dynamic> {
                            userBookDto
                        }
                    }));
                }
            }
            return(new EmberDSErrorsResult(this));
        }
Beispiel #5
0
        public ApiResponseDto <UserBookDto> AddtoMyLib(UserBookDto user)
        {
            if (user == null)
            {
                return(ApiResponseDto <UserBookDto> .FailedResponse("basarisiz"));
            }
            var book = _bookService.AddtoMyLib(user.FK_BookID, user.FK_UserID);

            return(ApiResponseDto <UserBookDto> .SuccessResponse(book, "basarili"));
        }
Beispiel #6
0
        public UserBookDto AddtoMyLib(int bookID, int UserID)
        {
            using (var uow = new UnitOfWork())
            {
                var book = uow.BookRepository.GetByID(bookID);

                ENTUserBook eNTUserBook = new ENTUserBook()
                {
                    FK_BookID = bookID,
                    FK_UserID = UserID
                };
                uow.UserBookRepository.Add(eNTUserBook);
                UserBookDto userBookDto = new UserBookDto()
                {
                    FK_BookID = eNTUserBook.FK_BookID,
                    FK_UserID = eNTUserBook.FK_UserID,
                };
                return(userBookDto);
            }
        }
        // POST api/Translation
        public async Task <IHttpActionResult> PostTranslation(TranslationData data)
        {
            try {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                LanguageType wordLanguage;
                LanguageType translationLanguage;
                if (!Enum.TryParse <LanguageType>(data.wordLanguage, out wordLanguage))
                {
                    return(BadRequest("Invalid word language"));
                }
                if (!Enum.TryParse <LanguageType>(data.translationLanguage, out translationLanguage))
                {
                    return(BadRequest("Invalid translation language"));
                }

                var user = this.GetUser();

                // . add word
                SpeachPartType    sp = GetSpeachPart(data.translationWords, data.translationWord);
                LanguageFormatter languageFormatter = new LanguageFormatter(wordLanguage);
                Word word = await db.AddWord(languageFormatter.FormatWord(data.word, sp),
                                             wordLanguage,
                                             data.wordPronunciation,
                                             data.wordSoundUrls,
                                             data.wordPictureUrls);

                // . add word translations to mongo
                await mongoDb.AddTranslations(
                    data.word.ToLower(),
                    data.wordLanguage,
                    data.translationLanguage,
                    data.translationWords,
                    data.translationCards);

                // . if book id is not specified - add translation to 'Cool Translator' book
                UserBook userBook;
                if (data.bookId == 0)
                {
                    userBook = await db.GetCTUserBook(User.Identity.GetUserId(), wordLanguage);

                    data.bookId = userBook.BookId;
                }
                else
                {
                    userBook = await db.FindUserBookAsync(user.Id, data.bookId);

                    if (userBook == null)
                    {
                        return(BadRequest("Invalid bookId"));
                    }
                    if (!userBook.Book.CanBeUpdatedBy(user.Id))
                    {
                        return(BadRequest(string.Format("User {0} is not author of the book", user.DisplayName)));
                    }
                }

                // . add translation
                Tuple <BookWord, Translation> bwt = await db.AddTranslation(data.bookId, word.Id, data.translationWord, translationLanguage, sp);

                Redis.PushWord(wordLanguage, sp, word.Value);
                Redis.PushWord(translationLanguage, sp, bwt.Item2.Value);

                var userBookDto = new UserBookDto(userBook);
                return(CreatedAtRoute("DefaultApi", new { id = bwt.Item2.Id }, new {
                    userBook = userBookDto,
                    book = userBookDto.BookDto,
                    word = new WordDto(word),
                    bookWord = new BookWordDto(bwt.Item1),
                    translation = new TranslationDto(bwt.Item2)
                }));
            } catch (Exception e) {
                _logger.Error(e, "Unable to add translation");
                throw;
            }
        }