43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
"""Routes for sources (musicians/artists whose version a tune is based on)."""
|
|
from flask import Blueprint, jsonify, request
|
|
from app.extensions import db
|
|
from app.models import Source
|
|
from app.auth import require_api_key
|
|
|
|
sources_bp = Blueprint("sources", __name__, url_prefix="/sources")
|
|
|
|
|
|
@sources_bp.get("/")
|
|
def list_sources():
|
|
sources = db.session.query(Source).order_by(Source.name).all()
|
|
return jsonify([s.to_dict() for s in sources])
|
|
|
|
|
|
@sources_bp.post("/")
|
|
@require_api_key
|
|
def create_source():
|
|
data = request.get_json(force=True)
|
|
source = Source(name=data["name"])
|
|
db.session.add(source)
|
|
db.session.commit()
|
|
return jsonify(source.to_dict()), 201
|
|
|
|
|
|
@sources_bp.patch("/<int:source_id>")
|
|
@require_api_key
|
|
def update_source(source_id):
|
|
source = db.get_or_404(Source, source_id)
|
|
data = request.get_json(force=True)
|
|
if "name" in data:
|
|
source.name = data["name"]
|
|
db.session.commit()
|
|
return jsonify(source.to_dict())
|
|
|
|
|
|
@sources_bp.delete("/<int:source_id>")
|
|
@require_api_key
|
|
def delete_source(source_id):
|
|
source = db.get_or_404(Source, source_id)
|
|
db.session.delete(source)
|
|
db.session.commit()
|
|
return jsonify({"deleted": source_id})
|