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)
Beispiel #2
0
    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,
        )
Beispiel #3
0
    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)
Beispiel #5
0
    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})