Files
api2/api/resources/designers.py
T

63 lines
1.7 KiB
Python

from flask import Blueprint, request, jsonify
from api import db, tasks
from api.models import Designer
from api.helpers import pagination_to_dict, check_api_key
from api.validators import validate_jsonschema
mod = Blueprint('designers', __name__, url_prefix='/designers')
mod.before_request(check_api_key)
create_designer_schema = {
"type": "object",
"properties": {
"username": {"type": "string"},
"name": {"type": "string"},
"territory": {"type": "string"},
"currency": {"type": "string"},
},
"required": ["username", "name", "territory", "currency"]
}
@mod.route("/", methods=["GET"])
def list():
page = request.args.get('page', 1, type=int)
per_page = request.args.get('per_page', 10, type=int)
query = Designer.query.order_by(Designer.name.asc())
pagination = query.paginate(page=page, per_page=per_page)
j = {
'pagination': pagination_to_dict(pagination),
'data': [item.to_json() for item in pagination.items]
}
return jsonify(j)
@mod.route("/", methods=["POST"])
@validate_jsonschema(create_designer_schema)
def create():
data = request.json
designer = Designer(**data)
db.session.add(designer)
db.session.commit()
return jsonify(designer.to_json()), 201
@mod.route("/<int:id>", methods=["GET"])
def show(id):
designer = Designer.query.get_or_404(id)
return jsonify(designer.to_json())
@mod.route("/<id>", methods=["PUT"])
def update(id):
designer = Designer.query.get_or_404(id)
data = request.json
for k, v in data.items():
setattr(designer, k, v)
db.session.add(designer)
db.session.commit()
tasks.esales.update_designer(designer)
return jsonify(designer.to_json())