def add_song_to_card(user_connected_model, user_connected_schema):
    """ add beat_id to cart """

    data, error = validate_data(cart_schema, request)
    if error:
        return custom_response(data, 400)

    if data['license'] not in allowed_beats_license:
        return custom_response("invalid license", 400)

    if user_connected_model.carts.filter_by(beat_id=data['beat_id'],
                                            license=data['license']).first():
        return custom_response("cart existing", 400)

    beat = media_schema.dump(Media.get_song_by_id(data['beat_id']))

    if not beat:
        return custom_response("beat not exist", 400)

    elif beat['user_id'] == user_connected_model.id:
        return custom_response("Unauthorized", 400)

    new_cart_data = dict(beat_id=data['beat_id'],
                         price=beat[data['license'].replace('lease', 'price')],
                         license=data['license'],
                         user_id=user_connected_model.id)
    new_cart = Carts(new_cart_data)
    new_cart.save()
    return custom_response(cart_schema.dump(new_cart), 200)
        def beats_secure(*args, **kwargs):
            """ Get a beats type and other verification """

            _u_schema = kwargs['user_connected_schema']
            if _u_schema['user_type'] == USER_ARTIST_BEATMAKER or _u_schema['right'] != 0:
                data, error = validate_data(media_schema, request, False)
                if error:
                    return custom_response(data, 400)

                if not (data.get("basic_price") and data.get("silver_price") and data.get("gold_price")):
                    return custom_response("i need basic, silver and gold price", 400)

                if data["genre"] not in allowed_beat_maker_options:
                    return custom_response("genre not supported", 400)

                extracted_file = extract_file(request)
                msg = _specific(**extracted_file)
                if isinstance(msg, str):
                    return custom_response(msg, 400)

                kwargs.update(extracted_file)
                kwargs.update({'data': data})
                return func(**kwargs)

            return custom_response("Unauthorized", 400)
def update_note_by_service_id_or_user_id(user_connected_model, user_connected_schema):
    """

    @return:
    """
    data, error = validate_data(user_stars_schema, request)
    if error:
        return custom_response(data, 400)

    if data.get('service_id'):
        stars_to_add_note = Stars.get_stars_by_service_id(data.get('service_id'))
        if not stars_to_add_note:
            custom_response("Service rate not found", 400)
        stars_ = user_stars_schema.dump(stars_to_add_note)
        update_note(stars_to_add_note, stars_, data, user_connected_model)
        return custom_response("success", 200)

    if data.get('user_id'):
        artist_to_note = User.get_one_user(data['user_id'])
        user_who_set_note = User.get_one_user(auth.user.get('id'))
        if not artist_to_note.user_type == user_who_set_note.user_type == USER_AUDITOR_PRO:
            stars_to_add_note = Stars.get_stars_by_user_id(data.get('user_id'))
            if not stars_to_add_note:
                custom_response("Service rate not found", 400)
            stars_ = user_stars_schema.dump(stars_to_add_note)
            update_note(stars_to_add_note, stars_, data, user_connected_model)
            return custom_response("success", 200)
        return custom_response("Unauthorized", 400)

    return custom_response("I need user_id or service_id", 400)
def search_services_enable_in_this_date():
    """ search matching with text_ in table medias """

    country_locate = request.headers.get('Country', None)
    if not country_locate:
        return custom_response('country may not be null in headers', 400)

    data, error = validate_data(search_service_schema, request)
    if error:
        return custom_response(data, 400)

    all_data = []
    if not data.get("country"):
        data["country"] = country_locate
    options = [{"match": {"country": data["country"]}}]

    if not data.get("city", None) and not data.get("thematics", None) and not data.get("event", None):
        all_data = suggest_service_by_country(data["country"], True)

    elif data.get("thematics"):
        indexation_with_thematics(data, options, all_data)
    else:
        if data.get("city"):
            all_data = indexed_filter(indexation_with_city(options, data.get("city"), data['event_date']), all_data)
        if data.get("event"):
            all_data = indexed_filter(indexation_with_event(options, data.get("event"), data['event_date']), all_data)

    return custom_response(add_others_information_to_list_of_service(all_data), 200)
