63 lines
1.7 KiB
Python
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())
|