customer-dashboard-api/src/validator/validator.ts

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