Exemple #5
0
def update_service(services_id, user_connected_model, user_connected_schema):
    """ Update one service by artist """

    _u_model = user_connected_model
    service_to_update = _u_model.services.filter_by(id=services_id).first()
    if service_to_update:
        data, error = validate_data(service_schema, request, return_dict=False)
        if error:
            return custom_response(data, 400)
        new_galleries = check_galleries_files(request, _u_model)
        if len(new_galleries) != 0:
            data['galleries'] = list(
                set(data.get("galleries", []) + new_galleries))
        if data['special_dates']:
            data['special_dates'] = func.json_build_object(
                *convert_dict_to_sql_json(data['special_dates']))

        for link in service_to_update.galleries:
            if link not in data['galleries']:
                destroy_image(link, CLOUD_IMAGES_SERVICES_TYPE,
                              _u_model.fileStorage_key, _u_model.id)
        service_to_update.update(data)
        return custom_response(
            return_services(service_schema.dump(service_to_update),
                            service_to_update), 200)
    return custom_response("service not found", 200)
def add_new_partner(user_connected_model, user_connected_schema):
    """ add new partner """

    if user_connected_model.right == 2:
        data, error = validate_data(partner_schema, request, False)
        if error:
            return custom_response(data, 400)

        if Partner.partner_by_name(data['name']):
            return custom_response("partner existing", 400)

        logo_img = request.files.get("logo")
        if not logo_img:
            return custom_response("i need logo image", 400)

        _u_model = user_connected_model
        type_photo = logo_img.content_type
        if type_photo.rsplit('/', 1)[1] not in secure_photo:
            return custom_response("photo type is not supported", 400)
        data['logo'] = upload_image(logo_img, CLOUD_IMAGES_PARTNERS_TYPE,
                                    _u_model.fileStorage_key, _u_model.id)
        data['user_id'] = user_connected_model.id
        new_partners = Partner(data)
        new_partners.save()
        return custom_response("created", 200)
    return custom_response("Unauthorized", 400)
Exemple #7
0
def get_mail():
    """ Get Email """

    data, error = validate_data(user_email, request)
    if error:
        return custom_response(data, 400)

    user = User.get_user_by_email(data.get('email'))
    if user:
        keys = random_int()
        reset_pass = user.reset_password_key
        user_id = user_schema.dump(User.get_user_by_email(data.get('email')))['id']

        if reset_password('RequestPassword.html', keys, email=data.get('email'), name=user.name):
            if reset_pass:
                data_user = reset_pass_schema.dump(reset_pass[0])
                data_user.update({'keys': keys, 'password_reset': 1})
                reset_pass[0].update(data_user)
            else:
                KeyResetPassword(dict(keys=keys, user_id=user_id, password_reset=1)).save()

            return custom_response('Email send', 200)

        return custom_response("Connexion Failed", 400)

    return custom_response("Email not Found", 400)
Exemple #8
0
def login():
    """ function for login in api """

    data, error = validate_data(user_password, request)
    if error:
        return custom_response(data, 400)

    user = User.get_user_by_email(data['email'])

    try:
        if user.reset_password_key:
            return custom_response("Active your account", 400)

    except AttributeError:
        pass

    try:
        response = 'invalid email' if not user else 'invalid password' if not user.check_hash(data['password']) else 0
        if response:
            return custom_response(response, 400)

    except TypeError:
        pass

    ser_user = user_schema.dump(user)
    token = Auth.generate_token(ser_user.get('id'))
    if ser_user['email']:
        user_profile = profile_schema.dump(Profiles.get_profile(ser_user.get('email')))

        if user_profile.get('photo'):
            return token_return(token, ser_user['name'], data['email'], user_profile['photo'])

    return custom_response({'token': token, 'name': ser_user['name'], 'email': data['email']}, 200)
Exemple #9
0
def register():
    """ Create User Function """

    data, error = validate_data(user_schema, request, return_dict=False)
    if error:
        return custom_response(data, 400)

    if User.get_user_by_email(data.get('email')):
        return custom_response("Email already exist", 400)

    data.update({'fileStorage_key': random_string(10), 'profile_id': create_profile(data)})
    new_user = User(data)
    new_user.save()
    keys = random_int()
    KeyResetPassword(dict(keys=keys, user_id=new_user.id)).save()
    generate_basic_stars(user_id=new_user.id)
    if data.get('services'):
        generate_condition_globals(new_user.id)
        if data.get('user_type') == USER_ARTIST_BEATMAKER:
            create_all_default_contract(new_user.id)
        data['services']['user_id'] = new_user.id
        data['services']['galleries'] = check_galleries_files(request, new_user)
        data['services']['materials_id'] = create_new_materials_for_new_services()
        new_service = Services(data['services'])
        new_service.save()
        generate_basic_stars(service_id=new_service.id)
        first_service('FirstService.html', data["email"], data["name"], data['services']["title"])
    login_success('LoginSuccess.html', data["email"], data["name"], keys)
    return token_return(Auth.generate_token(new_user.id), data.get('name'), data.get('email'))
