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)
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)
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)
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)
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)
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)
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)
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)
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)