Пример #1
0
    def post(self):
        data = parse_user()
        check_constraints_user(data)
        with lock:
            user = UsersModel.find_by_username(data["username"])
            if user:
                return {
                    "message":
                    f"An user with same username {data['username']} already exists"
                }, 409
            user = UsersModel.find_by_email(data["email"])
            if user:
                return {
                    "message":
                    f"An user with same email {data['email']} already exists"
                }, 409

            password = data.pop("password")
            try:
                user = UsersModel(**data)
                user.hash_password(password)
                user.save_to_db()

                verify = VerifyModel(user.id)
                verify.save_to_db()
                verify.send_email(user.email, request.url_root)
            except Exception as e:
                return {"message": str(e)}, 500

        return user.json(), 201
Пример #2
0
    def post(self):
        data = parse_review()
        with lock:
            user = UsersModel.find_by_email(data['email'])
            check_user_and_book(user, data['isbn'])

            if data['score'] < 1 or data['score'] > 5:
                return {
                    "message":
                    f"{data['score']} is not a valid value for score. Score must be an integer ranging "
                    f"from 1 to 5."
                }, 418

            if ReviewsModel.find_by_isbn_user_id(data.isbn,
                                                 user.id) is not None:
                return {
                    "message":
                    "Given user already posted a review. Did you meant to update it?"
                }, 403

            data['user_id'] = user.id
            del data['email']
            try:
                review = ReviewsModel(**data)
                review.save_to_db()
            except Exception as e:
                return {"message": str(e)}, 500

        return review.json(), 201
Пример #3
0
    def get(self, email):
        data = parse_reviews()
        with lock:
            user = UsersModel.find_by_email(email)
        if not user:
            return {"message": f"User with ['email':{email}] not found"}, 404

        return {"user": user.json(**data)}, 200
Пример #4
0
 def get(self, email):
     with lock:
         user = UsersModel.find_by_email(email)
         if user is None:
             return {"message": "User with ['email': " + email + "] Not Found"}, 404
         if g.user != user:
             return {"message": "Invalid user, can only be yourself"}, 401
         transactions = TransactionsModel.query.filter_by(user_id=user.id).all()
         grouped_transactions = TransactionsModel.group_transactions_by_id(transactions)
         return {'transactions': grouped_transactions}, 200
Пример #5
0
def check_user(email):
    user = UsersModel.find_by_email(email)
    if user is None:
        abort(404,
              message={"message": f"User with ['email': {email}] Not Found"})

    if g.user != user:
        abort(401,
              message={
                  "message": "Invalid user to remove, can only be yourself"
              })
    return user
Пример #6
0
    def post(self):
        data = parse_user(False)

        with lock:
            account = UsersModel.find_by_email(data["email"])

            if not account:
                return {"message": "Invalid email"}, 404
            if not account.check_password(data["password"]):
                return {"message": "Invalid password"}, 400

            token = account.generate_auth_token()
        return {'token': token.decode('ascii')}, 200
Пример #7
0
    def put(self, email):
        data = parse_modify_user()
        check_constraints_user(data)
        with lock:
            user = UsersModel.find_by_email(email)
            if not user:
                return {
                    "message": f"User with ['email':{email}] not found"
                }, 404

            password = data.pop('password')
            if not user.check_password(password):
                return {
                    'message': "Contrasenya incorrecta, torna a provar"
                }, 401
            if UsersModel.find_by_email(data['email']) is not None:
                return {
                    "message":
                    f"An user with same email {data['email']} already exists"
                }, 409
            if UsersModel.find_by_username(data['username']) is not None:
                return {
                    "message":
                    f"An user with same username {data['username']} already exists"
                }, 409
            new_password = data.pop('new_password')
            try:
                if new_password is not None:
                    user.hash_password(new_password)
                user.update_from_db(data)
            except Exception as e:
                return {"message": str(e)}, 500

        return {
            "user": user.json(),
            "token": user.generate_auth_token().decode('ascii')
        }, 200
Пример #8
0
    def delete(self, email):
        with lock:
            user = UsersModel.find_by_email(email)

            if g.user != user:
                return {
                    "message": "Invalid user to remove, can only be yourself"
                }, 401

            if not user:
                return {
                    "message": f"User with ['email': {email}] Not Found"
                }, 404

            try:
                user.delete_from_db()
            except Exception as e:
                return {"message": str(e)}, 500

        return {"message": f"User with ['email': {email}] deleted"}, 200
Пример #9
0
 def post(self):
     data = parse_transaction()
     with lock:
         user = UsersModel.find_by_email(data['email'])
         if user is None:
             return {"message": f"User with ['email': {data['email']}] Not Found"}, 404
         if user != g.user:
             return {"message": "Invalid transaction, can only post yours"}, 401
         for isbn, quantity in zip(data['isbns'], data['quantities']):
             book = BooksModel.find_by_isbn(isbn)
             if book is None:
                 return {"message": "Book with ['isbn': " + str(isbn) + "] Not Found"}, 404
             if quantity > book.stock:
                 return {"message": "Not enough stock for book with 'isbn': " + str(isbn) + "only "
                                    + str(book.stock) + " available"}, 404
         try:
             transactions = TransactionsModel.save_transaction(user.id, data['isbns'], data['prices'],
                                                               data['quantities'])
         except Exception as ex:
             return {'message': str(ex)}, 500
     return {'transactions': transactions}, 201
Пример #10
0
    def post(self):
        email = parse_data()['email']

        with lock:
            user = UsersModel.find_by_email(email)
            if user is None:
                return {
                    "message":
                    f"Password Recovery with ['email':{email}] is not found"
                }, 404

            recovery = PasswordRecoveryModel.find_by_id(user.id)

            try:
                if recovery is not None:
                    recovery.delete_from_db()
                recovery = PasswordRecoveryModel(user.id)
                recovery.save_to_db()
            except Exception as e:
                return {"message": str(e)}, 500

        recovery.send_email(email, request.url_root)
        return {"user": user.json()}, 201