def update_material_by_service_id(service_id, user_connected_model,
                                  user_connected_schema):
    """

    Args:
        service_id:
        user_connected_model:
        user_connected_schema:

    Returns:

    """

    data, error = validate_data(materials_schema, request, return_dict=False)
    if error:
        return custom_response(data, 400)

    user_service_selected = user_connected_model.services.filter_by(
        id=service_id).first()
    if not user_service_selected:
        return custom_response("service not found", 400)
    user_material_to_update = user_service_selected.material

    if user_material_to_update:
        return custom_response(
            update_material(user_connected_schema, user_material_to_update,
                            request, data), 200)

    return custom_response("material not found", 404)
Exemple #11
0
def create_a_new_reservation(user_connected_model, user_connected_schema):
    """ """

    data, error = validate_data(reservation_schema, request)
    if error:
        return custom_response(data, 400)

    payment_reference = random_string(20)
    stripe.api_key = "sk_test_SnQS9gn3p2TRP7lrkjkpM5LN007eNS7Izg"
    artist_amount, total_tva, isl_amount = check_price_details(ht_price=data["total_amount"])
    total_amount = float(isl_amount + total_tva + artist_amount)

    payment_history_obj = {
        "paid": False,
        "tva": total_tva,
        "name": data["name"],
        "email": data["email"],
        "city": data["city"],
        "postal_code": data["postal_code"],
        "phone": data["phone"],
        'address': data["address"],
        'type': KANTOBIZ,
        'buyer_id': user_connected_model.id,
        'artist_id': data["artist_owner_id"],
        'reference': payment_reference,
        'isl_amount': isl_amount,
        'artist_amount': artist_amount,
        'ip_address': None,
        'total_amount': total_amount
    }

    payment_history_to_save = PaymentHistory(payment_history_obj)
    payment_history_to_save.save()

    artist = User.get_one_user(data["artist_owner_id"])
    data["artist_email"] = artist.email

    # payment = payment_stripe(total_amount, data['stripe_token']['id'], "Purchase Service KantoBiz")

    if data["email"] != user_connected_schema["email"]:
        data["auditor_email"] = user_connected_schema["email"]

    # if payment.paid:
    new_reservation = Reservations({
        "event": data["event"],
        "status": PENDING,
        "address": data["address"],
        "total_amount": total_amount,
        "event_date": data["event_date"],
        "services_id": data["services_id"],
        "artist_owner_id": data["artist_owner_id"],
        "options_id_list": data["options_id_list"],
        "payment_history_id": payment_history_to_save.id,
        "auditor_who_reserve_id": user_connected_model.id,
        "refund_policy": artist.condition_globals[0].refund_policy
    })
    new_reservation.save()
    payment_success_send_email({"user_data": data}, payment_reference, total_amount, total_tva)
    return custom_response(reservation_basic_schema.dump(new_reservation), 200)
def create_user_banking_details(user_connected_model, user_connected_schema):
    """ create new banking details """

    data, error = validate_data(banking_schema, request)
    if error:
        return custom_response(data, 400)

    data['user_id'] = user_connected_model.id
    new_user_banking_details = BankingDetails(data)
    new_user_banking_details.save()
    return custom_response(banking_schema.dump(new_user_banking_details), 200)
def create_new_message():
    """
        A user create a new message to support
    """

    data, error = validate_data(support_message, request)
    if error:
        return custom_response(data, 400)

    SupportMessages(data).save()

    return custom_response("added", 200)
def delete_user_banking_details(user_connected_model, user_connected_schema):
    """ delete banking details """

    data, error = validate_data(banking_schema, request)
    if error:
        return custom_response(data, 400)

    user_banking = user_connected_model.banking
    if not user_banking:
        return custom_response("banking details not found, create one", 404)

    user_banking[0].delete()
    return custom_response("updated", 200)
