def delete(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 collection_id from parser args = collection_delete_parser.parse_args() collection_id = args.get('collection_id') # If collection existed if not Collection.is_collection_exists_by_both_id( user_id, collection_id): return {'message': 'Resource not found'}, 404 # Read History and Main collection cannot be deleted read_collection_id = Collection.get_readcollection_id(user_id) main_collection_id = read_collection_id - 1 if collection_id == read_collection_id or collection_id == main_collection_id: return { 'message': 'Read History and Main collection cannot be deleted' }, 400 try: Collection.delete_collection(collection_id) return {'message': 'Delete collection successfully'}, 200 except pymysql.Error as e: return {'message': e.args[1]}, 500
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 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 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
def get(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 info from parser args = collection_copy_parser.parse_args() collection_id = args.get('collection_id') new_collection_name = args.get('new_collection_name') # Target collection existed check if not Collection.is_collection_exists_by_id(collection_id): return {'message': 'Resource not found'}, 404 if Collection.is_collection_exists_by_both_id(user_id, collection_id): return {'message': 'You cannot copy your own collection'}, 201 collection = Collection(collection_id) collection_name = collection.get_collection_name() # Target collection has same name with certain collection owned by user if (Collection.is_collection_exists_by_name( user_id, collection_name)) and (new_collection_name is None): return { 'message': 'You already has a collection with same name.' }, 201 if not new_collection_name is None: if Collection.is_collection_exists_by_name(user_id, new_collection_name): return { 'message': 'You already has a collection with same name' }, 201 else: new_collection_name = collection_name Collection.post_new_collection(user_id, new_collection_name) Collection.copy_collection( collection_id, Collection.get_collection_id_by_name(user_id, new_collection_name)) return {'message': 'Copy collection successfully'}, 200
def put(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 new_name and collection_id from parser args = collection_update_name_parser.parse_args() new_name = args.get('new_name') collection_id = args.get('collection_id') # Cannot update read history and main collection's name read_collection_id = Collection.get_readcollection_id(user_id) main_collection_id = read_collection_id - 1 if collection_id == read_collection_id or collection_id == main_collection_id: return { 'message': "Read History and Main collection's name cannot be changed" }, 201 # Name input cannot be empty if new_name == "": return {'message': "Collection's name cannot be empty"}, 401 # Is collection existed if not Collection.is_collection_exists_by_both_id( user_id, collection_id): return {'message': "Resource not found"}, 404 try: collection = Collection(collection_id) flag, message = collection.update_collection_name( user_id, new_name) if not flag: return {'message': message}, 401 else: return {'message': message}, 200 except pymysql.Error as e: return {'message': e.args[1]}, 500