P5-6517 add market resource (#32)

This commit is contained in:
Martin Carlsson
2021-01-12 15:09:48 +01:00
committed by GitHub
parent 1f016ee0c8
commit bd1b0e642b
5 changed files with 86 additions and 1 deletions
+16 -1
View File
@@ -25,8 +25,22 @@ def create_app(config_name="config"):
response.status_code = 400 response.status_code = 400
return response return response
@app.errorhandler(ValueError)
def on_validation_error(error):
response = jsonify({"status": 400, "message": str(error)})
response.status_code = 400
return response
# register resources # register resources
from api.resources import server, designers, categories, prices, orders, order_rows from api.resources import (
server,
designers,
categories,
prices,
orders,
order_rows,
markets,
)
app.register_blueprint(server.mod) app.register_blueprint(server.mod)
app.register_blueprint(designers.mod) app.register_blueprint(designers.mod)
@@ -34,5 +48,6 @@ def create_app(config_name="config"):
app.register_blueprint(prices.mod) app.register_blueprint(prices.mod)
app.register_blueprint(orders.mod) app.register_blueprint(orders.mod)
app.register_blueprint(order_rows.mod) app.register_blueprint(order_rows.mod)
app.register_blueprint(markets.mod)
return app return app
+11
View File
@@ -2,6 +2,7 @@
from api.extensions import db from api.extensions import db
from .product import Currencies from .product import Currencies
from sqlalchemy.orm import validates
class Market(db.Model): class Market(db.Model):
@@ -10,6 +11,16 @@ class Market(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255)) name = db.Column(db.String(255))
@validates("name")
def validate_name(self, key, value):
raise ValueError("Name can not be modified")
def to_json(self):
return {
"id": self.id,
"name": self.name,
}
class PriceAdjustments(db.Model): class PriceAdjustments(db.Model):
+39
View File
@@ -0,0 +1,39 @@
from flask import Blueprint, request, jsonify
from api import db
from api.models import Market
from api.helpers import pagination_to_dict, check_api_key
mod = Blueprint("markets", __name__, url_prefix="/markets")
mod.before_request(check_api_key)
@mod.route("/", methods=["GET"])
def list():
page = request.args.get("page", 1, type=int)
per_page = request.args.get("per_page", 20, type=int)
query = Market.query.order_by(Market.id.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("/<int:id>", methods=["GET"])
def show(id):
market = Market.query.get_or_404(id)
return jsonify(market.to_json())
@mod.route("/<int:id>", methods=["PUT"])
def update(id):
market = Market.query.get_or_404(id)
data = request.json
for k, v in data.items():
setattr(market, k, v)
db.session.add(market)
db.session.commit()
return jsonify(market.to_json())
+1
View File
@@ -8,6 +8,7 @@ Welcome to the documentation for Photowall API 2.
* [Designers](designers.md) * [Designers](designers.md)
* [Prices](prices.md) * [Prices](prices.md)
* [Orders](orders.md) * [Orders](orders.md)
* [Markets](markets.md)
## Authentication ## Authentication
+19
View File
@@ -0,0 +1,19 @@
# Markets
## List markets
```
curl -X GET https://api.photowall.com/markets/
```
## Show market
```
curl -X GET https://api.photowall.com/markets/1
```
## Update market
```
curl -X PUT https://api:5000/markets/1 -H "Content-Type: application/json" -d '{"price_adjustment": "1.25"}
```