diff --git a/server/app/apis/__init__.py b/server/app/apis/__init__.py index 58a42b0371cb131ab99890e6b38b2758f917d4b7..7ba6eb54ec6db8a86c282ef00a131748f06033c3 100644 --- a/server/app/apis/__init__.py +++ b/server/app/apis/__init__.py @@ -115,14 +115,10 @@ def protect_route(allowed_roles=None, allowed_views=None): # flask_api = Api() -# flask_api.add_namespace(slide_ns, path="/api/competitions/<competition_id>/slides") - # flask_api.add_namespace( # alternative_ns, path="/api/competitions/<competition_id>/slides/<slide_id>/questions/<question_id>/alternatives" # ) -# flask_api.add_namespace(code_ns, path="/api/competitions/<competition_id>/codes") - # flask_api.add_namespace(component_ns, path="/api/competitions/<competition_id>/slides/<slide_id>/components") # flask_api.add_namespace(answer_ns, path="/api/competitions/<competition_id>/teams/<team_id>/answers") @@ -137,6 +133,7 @@ flask_api = Api() def init_api(): from .auth import blp as auth_blp + from .codes import blp as code_blp from .competitions import blp as competition_blp from .media import blp as media_blp from .misc import blp as misc_blp @@ -153,3 +150,4 @@ def init_api(): flask_api.register_blueprint(slide_blp) flask_api.register_blueprint(question_blp) flask_api.register_blueprint(team_blp) + flask_api.register_blueprint(code_blp) diff --git a/server/app/apis/codes.py b/server/app/apis/codes.py index 3acabf82ab603b8815f92388737bdc3181aa1152..aa8b806511d8679704296a679ce238aecfa54d83 100644 --- a/server/app/apis/codes.py +++ b/server/app/apis/codes.py @@ -4,33 +4,33 @@ Default route: /api/competitions/<competition_id>/codes """ import app.database.controller as dbc -from app.apis import item_response, list_response, protect_route +from app.apis import protect_route +from app.core.schemas import CodeSchema from app.database.models import Code +from flask.views import MethodView +from flask_smorest import Blueprint -api = CodeDTO.api -schema = CodeDTO.schema -list_schema = CodeDTO.list_schema +from . import http_codes +blp = Blueprint( + "code", "code", url_prefix="/api/competitions/<competition_id>/codes", description="Operations on codes" +) -@api.route("") -@api.param("competition_id") -class CodesList(Resource): + +@blp.route("") +class CodesList(MethodView): @protect_route(allowed_roles=["*"], allowed_views=["Operator"]) + @blp.response(http_codes.OK, CodeSchema(many=True)) def get(self, competition_id): """ Gets the all competition codes. """ - - items = dbc.get.code_list(competition_id) - return list_response(list_schema.dump(items), len(items)) + return dbc.get.code_list(competition_id) -@api.route("/<code_id>") -@api.param("competition_id, code_id") -class CodesById(Resource): +@blp.route("/<code_id>") +class CodesById(MethodView): @protect_route(allowed_roles=["*"]) + @blp.response(http_codes.OK, CodeSchema) + @blp.alt_response(http_codes.NOT_FOUND, None, description="Code not found") def put(self, competition_id, code_id): """ Generates a new competition code. """ - - item = dbc.get.one(Code, code_id) - item.code = dbc.utils.generate_unique_code() - dbc.utils.commit_and_refresh(item) - return item_response(schema.dump(item)) + return dbc.edit.default(dbc.get.one(Code, code_id), code=dbc.utils.generate_unique_code())