NoteApi

Форк
0
108 строк · 3.9 Кб
1
from api import Resource, abort, reqparse, auth, logging, api
2
from api.models.user import UserModel
3
from api.schemas.user import user_schema, users_schema, UserSchema, UserRequestSchema
4
from flask_apispec.views import MethodResource
5
from flask_apispec import marshal_with, use_kwargs, doc
6
from webargs import fields
7

8

9
@doc(tags=['Users'])
10
class UserResource(MethodResource):
11
    @doc(
12
        summary="Get user by id",
13
        description="Returns user",
14
        responses={
15
            "200": {
16
                "description": "User"
17
            },
18
            "404": {
19
                "description": "User not found"
20
            }
21
        },
22
    )
23
    @marshal_with(UserSchema, code=200)
24
    def get(self, user_id):
25
        user = UserModel.query.get(user_id)
26
        if not user:
27
            abort(404, error=f"User with id={user_id} not found")
28
        return user, 200
29

30
    @auth.login_required(role="admin")
31
    @doc(security=[{"basicAuth": []}])
32
    @doc(description='Edit user by id')
33
    @doc(summary="Edit user by id")
34
    @doc(responses={200: {"description": "User edited"}})
35
    @doc(responses={403: {"description": "You are not authorized to edit users"}})
36
    @doc(responses={404: {"description": "User not found"}})
37
    @marshal_with(UserSchema, code=200)
38
    @use_kwargs({"username": fields.Str()})
39
    def put(self, user_id, **kwargs):
40
        # parser = reqparse.RequestParser()
41
        # parser.add_argument("username", required=True)
42
        # user_data = parser.parse_args()
43
        user = UserModel.query.get(user_id)
44
        if not user:
45
            abort(404, error=f"User with id={user_id} not found")
46
        user.username = kwargs["username"]
47
        user.save()
48
        return user, 200
49

50
    @auth.login_required(role="admin")
51
    @doc(security=[{"basicAuth": []}])
52
    @doc(description='Delete user by id')
53
    @doc(summary="Delete user by id")
54
    @doc(responses={200: {"description": "User deleted"}})
55
    @doc(responses={403: {"description": "You are not authorized to delete users"}})
56
    @doc(responses={404: {"description": "User not found"}})
57
    @marshal_with(UserSchema, code=201)
58
    def delete(self, user_id):
59
        user = UserModel.query.get(user_id)
60
        if not user:
61
            abort(404, error=f"User with id={user_id} not found")
62
        user.delete()
63
        return user, 201
64

65

66
@doc(tags=['Users'])
67
class UsersListResource(MethodResource):
68
    @doc(description='Get users list')
69
    @doc(summary="Get users list")
70
    @doc(responses={200: {"description": "Users list"}})
71
    @doc(responses={400: {"description": "User with same username is already exist"}})
72
    @marshal_with(UserSchema(many=True), code=200)
73
    def get(self):
74
        users = UserModel.query.all()
75
        return users, 200
76

77
    @use_kwargs(UserRequestSchema, location='json')
78
    @doc(description='Post new user')
79
    @doc(summary="Post new user")
80
    @doc(responses={200: {"description": "User posted"}})
81
    @marshal_with(UserSchema, code=201)
82
    def post(self, **kwargs):
83
        # parser = reqparse.RequestParser()
84
        # parser.add_argument("username", required=True)
85
        # parser.add_argument("password", required=True)
86
        # user_data = parser.parse_args()
87
        user = UserModel(**kwargs)
88
        user.save()
89
        if not user.id:
90
            abort(400, error=f"User with username:{user.username} is already exist")
91
        logging.info("User create")
92
        return user, 201
93

94

95
@doc(tags=['Users'])
96
@api.resource('/users/<int:user_id>/image/<int:image_id>')
97
class UsersImageResource(MethodResource):
98
    @auth.login_required
99
    @doc(security=[{"basicAuth": []}])
100
    @doc(description='Add image to user')
101
    @doc(summary="Add image to user")
102
    @doc(responses={200: {"description": "Image added"}})
103
    @marshal_with(UserSchema, code=200)
104
    def put(self, user_id, image_id):
105
        user = UserModel.query.get(user_id)
106
        user.image_id = image_id
107
        user.save()
108
        return user, 200
109

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.