class UserFriendsView(HTTPMethodView): user_repository = UserRepository(MySQLConnection) user_service = UserService(user_repository) friend_repository = FriendRepository(MySQLConnection) friend_service = FriendService(friend_repository) @doc.summary('Get friends of user') @doc.produces({'friends': [Friend]}, description='Friends of user') async def get(self, request, username: str): user = await self.user_service.get(username) return json( {'friends': await self.friend_service.get_all(user['seq'])}) @doc.summary('Create friend relationship of ') @doc.consumes(FriendCreation, content_type='application/json', location='body', required=True) async def post(self, request, username: str): user = await self.user_service.get(username) if user['seq'] != request.json['user_id']: abort(403) await self.friend_service.create(request.json)
class UserFriendRequestDetailView(HTTPMethodView): user_repository = UserRepository(MySQLConnection) user_service = UserService(user_repository) friend_request_repository = FriendRequestRepository(MySQLConnection) friend_request_service = FriendRequestService(friend_request_repository) @doc.summary('Get friend request') @doc.produces({'request': FriendRequest}, description='Request for the friend_request_id', content_type='application/json') async def get(self, request, username: str, friend_request_id: int): user = await self.user_service.get(username) friend_request = await self.friend_request_service.get( friend_request_id) if user['seq'] != friend_request_id['recipient']: abort(403) return json({'request': friend_request}) @doc.summary('Delete the friend request') async def delete(self, request, username: str, friend_request_id: int): user = await self.user_service.get(username) friend_request = await self.friend_request_service.get( friend_request_id) if user['seq'] != friend_request['recipient']: abort(403) await self.friend_request_service.delete(friend_request_id)
class UserFriendRequestView(HTTPMethodView): user_repository = UserRepository(MySQLConnection) user_service = UserService(user_repository) friend_request_repository = FriendRequestRepository(MySQLConnection) friend_request_service = FriendRequestService(friend_request_repository) @doc.summary('Get friend requests to the user') @doc.produces({'requests': [FriendRequest]}, description='Requests to the user', content_type='application/json') async def get(self, request, username: str): user = await self.user_service.get(username) return json({ 'requests': await self.friend_request_service.get_all(user['seq']) }) @doc.summary('Create friend request') @doc.consumes(FriendRequestCreation, location='body', content_type='application/json') async def post(self, request, username: str): user = await self.user_service.get(username) if user['seq'] != request.json['sender']: abort(403) await self.friend_request_service.create(request.json)
class UserInformationView(HTTPMethodView): repository = UserRepository(MySQLConnection) service = UserService(repository) @doc.summary('Get user information') @doc.produces(User, description='User of the username', content_type='application/json') async def get(self, request, username: str): user = await self.service.get(username) del user['seq'] del user['user_id'] return json(user)
class UserSignupView(HTTPMethodView): repository = UserRepository(MySQLConnection) service = UserService(repository) @doc.summary('Register account') @doc.consumes( UserRegistration, location='body', content_type='application/json', required=True) @doc.produces({'success': bool}, description='the result of account registration', content_type='application/json') async def post(self, request: Request): await self.service.create(request.json) return json({ 'success': True })
class UserFieldGetterView(HTTPMethodView): repository = UserRepository(MySQLConnection) service = UserService(repository) field_name: str = getter_field field_type: type = getter_field_type @doc.summary(f'Get {field_name} of user') @doc.produces({getter_field: getter_field_type}, content_type='application/json', description=f'The value of {getter_field} field') async def get(self, request, username: str): field_name = self.field_name if field_name not in self.repository.patchable_fields: abort(404) user = await self.service.get(username) return json({field_name: user[field_name]})
class UserSigninView(HTTPMethodView): repository = UserRepository(MySQLConnection) service = UserService(repository) @doc.summary('Authenticate account') @doc.consumes(UserAuthentication, location='body', content_type='application/json', required=True) @doc.produces({'success': bool}, description='the result of account authentication', content_type='application/json') async def post(self, request: Request): user = await self.service.get(request.json['username']) return json({ 'success': check_password_hash(user['password'], (request.json['password'])) })
def start_service(): service = Service() add_post_service = AddPostService(service) remove_post_service = RemovePostService(service) feed_service = FeedService(service) category_service = CategoryService(service) vote_service = VoteService(service) comment_service = CommentService(service) user_service = UserService(service) user_liked_post_service = UserLikedPostService(service) email_validation_service = EmailValidationService(service) app = falcon.API(middleware=[HandleCORS()]) app.add_route('/add_post_to_category', add_post_service) app.add_route('/remove_post_from_category', remove_post_service) app.add_route('/feed', feed_service) app.add_route('/category', category_service) app.add_route('/vote', vote_service) app.add_route('/comment', comment_service) app.add_route('/user', user_service) app.add_route('/user_liked_post', user_liked_post_service) app.add_route('/email_validation', email_validation_service) return app
class UserPatchView(HTTPMethodView): repository = UserRepository(MySQLConnection) service = UserService(repository) field_name: str = patch_field field_type: type = patch_field_type @doc.summary(f'Get {field_name} of user') @doc.produces({patch_field: patch_field_type}, content_type='application/json', description=f'The value of {patch_field} field') async def get(self, request, username: str): field_name = self.field_name if field_name not in self.repository.patchable_fields: abort(404) user = await self.service.get(username) return json({field_name: user[field_name]}) @doc.summary(f'Patch {field_name} of user') @doc.consumes({'patch_data': { patch_field: patch_field_type }}, location="body", content_type='application/json') @doc.produces({'success': bool}, description='Result of the patch', content_type='application/json') async def put(self, request, username: str): field_name = self.field_name if field_name not in self.service.patchable_fields: abort(403) user = await self.service.get(username) await self.repository.patch( username, {field_name: user[field_name] + request.json[field_name]}) return json({'success': True})
def __init__(self): self.user_service = UserService()
def edit_user(): payload = request.json user_svc = UserService() user_svc.update(current_identity.id, payload) return {'code': HTTPStatus.OK}
def register(): payload = request.json user_svc = UserService() user_svc.create(payload) return {'code': HTTPStatus.CREATED}
class UserBaseResource(BaseResource): user_service = UserService() task_service = TaskService() user_serializer = UserSerializer()
def user_login(): s = UserService() s.login() return s.render()
def user_info(): s = UserService() s.get_info() return s.render()
def __init__(self, user_id: int) -> None: self.user_svc = UserService() self.user_id = user_id cur_validators = self.user_svc.get_all_validators(user_id) self.indices = [validator.indice for validator in cur_validators]