def get(self, page_id=1): schema = UserSchema(many=True) page_size = 10 page_size = validate_page_size(request, page_size) try: users_list = User.objects().paginate(page_id, page_size) except Exception as e: return resp_exception('Users', description=e.__str__()) extra = { 'page': users_list.page, 'pages': users_list.pages, 'total': users_list.total, 'params': { 'page_size': page_size } } result = schema.dump(users_list.items) return resp_ok('Users', MSG_RESOURCE_FETCHED_PAGINATED.format('Usuários'), data=result.data, **extra)
def post(self, *args, **kwargs): # Inicializo todas as variaveis utilizadas req_data = request.get_json() or None data, errors, result = None, None, None password, confirm_password = None, None schema = UserRegistrationSchema() # Se meus dados postados forem Nulos retorno uma respota inválida if req_data is None: return resp_data_invalid('Users', [], msg=MSG_NO_DATA.format('dados')) password = req_data.get('password', None) confirm_password = req_data.pop('confirm_password', None) if not check_password_in_signup(password, confirm_password): errors = {'password': MSG_PASSWORD_WRONG} return resp_data_invalid('Users', errors) # Desserialização os dados postados ou melhor meu payload data, errors = schema.load(req_data) # Se houver erros retorno uma resposta inválida if errors: return resp_data_invalid('Users', errors) # Crio um hash da minha senha hashed = hashpw(password.encode('utf-8'), gensalt(12)) # Salvo meu modelo de usuário com a senha criptografada e email em lower case # Qualquer exceção ao salvar o modelo retorno uma resposta em JSON # ao invés de levantar uma exception no servidor try: data['password'] = hashed data['email'] = data['email'].lower() model = User(**data) model.active = True model.save() except NotUniqueError: return resp_already_exists('Users', 'fornecedor') except ValidationError as e: return resp_exception('Users', msg=MSG_INVALID_DATA, description=e) except Exception as e: return resp_exception('Users', description=e) # Realizo um dump dos dados de acordo com o modelo salvo schema = UserSchema() result = schema.dump(model) # Retorno 200 o meu endpoint return resp_ok( 'Users', MSG_RESOURCE_CREATED.format('Usuário'), data=result.data, )
def get(self, user_id): result = None user = None schema = UserSchema(many=False) user = get_user_by_id(user_id) result = schema.dump(user) return resp_ok('Users', 'Usuário encontrado', date=result.data)
def put(self, user_id): result = None user = None req_data = request.get_json() or None user_schema = UserSchema() edi_user_schema = EditUserSchema() if req_data is None: return resp_data_invalid('Users', [], msg=MSG_INVALID_DATA) user = get_user_by_id(user_id) if not isinstance(user, User): return user data, errors = edi_user_schema.load(req_data) if errors: return resp_data_invalid('Users', errors) email = data.get('Email', None) if email and check_user_email_exists(email): return resp_data_invalid( 'Users', [{'email', [MSG_ALREADY_EXISTS.format('usuário')]}]) try: for key in data.keys(): user[key] = data[key] user.save() except NotUniqueError: return resp_already_exists('Users', 'usuário') result = user_schema.dump(user) return resp_ok('Users', MSG_RESOURCE_UPDATED, data=result.data)
def delete(self, user_id): result = None user = get_user_by_id(user_id) if not isinstance(user, User): return user try: user.active = False user.save() except NotUniqueError: return resp_already_exists('Users', 'usuário') except ValidationError as e: return resp_exception('Users', msg=MSG_INVALID_DATA, description=e.__str__()) except Exception as e: return resp_exception('Users', description=e.__str__()) return resp_ok('Users', MSG_RESOURCE_DELETED.format('Usuário'), {'user_id': user_id})