66from flask_restplus import Api , Namespace , fields , reqparse , Resource
77from app .constants import STATUS_CODE
88from app .constants import GET , POST , PATCH , DELETE
9- from app .users .models import Post , PostSchema
109from app .api .database import DB
1110
12- API = Api (title = 'Board API' ,
13- version = '1.0' ,
14- description = "Board REST API"
15- # All API metadatas
16- )
17-
18- SCHEMA = UsersSchema ()
19- post_schema = PostSchema ()
20-
21- USER_FIELDS = API .model ('Users' , {
22- 'name' : fields .String ,
23- 'email' : fields .String ,
24- 'password' : fields .String
25- })
26- POST_FIELDS = API .model ('Post' , {
27- 'name' : fields .String ,
28- 'author_id' : fields .Integer ,
29- })
11+ API = Namespace ('Users' ,description = "User's REST API" )
3012
13+ USERS_SCHEMA = UsersSchema ()
3114
3215@API .route ('/users/<int:user_id>' )
3316@API .param ('user_id' , 'The user identifier' )
@@ -37,25 +20,31 @@ class UserItem(Resource):
3720 parser .add_argument ('email' , required = True , type = str , help = "user's email" , location = 'json' )
3821 parser .add_argument ('password' , required = True , type = str , help = "password" , location = 'json' )
3922
23+ user_field = API .model ('Users' , {
24+ 'name' : fields .String ,
25+ 'email' : fields .String ,
26+ 'password' : fields .String
27+ })
28+
4029 @API .doc (responses = GET )
4130 def get (self , user_id ):
4231 user = Users .query .get_or_404 (user_id )
43- user = SCHEMA .dump (user ).data
32+ user = USERS_SCHEMA .dump (user ).data
4433 return user
4534
46- @API .expect (USER_FIELDS )
35+ @API .expect (user_field )
4736 @API .doc (responses = PATCH )
4837 def patch (self , user_id ):
4938 args = self .parser .parse_args ()
5039 user = Users .query .get_or_404 (user_id )
51- response = user .update (args , SCHEMA )
40+ response = user .update (args , USERS_SCHEMA )
5241 return response
5342
5443 @API .doc (responses = DELETE )
5544 def delete (self , user_id ):
5645 #import pdb; pdb.set_trace()
5746 user = Users .query .get_or_404 (user_id )
58- response = user .delete (user , SCHEMA )
47+ response = user .delete (user , USERS_SCHEMA )
5948 return response
6049
6150
@@ -66,19 +55,25 @@ class UsersList(Resource):
6655 parser .add_argument ('email' , required = True , type = str , help = "user's email" , location = 'json' )
6756 parser .add_argument ('password' , required = True , type = str , help = "password" , location = 'json' )
6857
58+ user_field = API .model ('Users' , {
59+ 'name' : fields .String ,
60+ 'email' : fields .String ,
61+ 'password' : fields .String
62+ })
63+
6964 def get (self ):
7065 users_query = Users .query .all ()
71- results = SCHEMA .dump (users_query , many = True ).data
66+ results = USERS_SCHEMA .dump (users_query , many = True ).data
7267 return results
7368
74- @API .expect (USER_FIELDS )
69+ @API .expect (user_field )
7570 def post (self ):
7671 args = self .parser .parse_args ()
7772 user = Users (args ['name' ], args ['email' ], args ['password' ])
7873 try :
7974 DB .session .add (user )
8075 DB .session .commit ()
81- body = jsonify ({"users" : SCHEMA .dump (user ).data })
76+ body = jsonify ({"users" : USERS_SCHEMA .dump (user ).data })
8277 code = HTTPStatus .OK
8378 except SQLAlchemyError as err :
8479 DB .session .rollback ()
@@ -87,52 +82,30 @@ def post(self):
8782 code = HTTPStatus .INTERNAL_SERVER_ERROR
8883 return make_response (body , code .value )
8984
90- @API .route ('/posts ' )
91- class Posts (Resource ):
85+ @API .route ('/users/auth ' )
86+ class GetUser (Resource ):
9287 parser = reqparse .RequestParser ()
93- parser .add_argument ('name' , required = True , type = str , help = "post 's name" , location = 'json' )
94- parser .add_argument ('author_id ' , required = True , type = int , help = "post 's author " , location = 'json' )
88+ parser .add_argument ('name' , required = True , type = str , help = "user 's name" , location = 'json' )
89+ parser .add_argument ('password ' , required = True , type = str , help = "user 's password " , location = 'json' )
9590
96- @API .expect (POST_FIELDS )
97- def post (self ):
98- args_ = self .parser .parse_args ()
99- post = Post (name = args_ ['name' ], author_id = args_ ['author_id' ])
100- try :
101- DB .session .add (post )
102- DB .session .commit ()
103- body = jsonify ({"posts" : post_schema .dump (post ).data })
104- code = HTTPStatus .OK
105- except SQLAlchemyError as err :
106- DB .session .rollback ()
107- message = str (err )
108- body = jsonify ({"message" : message })
109- code = HTTPStatus .INTERNAL_SERVER_ERROR
110- return make_response (body , code .value )
91+ user_field = API .model ('Auth' , {
92+ 'name' : fields .String ,
93+ 'password' : fields .String
94+ })
11195
112- @API .route ( '/post/<int:seqno>' )
113- class PostItem ( Resource ):
114- def get ( self , seqno ):
96+ @API .expect ( user_field )
97+ def post ( self ):
98+ args = self . parser . parse_args ()
11599 try :
116- post_item = DB . session . query ( Post ). outerjoin (Users , Users . id == Post . author_id ). filter ( Post . id == seqno ).first ()
117- body = jsonify ({"post" : post_schema .dump (post_item ).data })
118- if post_item :
100+ user = Users . query . filter (Users . name == args [ 'name' ] and Users . password == args [ 'password' ] ).first ()
101+ body = jsonify ({"user" : USERS_SCHEMA .dump (user ).data })
102+ if user :
119103 code = HTTPStatus .OK
120104 else :
121105 code = HTTPStatus .NOT_FOUND
122106 except SQLAlchemyError as err :
123107 message = str (err )
124- body = jsonify ({"message" : message })
108+ body = jsonify ({"message" : message })
125109 code = HTTPStatus .INTERNAL_SERVER_ERROR
126110 return make_response (body , code .value )
127111
128- @API .route ('/userLogin' )
129- class GetUser (Resource ):
130- parser = reqparse .RequestParser ()
131- parser .add_argument ('name' , required = True , type = str , help = "user's name" , location = 'json' )
132- parser .add_argument ('password' , required = True , type = str , help = "user's password" , location = 'json' )
133-
134- @API .expect (USER_FIELDS )
135- def post (self ):
136- args = self .parser .parse_args ()
137- user = Users .query .filter (Users .name == args ['name' ]).first ()
138- import pdb ; pdb .set_trace ()
0 commit comments