def update_contract_silver(user_connected_model, user_connected_schema):
    """ Update user silver lease """

    data, error = validate_data(contract_schema, request)
    if error:
        return custom_response(data, 400)

    user_silver_lease = user_connected_model.ContractBeat.filter_by(
        contract_name="silver_lease").first()
    if user_silver_lease:
        user_silver_lease.update(data)
        return custom_response("Silver lease updated", 200)
    return custom_response("contract not found", 400)
Exemple #16
0
def validation_keys():
    """ get if user keys is validate for reset password """

    data, error = validate_data(keys_validator_schema, request)
    if error:
        return custom_response(data, 400)

    reset_pass = User.get_user_by_email(data.get('email')).reset_password_key
    try:
        if reset_pass_schema.dump(reset_pass[0])["keys"] == int(data["keys"]):
            reset_pass[0].delete()
            return custom_response("validate", 200)
        return custom_response("Keys invalid", 400)
    except IndexError:
        return custom_response("already used", 400)
def update_my_global_function(user_connected_model, user_connected_schema):
    data, error = validate_data(condition_globals_schema, request)
    if error:
        return custom_response(data, 400)

    if data['refund_policy'] not in refund_allowed_type:
        return custom_response("refund not support", 400)

    if data['travel_expenses']:
        data['travel_expenses'] = func.json_build_object(
            *convert_dict_to_sql_json(data['travel_expenses']))

    user_condition_globals = user_connected_model.condition_globals[0]
    user_condition_globals.update(data)

    return custom_response("updated", 200)
Exemple #18
0
def reset_password_after_validate_keys():
    """ Reset Password """

    data, error = validate_data(user_password, request)
    if error:
        return custom_response(data, 400)

    if not data.get('password'):
        return custom_response("Password could not be null", 400)

    user_in_db = User.get_user_by_email(data.get('email'))
    if user_in_db:
        user_in_db.update_password(data.get('password'))
        password_updated('PasswordUpdated.html', email=data.get('email'), name=user_in_db.name)
        return custom_response("password changed", 200)

    return custom_response("Unauthorized", 400)
def create_new_options(user_connected_model, user_connected_schema):
    """ create new materials """

    data, error = validate_data(option_schema, request)
    if error:
        return custom_response(data, 400)

    all_user_option = user_connected_model.options.all()
    for option in all_user_option:
        if option.name == data['name']:
            return custom_response("already exist", 400)

    data["user_id"] = user_connected_model.id
    data["materials_id"] = create_new_materials_for_new_services()
    new_option = Options(data)
    new_option.save()
    return custom_response(option_schema.dump(new_option), 200)
def update_message(message_id, user_connected_model, user_connected_schema):
    """
        A user create a new message to support
    """

    if user_connected_model.right != 0:
        data, error = validate_data(support_message, request)
        if error:
            return custom_response(data, 400)

        model_message = SupportMessages.get_message_by_id(message_id)
        if not model_message:
            return custom_response("id not found", 200)

        model_message.update(data)

        return custom_response("updated", 200)
    return custom_response("Unauthorized", 400)
        def beats_secure_before_update(*args, **kwargs):
            """ Get a beats type and other verification """

            beats = kwargs['user_connected_model'].medias.filter_by(id=kwargs['song_id']).first()
            if beats:
                data, error = validate_data(media_schema, request, False)
                if error:
                    return custom_response(data, 400)

                extracted_file = extract_file(request)
                msg = _specific(**extracted_file, update=True)
                if isinstance(msg, str):
                    return custom_response(msg, 400)

                kwargs.update(extracted_file)
                kwargs.update({'beats': beats, 'data': data})
                return func(*args, **kwargs)
            return custom_response("beat not found or deleted", 400)
