import { USERNAME_MIN_LENGTH, USERNAME_MAX_LENGTH, PASSWORD_MIN_LENGTH, PASSWORD_MAX_LENGTH, USER_ID_LENGTH, STORE_SERVICE_MIN_LENGTH, STORE_SERVICE_MAX_LENGTH, STORE_SERVICE_ACTIVITY_NAME_MAX_LENGTH, STORE_SERVICE_ACTIVITY_NAME_MIN_LENGTH, STORE_SERVICE_ACTIVITY_DESCRIPTION_MAX_LENGTH, STORE_SERVICE_ACTIVITY_PRICE_MAX, STORE_SERVICE_ACTIVITY_PRICE_MIN, STORE_SERVICE_ACTIVITY_DURATION_MAX, STORE_SERVICE_ACTIVITY_DURATION_MIN, VALID_LANGUAGE_CODES, FEEDBACK_MAX_LENGTH, FEEDBACK_MIN_LENGTH, EMAIL_MIN_LENGTH, EMAIL_MAX_LENGTH, EMAIL_REGEX, PAYMENT_PLAN_SETTINGS, CALENDAR_MIN_EARLIEST_BOOKING_TIME, CALENDAR_MAX_EARLIEST_BOOKING_TIME, PAYMENT_PLAN, STORE_SETTING_ADDRESS_MIN_LENGTH, STORE_SETTING_ADDRESS_MAX_LENGTH, STORE_SETTING_COMPANY_NAME_MIN_LENGTH, STORE_SETTING_COMPANY_NAME_MAX_LENGTH, STORE_SETTING_PHONE_NUMBER_MIN_LENGTH, STORE_SETTING_PHONE_NUMBER_MAX_LENGTH, } from "../utils/constants"; import User from "../models/user"; import UserPendingEmailChange from "../models/userPendingEmailChange"; import logger from "../logger/logger"; // TODO: regex for username export function isUsernameValid(username: string) { return ( username.length >= USERNAME_MIN_LENGTH && username.length <= USERNAME_MAX_LENGTH ); } export async function isEmailValid( email: string, checkDatabase: boolean = true ) { logger.debug(`isEmailValid: ${email}`); if ( email.length < EMAIL_MIN_LENGTH || email.length > EMAIL_MAX_LENGTH || !EMAIL_REGEX.test(email) ) { return false; } if (!checkDatabase) { return true; } try { // check if email is already taken in the database const existingUser = await User.findOne({ where: { email: email, }, }); if (existingUser !== null) { return false; } // check if email is already taken in the pending email change table const existingPendingEmailChange = await UserPendingEmailChange.findOne({ where: { new_email: email, }, }); if (existingPendingEmailChange !== null) { return false; } return true; } catch (err) { console.warn(err); return false; } } // TODO: regex for password export function isPasswordValid(password: string) { return ( password.length >= PASSWORD_MIN_LENGTH && password.length <= PASSWORD_MAX_LENGTH ); } export function isUserIdValid(userId: string) { return userId.length === USER_ID_LENGTH; } export function isStoreServiceNameValid(storeServiceName: string) { return ( storeServiceName.length >= STORE_SERVICE_MIN_LENGTH && storeServiceName.length <= STORE_SERVICE_MAX_LENGTH ); } export function isStoreServiceActivityNameValid( storeServiceActivityName: string ) { return ( storeServiceActivityName.length >= STORE_SERVICE_ACTIVITY_NAME_MIN_LENGTH && storeServiceActivityName.length <= STORE_SERVICE_ACTIVITY_NAME_MAX_LENGTH ); } export function isStoreServiceActivityDescriptionValid( storeServiceActivityDescription: string ) { // description is a optional field if (!storeServiceActivityDescription) { return true; } return ( storeServiceActivityDescription.length <= STORE_SERVICE_ACTIVITY_DESCRIPTION_MAX_LENGTH ); } export function isStoreServiceActivityPriceValid( storeServiceActivityPrice: number ) { return ( storeServiceActivityPrice >= STORE_SERVICE_ACTIVITY_PRICE_MIN && storeServiceActivityPrice <= STORE_SERVICE_ACTIVITY_PRICE_MAX ); } export function isStoreServiceActivityDurationValid( storeServiceActivityDuration: number ) { return ( storeServiceActivityDuration >= STORE_SERVICE_ACTIVITY_DURATION_MIN && storeServiceActivityDuration <= STORE_SERVICE_ACTIVITY_DURATION_MAX ); } export function isLanguageCodeValid(languageCode: string) { return VALID_LANGUAGE_CODES.includes(languageCode); } export function isFeedbackValid(feedback: string) { return ( feedback.length >= FEEDBACK_MIN_LENGTH && feedback.length <= FEEDBACK_MAX_LENGTH ); } export function isCalendarMaxFutureBookingDaysValid( calendarMaxFutureBookingDays: number, paymentPlan: number ) { return ( PAYMENT_PLAN_SETTINGS[paymentPlan].calendarMaxFutureBookingDays >= calendarMaxFutureBookingDays ); } export function isCalendarMinEarliestBookingTimeValid( calendarMinEarliestBookingTime: number ) { return ( calendarMinEarliestBookingTime >= CALENDAR_MIN_EARLIEST_BOOKING_TIME && calendarMinEarliestBookingTime <= CALENDAR_MAX_EARLIEST_BOOKING_TIME ); } export function isPaymentPlanValid(paymentPlan: number) { return ( paymentPlan >= PAYMENT_PLAN.BASIC && paymentPlan <= PAYMENT_PLAN.PREMIUM ); } export function isPaymentIntervalValid(paymentInterval: number) { return paymentInterval === 0 || paymentInterval === 1; } export function isCompanyNameValid(companyName: string) { return ( companyName.length >= STORE_SETTING_COMPANY_NAME_MIN_LENGTH && companyName.length <= STORE_SETTING_COMPANY_NAME_MAX_LENGTH ); } export function isCompanyPhoneNumberValid(companyPhoneNumber: string) { return ( companyPhoneNumber.length >= STORE_SETTING_PHONE_NUMBER_MIN_LENGTH && companyPhoneNumber.length <= STORE_SETTING_PHONE_NUMBER_MAX_LENGTH ); } export function isCompanyAddressValid(companyAddress: string) { return ( companyAddress.length >= STORE_SETTING_ADDRESS_MIN_LENGTH && companyAddress.length <= STORE_SETTING_ADDRESS_MAX_LENGTH ); }