Exemple #1
0
def user_registration():
    post_data = request.json

    if (not request.is_json or not post_data):
        return jsonify(Utils().createFailMessage("Invalid Payload")), 400

    name = post_data["name"]
    email = post_data["email"]
    cpf = post_data["cpf"]
    password = post_data["password"]
    url_avatar = post_data["url_avatar"]
    user = UserModel(name, email, cpf, password, url_avatar)

    if UserModel.find_by_email(email):
        return jsonify(Utils().createFailMessage(
            '{} already exists'.format(email))), 400

    try:
        user.save_to_db()
        auth_token = user.encode_auth_token(user.user_id)
        response_object = Utils().createSuccessMessage('User was created')
        user = UserModel.find_by_email(email)
        provider = ProviderModel.find_provider(user.user_id)
        response_object["auth_token"] = auth_token.decode()
        response_object["name"] = name
        response_object["email"] = email
        response_object["id"] = user.user_id
        response_object["is_provider"] = False
        response_object["provider_id"] = None
        response_object["url_avatar"] = None
        return jsonify(response_object), 201
    except:
        db.session.rollback()
        return jsonify(Utils().createFailMessage('Try again later')), 503
Exemple #2
0
def order_providers_by_review(provider_category_id):
    utils = Utils()
    # Adding the provider's name field to provider's info returned
    providers_info = utils.append_user_infos_to_provider(provider_category_id)
    providers_with_review = utils.append_review_to_provider(providers_info)
    context = Context(ReviewStrategy())
    providers = context.execute_sorting(provider_category_id)
    return json.dumps(providers)
Exemple #3
0
def get_providers_by_category_min_price(provider_category_id):
    utils = Utils()
    # Adding the provider's name field to provider's info returned
    providers_info = utils.append_user_infos_to_provider(provider_category_id)

    if not providers_info:
        response = {'status': 'failed', 'error': "ID Not Found"}
        return jsonify(response), 404

    context = Context(PriceStrategy())
    providers_info = context.execute_sorting(provider_category_id)
    return jsonify(providers_info), 200
Exemple #4
0
def remove_category_provider_relationship(provider_id, provider_category_id):
    works = WorksModel.query.filter_by(
        provider_category_id=int(provider_category_id),
        provider_id=int(provider_id)).first()

    if not works:
        return jsonify(
            Utils().createFailMessage('Relationship Not Found')), 404

    db.session.delete(works)
    db.session.commit()

    return jsonify(Utils().createSuccessMessage('Relationship deleted!')), 200
Exemple #5
0
def add_address():
    post_data = request.json

    if (not request.is_json or not post_data):
        return jsonify(Utils().createFailMessage("Invalid Payload")), 400

    user_id = post_data["user_id"]
    street = post_data["street"]
    neighborhood = post_data["neighborhood"]
    number = post_data["number"]
    city = post_data["city"]
    cep = post_data["cep"]
    state = post_data["state"]

    try:
        complement = post_data["complement"]
    except:
        complement = None

    try:
        reference_point = post_data["reference_point"]
    except:
        reference_point = None

    address = AddressModel(street, neighborhood, number, complement, city, cep,
                           state, reference_point)

    try:
        address.save_to_db()
    except:
        db.session.rollback()
        return jsonify(Utils().createFailMessage('Try again later')), 503

    lives = LivesModel(user_id, address.address_id)

    try:
        lives.save_to_db()
        response_object = Utils().createSuccessMessage('Address registered')
        return jsonify(response_object), 201
    except:
        db.session.rollback()
        return jsonify(Utils().createFailMessage('Try again later')), 503
Exemple #6
0
def provider_registration():
    post_data = request.json

    if (not request.is_json or not post_data):
        return jsonify(Utils().createFailMessage("Invalid Payload")), 400
    db.session.rollback()
    minimum_price = post_data["minimum_price"]
    maximum_price = post_data["maximum_price"]
    bio = post_data["bio"]
    url_rg_photo = post_data["url_rg_photo"]
    url_avatar = post_data["url_avatar"]
    number = post_data["number"]
    user_id = post_data["user_id"]
    provider_categories = post_data["categories"]
    categories = json.loads(provider_categories)

    user = UserModel.find(user_id)
    try:
        user.url_avatar = url_avatar
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        return jsonify(Utils().createFailMessage('Error saving picture')), 500

    provider = ProviderModel(minimum_price, maximum_price, bio, url_rg_photo,
                             number, user_id)

    try:
        provider.save_to_db()
        response_object = Utils().createSuccessMessage('Provider was created')
        provider = ProviderModel.find_provider(user_id)
        response_object[
            "provider_id"] = provider.provider_id if provider is not None else None
        for category in categories:
            work = WorksModel(category["id"], provider.provider_id)
            work.save_to_db()

        return jsonify(response_object), 200
    except Exception as e:
        db.session.rollback()
        return jsonify(Utils().createFailMessage('Try again later')), 503
Exemple #7
0
def user_login():
    post_data = request.json

    if (not request.is_json or not post_data):
        return jsonify(Utils().createFailMessage("Invalid Payload")), 400

    email = post_data["email"]
    password = post_data["password"]

    try:
        current_user = UserModel.find_by_email(email)

        if not current_user:
            return jsonify(Utils().createFailMessage(
                'User {} doesn\'t exist'.format(email))), 404

        if current_user and bcrypt.check_password_hash(current_user.password,
                                                       password):
            provider = ProviderModel.find_provider(current_user.user_id)
            auth_token = current_user.encode_auth_token(current_user.user_id)
            response_object = Utils().createSuccessMessage(
                'Successfully logged in.')
            response_object["auth_token"] = auth_token.decode()
            response_object["name"] = current_user.name
            response_object["email"] = current_user.email
            response_object["id"] = current_user.user_id
            response_object["is_provider"] = provider is not None
            response_object[
                "provider_id"] = provider.provider_id if provider is not None else None
            response_object["url_avatar"] = current_user.url_avatar

            return jsonify(response_object), 200
        else:
            return jsonify(Utils().createFailMessage('Wrong Credentials')), 401
    except Exception as ex:
        db.session.rollback()
        return jsonify(Utils().createFailMessage(ex)), 500
Exemple #8
0
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import List
from project.api.utils.creation_utils import Utils
from project.api.models import Pax

utils = Utils()


class Context():
    def __init__(self, strategy: Strategy) -> None:
        self._strategy = strategy

    @property
    def strategy(self) -> Strategy:
        return self._strategy

    @strategy.setter
    def strategy(self, strategy: Strategy) -> None:
        self._strategy = strategy

    def execute_filtering(self, user_type, id) -> list:
        result = self._strategy.filter_status(user_type, id)
        return result


class Strategy(ABC):
    @abstractmethod
    def filter_status(self, user_type, id):
        pass
Exemple #9
0
 def sort_providers(self, data: list) -> list:
     data = Utils().append_review_to_provider(data)
     providers_info = sorted(
         data, key=lambda element: element['reviews_average'], reverse=True)
     return providers_info
Exemple #10
0
 def execute_sorting(self, provider_category_id) -> dict:
     providers_info = Utils().append_user_infos_to_provider(provider_category_id)
     result = self._strategy.sort_providers(providers_info)
     return result