def update_profile(user_connected_model, user_connected_schema):
    """ Update my profile """

    data, error = validate_data(profile_schema, request, False)
    if error:
        return custom_response(data, 400)

    if not data.get("email") or not data.get("name"):
        return custom_response("email and name is required", 400)

    if data['email'] != user_connected_model.email and User.get_user_by_email(
            data['email']):
        return custom_response("email exist", 400)

    user_profile = user_connected_model.profile or Profiles.get_profile(
        social_id=user_connected_model.social_id)
    p_dumped = profile_schema.dump(user_profile)

    data.update(p_dumped)
    _u_model = user_connected_model
    p_photo = request.files.get('photo')
    if p_photo:
        if p_dumped["photo"]:
            destroy_image(p_dumped["photo"], CLOUD_IMAGES_PROFILES_TYPE,
                          _u_model.fileStorage_key, _u_model.id)
        data['photo'] = upload_image(p_photo, CLOUD_IMAGES_PROFILES_TYPE,
                                     _u_model.fileStorage_key, _u_model.id)

    c_photo = request.files.get('cover_photo')
    if c_photo:
        if p_dumped["cover_photo"]:
            destroy_image(p_dumped["cover_photo"], CLOUD_IMAGES_PROFILES_TYPE,
                          _u_model.fileStorage_key, _u_model.id)
        data['cover_photo'] = upload_image(c_photo, CLOUD_IMAGES_PROFILES_TYPE,
                                           _u_model.fileStorage_key,
                                           _u_model.id)

    user_connected_schema["name"], user_connected_schema["email"] = data[
        'name'], data['email']
    user_connected_model.update(user_connected_schema)
    user_profile.update(data)
    new_user_profile = user_connected_model.profile or Profiles.get_profile(
        social_id=user_connected_model.social_id)
    return custom_response(profile_schema.dump(new_user_profile), 200)
def update_one_option(option_id, user_connected_model, user_connected_schema):
    """ update one options """

    data, error = validate_data(option_schema, request)
    if error:
        return custom_response(data, 400)

    option_selected = user_connected_model.options.filter_by(
        id=option_id).first()
    if option_selected:
        option_selected_schema = option_schema.dump(option_selected)
        if data['special_dates']:
            data['special_dates'] = func.json_build_object(
                *convert_dict_to_sql_json(data['special_dates']))
        option_selected_schema.update(data)
        option_selected.update(option_selected_schema)
        return custom_response(option_schema.dump(option_selected), 200)

    return custom_response("option not found", 404)
def update_an_partner(partner_id, user_connected_model, user_connected_schema):
    """ add new partner """

    if user_connected_model.right == 2:
        data, error = validate_data(partner_schema, request, False)
        if error:
            return custom_response(data, 400)
        query_ = Partner.partner_by_id(partner_id)
        partner = partner_schema.dump(query_)
        logo_img, data['logo'] = request.files.get("logo"), partner['logo']
        if logo_img:
            _u_model = user_connected_model
            type_photo = logo_img.content_type
            if type_photo.rsplit('/', 1)[1] not in secure_photo:
                return custom_response("photo type is not supported", 400)
            destroy_image(partner['logo'], CLOUD_IMAGES_PARTNERS_TYPE,
                          _u_model.fileStorage_key, _u_model.id)
            data['logo'] = upload_image(logo_img, CLOUD_IMAGES_PARTNERS_TYPE,
                                        _u_model.fileStorage_key, _u_model.id)
        query_.update(data)
        return custom_response("updated", 200)
    return custom_response("Unauthorized", 400)
Exemple #25
0
def create_new_service(user_connected_model, user_connected_schema):
    """ Create a new service by artist """

    data, error = validate_data(service_schema, request, return_dict=False)
    if error:
        return custom_response(data, 400)

    all_user_services = user_connected_model.services.all()
    for service in all_user_services:
        if service.title == data['title'] and service.reference_city == data['reference_city'] \
                or service.title == data['title'] and service.events == data['events']:
            return custom_response("same title and reference_city", 400)

    new_galleries = check_galleries_files(request, user_connected_model)
    data['galleries'] = list(set(data.get("galleries", []) + new_galleries))
    if len(data['galleries']) == 0:
        return custom_response("i need galleries", 400)

    if not data.get("travel_expenses"):
        data["travel_expenses"] = user_connected_model.condition_globals[
            0].travel_expenses
    else:
        data['travel_expenses'] = func.json_build_object(
            *convert_dict_to_sql_json(data['travel_expenses']))

    data['user_id'] = user_connected_schema["id"]
    data['materials_id'] = create_new_materials_for_new_services()
    if len(all_user_services) == 0:
        first_service('FirstService.html', user_connected_schema["email"],
                      user_connected_schema["name"], data["title"])

    new_service = Services(data)
    new_service.save()
    generate_basic_stars(service_id=new_service.id)
    return custom_response(
        return_services(service_schema.dump(new_service), new_service), 200)