Skip to content
Snippets Groups Projects
misc.py 2.68 KiB
Newer Older
  • Learn to ignore specific revisions
  • import app.database.controller as dbc
    
    from app.apis import check_jwt, item_response, list_response
    
    from app.core import http_codes
    
    from app.core.dto import MiscDTO
    
    from app.database.models import City, Competition, ComponentType, MediaType, QuestionType, Role, User, ViewType
    
    from flask_jwt_extended import jwt_required
    
    from flask_restx import Resource, reqparse
    
    
    api = MiscDTO.api
    
    
    question_type_schema = MiscDTO.question_type_schema
    media_type_schema = MiscDTO.media_type_schema
    
    component_type_schema = MiscDTO.component_type_schema
    view_type_schema = MiscDTO.view_type_schema
    
    
    role_schema = MiscDTO.role_schema
    city_schema = MiscDTO.city_schema
    
    name_parser = reqparse.RequestParser()
    name_parser.add_argument("name", type=str, required=True, location="json")
    
    
    
    @api.route("/types")
    class TypesList(Resource):
    
        def get(self):
    
            result = {}
            result["media_types"] = media_type_schema.dump(dbc.get.all(MediaType))
            result["component_types"] = component_type_schema.dump(dbc.get.all(ComponentType))
            result["question_types"] = question_type_schema.dump(dbc.get.all(QuestionType))
            result["view_types"] = view_type_schema.dump(dbc.get.all(ViewType))
            return result
    
    
    
    @api.route("/roles")
    class RoleList(Resource):
    
        @check_jwt(editor=True)
    
        def get(self):
    
            items = dbc.get.all(Role)
    
            return list_response(role_schema.dump(items))
    
    
    
    @api.route("/cities")
    
    class CitiesList(Resource):
    
        @check_jwt(editor=True)
    
        def get(self):
    
            items = dbc.get.all(City)
    
            return list_response(city_schema.dump(items))
    
        @check_jwt(editor=False)
    
        def post(self):
            args = name_parser.parse_args(strict=True)
    
            dbc.add.city(args["name"])
    
            items = dbc.get.all(City)
    
            return list_response(city_schema.dump(items))
    
    
    
    @api.route("/cities/<ID>")
    @api.param("ID")
    class Cities(Resource):
    
        @check_jwt(editor=False)
    
        def put(self, ID):
    
            item = dbc.get.one(City, ID)
    
            args = name_parser.parse_args(strict=True)
            item.name = args["name"]
    
            dbc.utils.commit_and_refresh(item)
            items = dbc.get.all(City)
    
            return list_response(city_schema.dump(items))
    
        @check_jwt(editor=False)
    
        def delete(self, ID):
    
            item = dbc.get.one(City, ID)
    
            dbc.delete.default(item)
    
            items = dbc.get.all(City)
    
            return list_response(city_schema.dump(items))
    
    
    
    @api.route("/statistics")
    class Statistics(Resource):
        @check_jwt(editor=True)
        def get(self):
            user_count = User.query.count()
            competition_count = Competition.query.count()
            region_count = City.query.count()
            return {"users": user_count, "competitions": competition_count, "regions": region_count}, http_codes.OK