def post(self): # Get user's id from token token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get book_id and content from json input info = request.json book_id = info['book_id'] rating = info['rating'] content = info['content'] if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 if not Collection.is_book_read(user_id, book_id): return { 'message': 'You can only review and rate after you read the book' }, 401 # input cannot be empty string if book_id is None or rating is None or content == "": return {'message': 'Rating or review content cannot be empty'}, 401 try: if Review.new_review(user_id, book_id, rating, content): return {'message': 'Post new review successfuly'}, 200 else: return {'message': 'Review already existed'}, 401 except pymysql.Error as e: return {'message': e.args[1]}, 500
def post(self): # Get user_id from token token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get book_id from parser args = read_parser.parse_args() book_id = args.get('book_id') # Get current year and month now_year = int(datetime.datetime.now().strftime("%Y")) now_month = int(datetime.datetime.now().strftime("%m")) if args.get('year') > now_year or args.get('year') < 1900: return {'message': 'Invalid year'}, 401 if args.get('month') > 12 or args.get('month') < 1: return {'message': 'Invalid month'}, 401 if args.get('year') == now_year and args.get('month') > now_month: return {'message': 'Invalid month'}, 401 date = str(args.get('year')) + "-" + str(args.get('month')) if Collection.is_book_read(user_id, book_id): return {'message': 'This book is already been marked as read'} if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 try: Collection.mark_as_read(user_id, book_id, date) except pymysql.Error as e: return {'message': e.args[1]}, 500 return {'message': 'Mark successfully'}, 200
def get(self): # Get book_id and user_id from parser args = review_parser.parse_args() book_id = args.get('book_id') user_id = args.get('user_id') # If user does not exist if (not User.is_user_exists_by_id(user_id)) and (user_id != None): return {'message': 'Resource not found'}, 404 # if book does not exist if (not Book.is_book_exists_by_id(book_id)) and (book_id != None): return {'message': 'Resource not found'}, 404 # show reviews posted by certain user by only input user_id if (book_id == None and user_id != None): result = Review.get_user_reviews(user_id) return {'reviews': result}, 200 # show reviews of certain book by only input book_id elif (book_id != None and user_id == None): result = Review.get_book_review(book_id) return {'reviews': result}, 200 # show reviews posted by certain user of certain book by input both id elif (book_id != None and user_id != None): result = Review.get_book_user_review(user_id, book_id) return {'reviews': result}, 200 # book_id and user_id cannot be both empty elif (book_id == None and user_id == None): return {'message': 'book_id and user_id cannot be both empty'}, 400
def get(self): # Get user_id from token token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get book_id from parser args = read_id_parser.parse_args() book_id = args.get('book_id') if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 read_flag = Collection.is_book_read(user_id, book_id) review_flag = Review.is_review_exist_by_both_id(user_id, book_id) return {'read': read_flag, 'review': review_flag}, 200
def delete(self): # Get book_id and user_id from parser args = delete_parser.parse_args() book_id = args.get('book_id') user_id = args.get('user_id') if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 if not Review.is_review_exist_by_both_id(user_id, book_id): return {'message': 'Resource not found'}, 404 try: Review.delete_review(user_id, book_id) except pymysql.Error as e: return {'message': e.args[1]}, 500 return {'message': 'Delete review successfully'}, 200
def post(self): # Get user_id from token token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get book_id from parser args = read_id_parser.parse_args() book_id = args.get('book_id') if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 if not Collection.is_book_read(user_id, book_id): return {'message': 'This book is not been marked as read yet'} try: Collection.mark_as_unread(user_id, book_id) if Review.is_review_exist_by_both_id(user_id, book_id): Review.delete_review(user_id, book_id) except pymysql.Error as e: return {'message': e.args[1]}, 500 return {'message': 'Mark successfully'}, 200
def delete(self): # Get collection_id and book_id from parser token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get collection_id and book_id from parser args = collection_add_book_parser.parse_args() collection_id = args.get('collection_id') book_id = args.get('book_id') if not Collection.is_collection_exists_by_both_id( user_id, collection_id): return {'message': 'Resource not found'}, 404 if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 collection = Collection(collection_id) if collection.delete_book_in_collection(args.get('book_id')): return {'message': 'Delete book successfully'}, 200 else: return {'message': 'Resource not found'}, 404
def put(self): # Get collection_id and book_id from parser token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get args from parser args = collection_move_parser.parse_args() new_collection_id = args.get('new_collection_id') old_collection_id = args.get('old_collection_id') book_id = args.get('book_id') if not (Collection.is_collection_exists_by_both_id( user_id, new_collection_id) and Collection.is_collection_exists_by_both_id( user_id, old_collection_id)): return {'message': 'Resource not found'}, 404 if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 if not Book.is_book_exists_in_collection(old_collection_id, book_id): return {'message': 'Resource not found'}, 404 if Book.is_book_exists_in_collection(new_collection_id, book_id): return { 'message': 'This book already existed in the collection you want to move to' }, 401 if old_collection_id == Collection.get_readcollection_id( user_id ) or new_collection_id == Collection.get_readcollection_id(user_id): return { 'message': 'You cannot move in or out books in Read collection' }, 401 try: collection = Collection(old_collection_id) collection.move_book_to_another_collection(new_collection_id, book_id) return { 'message': 'Move book to another collection successfully' }, 200 except pymysql.Error as e: return {'message': e.args[1]}, 500
def post(self): # Get collection_id and book_id from parser token = request.headers.get('AUTH-TOKEN') token_info = jwt.decode(token, SECRET_KEY, algorithms='HS256') user_id = token_info['id'] # Get args from parser args = collection_add_book_parser.parse_args() collection_id = args.get('collection_id') book_id = args.get('book_id') # Check user is adding book to their own collections if not Collection.is_collection_exists_by_both_id( user_id, collection_id): return {'message': 'Resource not found'}, 404 # Check if book existed if not Book.is_book_exists_by_id(book_id): return {'message': 'Resource not found'}, 404 collection = Collection(collection_id) flag, message = collection.add_book_to_collection(args.get('book_id')) return {'message': message}, flag