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
10
class UserResource(MethodResource):
12
summary="Get user by id",
13
description="Returns user",
19
"description": "User not found"
23
@marshal_with(UserSchema, code=200)
24
def get(self, user_id):
25
user = UserModel.query.get(user_id)
27
abort(404, error=f"User with id={user_id} not found")
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)
45
abort(404, error=f"User with id={user_id} not found")
46
user.username = kwargs["username"]
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)
61
abort(404, error=f"User with id={user_id} not found")
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)
74
users = UserModel.query.all()
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)
90
abort(400, error=f"User with username:{user.username} is already exist")
91
logging.info("User create")
96
@api.resource('/users/<int:user_id>/image/<int:image_id>')
97
class UsersImageResource(MethodResource):
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