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("/", methods=["GET"]) def show(id): designer = Designer.query.get_or_404(id) return jsonify(designer.to_json()) @mod.route("/", 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())