215 lines
5.4 KiB
TypeScript
215 lines
5.4 KiB
TypeScript
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
|
|
);
|
|
}
|