def recipes(): res = ApiResponse() try: db = get_db() query = db.execute('SELECT * FROM recipe') res.data = [dict(row) for row in query.fetchall()] return res except BaseException as e: res.status = 500 if current_app.config['ENV'] == 'development': res.message = str(e) return res
def tag(id=None): body = request.get_json() res = ApiResponse() try: db = get_db() if request.method == 'GET': query = '''SELECT * FROM recipe JOIN recipe_tag ON recipe.id = recipe_tag.recipe_id WHERE recipe_tag.tag_id = ?''' res.data = [ dict(row) for row in db.execute(query, [id]).fetchall() ] return res elif request.method == 'POST': try: query = 'INSERT INTO tag (id, name) VALUES (?, ?)' db.execute(query, [uuid.uuid4().hex, body['name']]) db.commit() res.status = 201 except BaseException as e: msg = str(e) if msg.startswith('UNIQUE constraint failed'): res.status = 200 else: res.status = 500 return res elif request.method == 'PUT': pass elif request.method == 'DELETE': pass except BaseException as e: res.status = 500 if current_app.config['ENV'] == 'development': res.message = str(e) return res
def register(): res = ApiResponse() body = should_look_like({ 'username': str, 'password': str, }) if not RegisteredUser.find_by_username(body['username']): pw_hash = pbkdf2_sha256.hash(body['password']) new_user = RegisteredUser(username=body['username'], pw_hash=pw_hash) new_user.save_to_db() user_profile = UserProfile(user_id=new_user.id, username=new_user.username, role_id=1) user_profile.save_to_db() id_token = make_token(new_user.id, user_profile, expires_hours=1) res.set_cookie('id_token', id_token, httponly=True, secure=True) res.status = 201 return res res.message = 'Username: "******" has already been taken'.format( body['username']) res.status = 400 return res
def recipe(id=''): res = ApiResponse() try: db = get_db() if request.method == 'GET': sql = 'SELECT * FROM recipe WHERE id = ?' res.data = db.execute(sql, (id, )).fetchone() return res elif request.method == 'POST': body = request.get_json() id = uuid.uuid4().hex date_created = datetime.utcnow() title = body.get('title') unique_title = body.get('unique_title') description = body.get('description') markdown = body.get('markdown') html = body.get('html') query1 = db.execute('SELECT * FROM recipe WHERE unique_title = ?', [unique_title]) exists = query1.fetchone() if exists: res.message = 'There is already a recipe called "{}". Please choose another title'.format( title) res.status = 400 return res else: query2 = '''INSERT INTO recipe ( id, date_created, title, unique_title, description, markdown, html ) VALUES (?,?,?,?,?,?,?) ''' db.execute(query2, (id, date_created, title, unique_title, description, markdown, html)) db.commit() res.data = dict(id=id, date_created=date_created) res.status = 201 return res elif request.method == 'PUT': body = request.get_json() title = body.get('title') unique_title = body.get('unique_title') description = body.get('description') markdown = body.get('markdown') html = body.get('html') query1 = db.execute( 'SELECT * FROM recipe WHERE unique_title = ? AND id != ?', [unique_title, id]) exists = query1.fetchone() if exists: res.message = 'There is already a recipe called "{}". Please choose another title'.format( title) res.status = 400 return res else: query2 = ''' UPDATE recipe SET date_updated=:date_updated, title=:title, unique_title=:unique_title, description=:description, markdown=:markdown, html=:html WHERE id=:id''' db.execute( query2, { 'date_updated': datetime.utcnow(), 'title': title, 'unique_title': unique_title, 'description': description, 'markdown': markdown, 'html': html, 'id': id, }) db.commit() return res elif request.method == 'DELETE': db.execute('DELETE FROM recipe WHERE id=?', (id, )) db.commit() return res except BaseException as e: res.status = 500 if current_app.config['ENV'] == 'development': res.message = str(e) return res