Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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