storemw-core-api 1.0.140 → 1.0.142
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/user/userController.js +8 -4
- package/dist/controllers/user/userController.js.map +1 -1
- package/dist/middlewares/index.d.ts +3 -0
- package/dist/middlewares/index.js +40 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/models/account/AccountModel.d.ts +13 -13
- package/dist/models/branch_user/BranchUserModel.d.ts +13 -13
- package/dist/models/user/AgentModel.d.ts +2 -24
- package/dist/models/user/MemberModel.d.ts +2 -24
- package/dist/models/user/UserModel.d.ts +13 -2
- package/dist/schema/index.d.ts +3 -0
- package/dist/schema/index.js +40 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/middleware/index.d.ts +2 -0
- package/dist/schema/middleware/index.js +19 -0
- package/dist/schema/middleware/index.js.map +1 -0
- package/dist/schema/middleware/route/index.d.ts +27 -27
- package/dist/schema/middleware/route/index.js +14 -14
- package/dist/schema/middleware/route/index.js.map +1 -1
- package/dist/schema/payload/account/schemaAccount.d.ts +7 -0
- package/dist/schema/payload/index.d.ts +74 -74
- package/dist/schema/payload/index.js +39 -39
- package/dist/schema/payload/index.js.map +1 -1
- package/dist/schema/payload/user/schemaUser.d.ts +3 -0
- package/dist/schema/payload/user/schemaUser.js +1 -0
- package/dist/schema/payload/user/schemaUser.js.map +1 -1
- package/dist/schema/payload/user/schemaUserAdministrator.d.ts +14 -0
- package/dist/schema/payload/user/schemaUserAgent.d.ts +15 -12
- package/dist/schema/payload/user/schemaUserAgent.js +2 -2
- package/dist/schema/payload/user/schemaUserAgent.js.map +1 -1
- package/dist/schema/payload/user/schemaUserCustomer.d.ts +14 -0
- package/dist/schema/payload/user/schemaUserDriver.d.ts +14 -0
- package/dist/schema/payload/user/schemaUserMember.d.ts +15 -12
- package/dist/schema/payload/user/schemaUserMember.js +2 -2
- package/dist/schema/payload/user/schemaUserMember.js.map +1 -1
- package/dist/schema/payload/user/schemaUserOperator.d.ts +14 -0
- package/dist/schema/payload/user/schemaUserRetailer.d.ts +14 -0
- package/dist/schema/payload/user/schemaUserWorker.d.ts +14 -0
- package/dist/services/account/AccountService.js +17 -7
- package/dist/services/account/AccountService.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +2 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/user/AdministratorService.d.ts +1 -0
- package/dist/services/user/AdministratorService.js +7 -0
- package/dist/services/user/AdministratorService.js.map +1 -1
- package/dist/services/user/AgentService.d.ts +2 -12
- package/dist/services/user/AgentService.js +35 -26
- package/dist/services/user/AgentService.js.map +1 -1
- package/dist/services/user/CustomerService.d.ts +1 -0
- package/dist/services/user/CustomerService.js +7 -0
- package/dist/services/user/CustomerService.js.map +1 -1
- package/dist/services/user/DriverService.d.ts +1 -0
- package/dist/services/user/DriverService.js +7 -0
- package/dist/services/user/DriverService.js.map +1 -1
- package/dist/services/user/MemberService.d.ts +2 -12
- package/dist/services/user/MemberService.js +35 -26
- package/dist/services/user/MemberService.js.map +1 -1
- package/dist/services/user/OperatorService.d.ts +4 -2
- package/dist/services/user/OperatorService.js +11 -3
- package/dist/services/user/OperatorService.js.map +1 -1
- package/dist/services/user/RetailerService.d.ts +1 -0
- package/dist/services/user/RetailerService.js +7 -0
- package/dist/services/user/RetailerService.js.map +1 -1
- package/dist/services/user/UserMeService.d.ts +1 -0
- package/dist/services/user/UserService.d.ts +5 -0
- package/dist/services/user/UserService.js +34 -17
- package/dist/services/user/UserService.js.map +1 -1
- package/dist/services/user/WorkerService.d.ts +1 -0
- package/dist/services/user/WorkerService.js +52 -44
- package/dist/services/user/WorkerService.js.map +1 -1
- package/package.json +19 -9
- package/prisma/schema.prisma +44 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../src/services/user/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n UserModel,\n ModelCountry,\n CountryModel,\n ModelUserFields,\n ModelAdministratorFields,\n ModelCountryFields\n} from \"@/models\";\n\nimport { z } from \"zod\";\n\nimport { UserPropService, UserPropReplaceProps } from \"./UserPropService\";\nimport { CustomerGetProps, CustomerCreateProps, CustomerListProps, CustomerUpdateProps, CustomerService } from \"./CustomerService\";\nimport { AdministratorGetProps, AdministratorCreateProps, AdministratorUpdateProps, AdministratorListProps, AdministratorService } from \"./AdministratorService\";\nimport { WorkerCreateProps, WorkerGetProps, WorkerUpdateProps, WorkerListProps, WorkerService } from \"./WorkerService\";\nimport { DriverCreateProps, DriverGetProps, DriverUpdateProps, DriverListProps, DriverService } from \"./DriverService\";\nimport { RetailerCreateProps, RetailerGetProps, RetailerUpdateProps, RetailerListProps, RetailerService } from \"./RetailerService\";\nimport { MemberCreateProps, MemberGetProps, MemberUpdateProps, MemberListProps, MemberService } from \"./MemberService\";\nimport { AgentCreateProps, AgentGetProps, AgentUpdateProps, AgentListProps, AgentService } from \"./AgentService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect } from \"@/lib\";\n\nimport { validateLoginPasswordFormat, DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { hashPassword } from \"@/utils\";\nimport { OperatorCreateProps, OperatorGetProps, OperatorListProps, OperatorService, OperatorUpdateProps } from \"./OperatorService\";\n\nimport { ServiceFactory } from \"@/lib\";\n\nexport const userTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n supplier: \"supplier\",\n customer: \"customer\",\n driver: \"driver\",\n retailer: \"retailer\",\n member: \"member\",\n agent: \"agent\",\n} as const\n\nexport type UserType = typeof userTypes[keyof typeof userTypes]\n\nexport type UserServiceProps = DefaultServiceProps & {\n userType: UserType\n};\n\nexport type UserGetProps = QueryGet & {\n id: number,\n overrideUserType?: UserType | \"\"\n includePassword?: boolean,\n skipFilterAccountId?: boolean\n skipFilterUserType?: boolean\n};\n\nexport type UserGetByUsernameProps = QueryGet & {\n username: string,\n overrideUserType?: UserType | \"\"\n includePassword?: boolean,\n skipFilterAccountId?: boolean\n};\n\nexport type UserListProps = QueryList & {\n // id: number,\n includePassword?: boolean\n skipFilterAccountId?: boolean\n skipFilterUserType?: boolean\n};\n\nexport type UserRemoveProps = {\n ids: BigInt[]\n};\n\nexport type UserSuspendProps = {\n ids: BigInt[]\n};\n\nexport type User = {\n loginUsername: string\n loginPassword: string\n address: string\n // contact: string\n contact: {\n countryCode: number; // e.g., 1 for Canada\n phoneNumber: string; // digits only, mobile or landline\n }\n email: string\n firstname: string\n lastname: string\n status: boolean\n}\n\nexport type UserOptionalLoginPassword = Omit<User, \"loginPassword\"> & {\n loginPassword?: string\n}\n\nexport type UserCreateProps = {\n userType?: UserType,\n data: {\n user: User\n } & (\n // operator\n {\n operator: Omit<OperatorCreateProps[\"data\"][\"operator\"], \"userId\">,\n } |\n // customer\n {\n customer: Omit<CustomerCreateProps[\"data\"][\"customer\"], \"userId\">,\n } |\n // administrator\n {\n administrator: Omit<AdministratorCreateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerCreateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverCreateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberCreateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // agent\n {\n agent: Omit<AgentCreateProps[\"data\"][\"agent\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerCreateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserUpdateProps = {\n id: number,\n userType?: UserType,\n data: {\n user: UserOptionalLoginPassword\n } & (\n // operator\n {\n operator: Omit<OperatorUpdateProps[\"data\"][\"operator\"], \"userId\">\n } |\n // customer\n {\n customer: Omit<CustomerUpdateProps[\"data\"][\"customer\"], \"userId\">\n } |\n // administrator\n {\n administrator: Omit<AdministratorUpdateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerUpdateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverUpdateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberUpdateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // agent\n {\n agent: Omit<AgentUpdateProps[\"data\"][\"agent\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerUpdateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserReplacePasswordProps = {\n id: number,\n data: {\n unhashLoginPassword: string\n },\n isOperator: boolean\n}\n\nlet mainSqlSelect = {\n [`usr.${ModelUserFields.user_id}`]: \"user_id\",\n [`usr.${ModelUserFields.user_type}`]: \"user_type\",\n [`usr.${ModelUserFields.login_username}`]: \"username\",\n [`usr.${ModelUserFields.firstname}`]: \"firstname\",\n [`usr.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usr.${ModelUserFields.contact_country_code}, usr.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usr.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usr.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usr.${ModelUserFields.email}`]: \"email\",\n [`usr.${ModelUserFields.address}`]: \"address\",\n [`usr.${ModelUserFields.status}`]: \"status\",\n}\n\nlet defaultSqlSelect = {\n [`usr.${ModelUserFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`usr.${ModelUserFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`usr.${ModelUserFields.isdelete}`]: \"isdelete\",\n [`usr.${ModelUserFields.istrash}`]: \"istrash\",\n [`usr.${ModelUserFields.accountid}`]: \"accountid\",\n}\n\nconst getCreatePayload = async (\n userType: UserType,\n data: UserCreateProps[\"data\"],\n contact: {\n countryCode: number,\n phoneNumber: string\n }\n) => {\n\n if (\"user\" in data) {\n\n // have to hash the password\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.login_password}`]: await hashPassword(data.user.loginPassword),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact_country_code}`]: contact.countryCode,\n [`${ModelUserFields.contact_phone_number}`]: contact.phoneNumber,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: Boolean(data.user.status),\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = async (\n userType: UserType,\n data: UserUpdateProps[\"data\"],\n contact: {\n countryCode: number,\n phoneNumber: string\n }\n) => {\n\n if (\"user\" in data) {\n\n const newHashPassword = data?.user?.loginPassword ? await hashPassword(data.user.loginPassword) : \"\"\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n ...(newHashPassword ? { [`${ModelUserFields.login_password}`]: newHashPassword } : {}),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact_country_code}`]: contact.countryCode,\n [`${ModelUserFields.contact_phone_number}`]: contact.phoneNumber,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: Boolean(data.user.status),\n [`${ModelUserFields.user_type}`]: `${userType}`\n }\n }\n\n return false\n\n}\n\n// Example reserved words for username\nexport const loginUsernameReservedWords = [\n \"admin\", \"administrator\", \"root\", \"system\", \"operator\", \"moderator\", \"owner\", \"manager\",\n \"user\", \"users\", \"account\", \"guest\", \"login\", \"logout\", \"signup\", \"register\", \"auth\",\n \"api\", \"www\", \"app\", \"support\", \"help\", \"dashboard\", \"portal\", \"console\", \"control\", \"ops\",\n \"test\", \"demo\", \"beta\", \"alpha\", \"dev\", \"development\", \"staging\", \"prod\", \"production\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"team\", \"teams\",\n \"billing\", \"payment\", \"invoice\", \"finance\", \"financeadmin\", \"subscription\", \"plan\", \"plans\",\n \"rootadmin\", \"superuser\", \"staff\", \"moderation\", \"systemadmin\", \"sysadmin\", \"internal\",\n \"management\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\", \"news\", \"blog\", \"media\",\n \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\", \"notifications\",\n \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\",\n \"restore\", \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\",\n \"downloads\", \"uploads\", \"templates\", \"home\", \"index\", \"static\", \"public\", \"webmaster\"\n];\n\n// Zod schema for username\nexport const loginUsernameSchema = z\n .string()\n .min(5, { message: \"Login username must be at least 5 characters\" })\n .max(63, { message: \"Login username must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-_]{3,61}[a-z0-9])?$/,\n \"Login username can only contain lowercase letters, numbers, hyphens, and underscores, cannot start or end with a hyphen or underscore\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !loginUsernameReservedWords.includes(val), {\n message: \"This login username is reserved. Please choose another one\",\n });\n\nexport const UserService = (props: UserServiceProps) => {\n\n const {\n userType = \"administrator\",\n ...rest\n } = props\n\n const userModel = UserModel({ ...rest })\n const countryModel = CountryModel({ ...rest })\n\n const userPropService = UserPropService({ ...rest, userPropType: \"LOCATION_ID\" })\n const customerService = CustomerService({ ...rest })\n const administratorService = AdministratorService({ ...rest })\n const operatorService = OperatorService({ ...rest })\n const workerService = WorkerService({ ...rest })\n const driverService = DriverService({ ...rest })\n const retailerService = RetailerService({ ...rest })\n const memberService = MemberService({ ...rest })\n const agentService = AgentService({ ...rest })\n\n const validateUserContactPhoneNumber = (val: string) => {\n // Must be numeric\n if (!/^\\d+$/.test(val)) {\n throw new Error(`Contact No. only allowed numbers`);\n }\n\n // Must have realistic length (4 to 15 digits)\n if (val.length < 4 || val.length > 15) {\n throw new Error(`Contact No. length must be between 4 and 15 digits`);\n }\n\n return true;\n };\n\n const validateUserContactCountryCode = async (countryCode: number) => {\n\n // 1. Load active countries\n const activeCountries: ModelCountry[] = await countryModel.list({\n where: {\n [`${ModelCountryFields.isdelete}`]: false,\n [`${ModelCountryFields.istrash}`]: false,\n [`${ModelCountryFields.status}`]: true\n }\n })\n\n // Check if country code exists\n const exists = activeCountries.some(c => c.phone_code === countryCode);\n\n if (!exists) {\n throw new Error(`Invalid country code: ${countryCode}`);\n }\n\n return true; // valid\n\n }\n\n const validateUserContact = async (countryCode: number, phoneNumber: string) => {\n\n try {\n // validate the phone number without country code\n validateUserContactPhoneNumber(phoneNumber)\n\n // validate user contact country code\n await validateUserContactCountryCode(countryCode)\n\n return true\n\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid user contact no.: ${msg}, provided: ${countryCode} ${phoneNumber}`);\n }\n\n }\n\n const validateLoginUsernameFormat = (loginUsername: string) => {\n try {\n return loginUsernameSchema.parse(loginUsername); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid login username: \"${loginUsername}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createUser = async ({ data, userType: overrideUserType }: UserCreateProps) => {\n\n const _userType = overrideUserType || userType\n\n // validate the credential contact no\n const userLoginUsername = data.user.loginUsername\n const userLoginPassword = data.user.loginPassword\n const userContactCountryCode = data.user.contact.countryCode\n const userContactPhoneNumber = data.user.contact.phoneNumber\n\n // validate the contact no only can be digit in text only\n // validate the country code in prefix\n await validateUserContact(userContactCountryCode, userContactPhoneNumber)\n\n // validate login username\n validateLoginUsernameFormat(userLoginUsername)\n\n // validate login password\n validateLoginPasswordFormat(userLoginPassword)\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.accountid}`]: Number(rest.accountId),\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n\n // validation before insertion\n if (_userType === \"member\" && \"member\" in data) {\n\n const memberOwnerUserId = data?.member?.ownerUserId ?? \"\";\n\n // validate owner user id\n if (memberOwnerUserId) {\n await memberService.validateMemberOwnerUserId(memberOwnerUserId)\n }\n\n }\n\n if (_userType === \"agent\" && \"agent\" in data) {\n\n const agentOwnerUserId = data?.agent?.ownerUserId ?? \"\";\n\n // validate owner user id\n if (agentOwnerUserId) {\n await agentService.validateAgentOwnerUserId(agentOwnerUserId)\n }\n\n }\n\n const _data = await getCreatePayload(\n _userType,\n data,\n {\n countryCode: userContactCountryCode,\n phoneNumber: userContactPhoneNumber\n }\n )\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n // create user\n let responseUser = await userModel.create({ data: _data })\n\n let newUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerCreateProps[\"data\"] = {\n customer: {\n ...data.customer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create customer\n await customerService.createCustomer({ data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataAdministrator: AdministratorCreateProps[\"data\"] = {\n administrator: {\n ...data.administrator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create administrator\n await administratorService.createAdministrator({ data: dataAdministrator })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorCreateProps[\"data\"] = {\n operator: {\n ...data.operator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create operator\n await operatorService.createOperator({ data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerCreateProps[\"data\"] = {\n worker: {\n ...data.worker,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create worker\n await workerService.createWorker({ data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverCreateProps[\"data\"] = {\n driver: {\n ...data.driver,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create driver\n await driverService.createDriver({ data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberCreateProps[\"data\"] = {\n member: {\n ...data.member,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create member\n await memberService.createMember({ userId: Number(newUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"agent\" && \"agent\" in data) {\n\n let dataAgent: AgentCreateProps[\"data\"] = {\n agent: {\n ...data.agent,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create agent\n await agentService.createAgent({ userId: Number(newUserId), data: dataAgent })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await agentService.getAgent({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerCreateProps[\"data\"] = {\n retailer: {\n ...data.retailer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create retailer\n await retailerService.createRetailer({ data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(newUserId), datatypes: [] })\n }\n\n return response\n }\n\n const updateUser = async ({ id, data, userType: overrideUserType }: UserUpdateProps) => {\n\n const _userType = overrideUserType || userType\n\n // validate the credential contact no\n const userLoginUsername = data.user.loginUsername\n const userLoginPassword = data.user?.loginPassword ?? \"\"\n const userContactCountryCode = data.user.contact.countryCode\n const userContactPhoneNumber = data.user.contact.phoneNumber\n\n // validate the contact no only can be digit in text only\n // validate the country code in prefix\n await validateUserContact(userContactCountryCode, userContactPhoneNumber)\n\n // validate login username\n validateLoginUsernameFormat(userLoginUsername)\n\n // validate login password\n if (userLoginPassword) {\n validateLoginPasswordFormat(userLoginPassword)\n }\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false,\n [`${ModelUserFields.accountid}`]: rest.accountId,\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) {\n if (Number(checkUsername[0]?.user_id) !== Number(id)) { // if not self user id\n throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n }\n }\n\n // validation before insertion\n // if (_userType === \"member\" && \"member\" in data) {\n // }\n\n const _data = await getUpdatePayload(\n _userType,\n data,\n {\n countryCode: userContactCountryCode,\n phoneNumber: userContactPhoneNumber\n }\n )\n\n if (!_data) {\n throw new Error(`Invalid update payload: ${JSON.stringify(_data)}`);\n }\n\n // update user\n let responseUser = await userModel.update({ id, data: _data })\n\n let updateUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerUpdateProps[\"data\"] = {\n customer: {\n ...data.customer\n }\n }\n\n await customerService.updateCustomer({ userId: Number(updateUserId), data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorUpdateProps[\"data\"] = {\n operator: {\n ...data.operator\n }\n }\n\n await operatorService.updateOperator({ userId: Number(updateUserId), data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataCustomer: AdministratorUpdateProps[\"data\"] = {\n administrator: {\n ...data.administrator\n }\n }\n\n await administratorService.updateAdministrator({ userId: Number(updateUserId), data: dataCustomer })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerUpdateProps[\"data\"] = {\n worker: {\n ...data.worker\n }\n }\n\n await workerService.updateWorker({ userId: Number(updateUserId), data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverUpdateProps[\"data\"] = {\n driver: {\n ...data.driver\n }\n }\n\n await driverService.updateDriver({ userId: Number(updateUserId), data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberUpdateProps[\"data\"] = {\n member: {\n ...data.member\n }\n }\n\n await memberService.updateMember({ userId: Number(updateUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"agent\" && \"agent\" in data) {\n\n let dataAgent: AgentUpdateProps[\"data\"] = {\n agent: {\n ...data.agent\n }\n }\n\n await agentService.updateAgent({ userId: Number(updateUserId), data: dataAgent })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await agentService.getAgent({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerUpdateProps[\"data\"] = {\n retailer: {\n ...data.retailer\n }\n }\n\n await retailerService.updateRetailer({ userId: Number(updateUserId), data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n return response\n }\n\n const getUser = async ({ id, datatypes = [], includePassword = false, overrideUserType = \"\", skipFilterAccountId = false, skipFilterUserType = false }: UserGetProps) => {\n\n let data: any = {}\n\n if (skipFilterUserType === true) {\n\n let { data } = await listUsers({\n includePassword,\n limit: 1,\n offset: 0,\n filters: [{ field: \"user_id\", operator: \"=\", value: id }],\n sortfield: \"user_id\",\n sortorder: \"ASC\",\n datatypes,\n skipFilterAccountId,\n skipFilterUserType\n })\n\n return data[0] ?? null;\n }\n\n const _userType = overrideUserType ? overrideUserType : userType\n\n if (_userType === \"customer\") {\n data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"operator\") {\n data = await operatorService.getOperator({ id, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"administrator\") {\n data = await administratorService.getAdministrator({ id, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword, skipFilterAccountId })\n }\n\n if (_userType === \"worker\") {\n data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"driver\") {\n data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"member\") {\n data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"agent\") {\n data = await agentService.getAgent({ id, datatypes: datatypes as AgentGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"retailer\") {\n data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const getUserByUsername = async ({ username, datatypes = [], includePassword = false, overrideUserType = \"\", skipFilterAccountId = false }: UserGetByUsernameProps) => {\n\n let data: any = {}\n\n const _userType = overrideUserType ? overrideUserType : userType\n\n // if (_userType === \"customer\") {\n // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n // }\n\n if (_userType === \"operator\") {\n data = await operatorService.getOperatorByUsername({ username, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"administrator\") {\n data = await administratorService.getAdministratorByUsername({ username, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword, skipFilterAccountId })\n }\n\n // if (_userType === \"worker\") {\n // data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"driver\") {\n // data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"member\") {\n // data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"agent\") {\n // data = await agentService.getAgent({ id, datatypes: datatypes as AgentGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"retailer\") {\n // data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n // }\n\n if (!data) {\n throw new Error(`Invalid username: ${username}`);\n }\n\n return data\n };\n\n const listUsers = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes, includePassword = false, skipFilterAccountId = false, skipFilterUserType = false }: UserListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (skipFilterUserType === true) {\n\n mainSqlSelect = {\n ...mainSqlSelect,\n ...(includePassword ? { [`usr.${ModelUserFields.login_password}`]: \"password\" } : {}),\n }\n\n let sqlSelect = [\n `COUNT(usr.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"usr\", \"users\", \"creator\", [\"usr.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"usr\", \"users\", \"updater\", [\"usr.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `usr.isdelete = false`,\n `usr.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"users\",\n mainAlias: \"usr\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId\n })\n\n data = await userModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n }\n\n if (userType === \"customer\") {\n ({ data, total } = await customerService.listCustomers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CustomerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"operator\") {\n ({ data, total } = await operatorService.listOperators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as OperatorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"administrator\") {\n ({ data, total } = await administratorService.listAdministrators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AdministratorListProps[\"datatypes\"], skipFilterAccountId }\n ))\n }\n\n if (userType === \"worker\") {\n ({ data, total } = await workerService.listWorkers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as WorkerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"driver\") {\n ({ data, total } = await driverService.listDrivers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as DriverListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"member\") {\n ({ data, total } = await memberService.listMembers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as MemberListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"agent\") {\n ({ data, total } = await agentService.listAgents(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AgentListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"retailer\") {\n ({ data, total } = await retailerService.listRetailers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as RetailerListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeUsers = async ({ ids }: UserRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (userType === \"customer\") {\n response = await customerService.removeCustomers({ userIds: ids })\n }\n\n if (userType === \"operator\") {\n response = await operatorService.removeOperators({ userIds: ids })\n }\n\n if (userType === \"administrator\") {\n\n // have to check the ids is is_owner account\n const { data: administrators } = await administratorService.listAdministrators({\n limit: 9999,\n offset: 0,\n filters: [{\n field: `${ModelAdministratorFields.user_id}`,\n operator: \"where_in\",\n value: ids\n }],\n sortfield: `${ModelAdministratorFields.administrator_id}`,\n sortorder: \"ASC\",\n datatypes: []\n })\n\n const ownerAdministrators = administrators.filter(i => i.is_owner === true)\n\n if (ownerAdministrators.length > 0) {\n throw new Error(`Cannot delete on administrator owner user ids: ${ownerAdministrators.map(i => i.user_id)}`);\n }\n\n response = await administratorService.removeAdministrators({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"worker\") {\n response = await workerService.removeWorkers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"driver\") {\n response = await driverService.removeDrivers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"member\") {\n response = await memberService.removeMembers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"agent\") {\n response = await agentService.removeAgents({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"retailer\") {\n response = await retailerService.removeRetailers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n // remove user\n let responseUser = await userModel.remove({ ids: ids.map(i => Number(i)) })\n\n response.forEach((i, index) => {\n i.user = responseUser[index]\n })\n\n return response\n };\n\n const replacePassword = async ({ id, data, isOperator = false }: UserReplacePasswordProps) => {\n\n const passwordUserModel = UserModel({\n ...rest,\n ...(isOperator === true ? { isOperator } : {})\n })\n\n // update user password\n let responseUser = await passwordUserModel.update({\n id,\n data: {\n login_password: await hashPassword(data?.unhashLoginPassword)\n }\n })\n\n let updateUserId = responseUser.user_id\n\n let response = await getUser({ id: Number(updateUserId), includePassword: false, datatypes: [] })\n\n return response\n }\n\n const suspendUsers = async ({ ids }: UserSuspendProps) => {\n\n if (!ids.length) throwError('id is required');\n\n // change users status\n let response = await userModel.update({\n where: {\n [`${ModelUserFields.user_id}`]: {\n in: ids.map((i: any) => Number(i))\n }\n },\n data: {\n [`${ModelUserFields.status}`]: false\n }\n })\n\n const { login_password, ...safeResponse } = response;\n\n return safeResponse\n };\n\n const getDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n data = customerService.getDataTypes()\n }\n\n if (userType === \"operator\") {\n data = operatorService.getDataTypes()\n }\n\n if (userType === \"administrator\") {\n data = administratorService.getDataTypes()\n }\n\n if (userType === \"worker\") {\n data = workerService.getDataTypes()\n }\n\n if (userType === \"driver\") {\n data = driverService.getDataTypes()\n }\n\n if (userType === \"member\") {\n data = memberService.getDataTypes()\n }\n\n if (userType === \"agent\") {\n data = agentService.getDataTypes()\n }\n\n if (userType === \"retailer\") {\n data = retailerService.getDataTypes()\n }\n\n return data\n };\n\n // return {\n // createUser,\n // updateUser,\n // getUser,\n // listUsers,\n // removeUsers,\n // replacePassword,\n // getUserDataTypes\n // }\n\n const methodConfigs = {\n getUser: { fn: getUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user\" },\n getUserByUsername: { fn: getUserByUsername, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user by username\" },\n listUsers: { fn: listUsers, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list users\" },\n createUser: { fn: createUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"create user\" },\n updateUser: { fn: updateUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"update user\" },\n replacePassword: { fn: replacePassword, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"replace user password\" },\n removeUsers: { fn: removeUsers, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"remove users\" },\n suspendUsers: { fn: suspendUsers, allowUserTypes: [\"any\"] as const, actionName: \"suspend users\" },\n getDataTypes: { fn: getDataTypes, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user datatypes\" },\n validateUserContact: { fn: validateUserContact, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"validate user contact\" },\n };\n\n return ServiceFactory(\"UserService\", rest, methodConfigs);\n\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../src/services/user/UserService.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n UserModel,\n ModelCountry,\n CountryModel,\n ModelUserFields,\n ModelAdministratorFields,\n ModelCountryFields\n} from \"@/models\";\n\nimport { z } from \"zod\";\n\nimport { UserPropService, UserPropReplaceProps } from \"./UserPropService\";\nimport { CustomerGetProps, CustomerCreateProps, CustomerListProps, CustomerUpdateProps, CustomerService } from \"./CustomerService\";\nimport { AdministratorGetProps, AdministratorCreateProps, AdministratorUpdateProps, AdministratorListProps, AdministratorService } from \"./AdministratorService\";\nimport { WorkerCreateProps, WorkerGetProps, WorkerUpdateProps, WorkerListProps, WorkerService } from \"./WorkerService\";\nimport { DriverCreateProps, DriverGetProps, DriverUpdateProps, DriverListProps, DriverService } from \"./DriverService\";\nimport { RetailerCreateProps, RetailerGetProps, RetailerUpdateProps, RetailerListProps, RetailerService } from \"./RetailerService\";\nimport { MemberCreateProps, MemberGetProps, MemberUpdateProps, MemberListProps, MemberService } from \"./MemberService\";\nimport { AgentCreateProps, AgentGetProps, AgentUpdateProps, AgentListProps, AgentService } from \"./AgentService\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect } from \"@/lib\";\n\nimport { validateLoginPasswordFormat, DefaultServiceProps, throwError } from \"@/utils\";\n\nimport { hashPassword } from \"@/utils\";\nimport { OperatorCreateProps, OperatorGetProps, OperatorListProps, OperatorService, OperatorUpdateProps } from \"./OperatorService\";\n\nimport { ServiceFactory } from \"@/lib\";\n\nexport const userTypes = {\n operator: \"operator\",\n administrator: \"administrator\",\n worker: \"worker\",\n supplier: \"supplier\",\n customer: \"customer\",\n driver: \"driver\",\n retailer: \"retailer\",\n member: \"member\",\n agent: \"agent\",\n} as const\n\nexport type UserType = typeof userTypes[keyof typeof userTypes]\n\nexport type UserServiceProps = DefaultServiceProps & {\n userType: UserType\n};\n\nexport type UserGetProps = QueryGet & {\n id: number,\n overrideUserType?: UserType | \"\"\n includePassword?: boolean,\n skipFilterAccountId?: boolean\n skipFilterUserType?: boolean\n};\n\nexport type UserGetByUsernameProps = QueryGet & {\n username: string,\n overrideUserType?: UserType | \"\"\n includePassword?: boolean,\n skipFilterAccountId?: boolean\n};\n\nexport type UserListProps = QueryList & {\n // id: number,\n includePassword?: boolean\n skipFilterAccountId?: boolean\n skipFilterUserType?: boolean\n};\n\nexport type UserRemoveProps = {\n ids: BigInt[]\n};\n\nexport type UserSuspendProps = {\n ids: BigInt[]\n};\n\nexport type User = {\n loginUsername: string\n loginPassword: string\n address: string\n // contact: string\n contact: {\n countryCode: number; // e.g., 1 for Canada\n phoneNumber: string; // digits only, mobile or landline\n }\n email: string\n firstname: string\n lastname: string\n status: boolean\n parentUserId?: number // optional for all user types\n}\n\nexport type UserOptionalLoginPassword = Omit<User, \"loginPassword\"> & {\n loginPassword?: string\n}\n\nexport type UserCreateProps = {\n userType?: UserType,\n data: {\n user: User\n } & (\n // operator\n {\n operator: Omit<OperatorCreateProps[\"data\"][\"operator\"], \"userId\">,\n } |\n // customer\n {\n customer: Omit<CustomerCreateProps[\"data\"][\"customer\"], \"userId\">,\n } |\n // administrator\n {\n administrator: Omit<AdministratorCreateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerCreateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverCreateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberCreateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // agent\n {\n agent: Omit<AgentCreateProps[\"data\"][\"agent\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerCreateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserUpdateProps = {\n id: number,\n userType?: UserType,\n data: {\n user: UserOptionalLoginPassword\n } & (\n // operator\n {\n operator: Omit<OperatorUpdateProps[\"data\"][\"operator\"], \"userId\">\n } |\n // customer\n {\n customer: Omit<CustomerUpdateProps[\"data\"][\"customer\"], \"userId\">\n } |\n // administrator\n {\n administrator: Omit<AdministratorUpdateProps[\"data\"][\"administrator\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // worker\n {\n worker: Omit<WorkerUpdateProps[\"data\"][\"worker\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // driver\n {\n driver: Omit<DriverUpdateProps[\"data\"][\"driver\"], \"userId\">\n props: {\n locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n }\n } |\n // member\n {\n member: Omit<MemberUpdateProps[\"data\"][\"member\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // agent\n {\n agent: Omit<AgentUpdateProps[\"data\"][\"agent\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n } |\n // retailer\n {\n retailer: Omit<RetailerUpdateProps[\"data\"][\"retailer\"], \"userId\">\n // props: {\n // locationIds: UserPropReplaceProps[\"data\"][\"userProp\"][\"locationIds\"]\n // }\n }\n )\n}\n\nexport type UserReplacePasswordProps = {\n id: number,\n data: {\n unhashLoginPassword: string\n },\n isOperator: boolean\n}\n\nlet mainSqlSelect = {\n [`usr.${ModelUserFields.user_id}`]: \"user_id\",\n [`usr.${ModelUserFields.user_type}`]: \"user_type\",\n [`usr.${ModelUserFields.login_username}`]: \"username\",\n [`usr.${ModelUserFields.firstname}`]: \"firstname\",\n [`usr.${ModelUserFields.lastname}`]: \"lastname\",\n [`CONCAT(usr.${ModelUserFields.contact_country_code}, usr.${ModelUserFields.contact_phone_number})`]: \"contact\",\n [`usr.${ModelUserFields.contact_country_code}`]: \"contact_country_code\",\n [`usr.${ModelUserFields.contact_phone_number}`]: \"contact_phone_number\",\n [`usr.${ModelUserFields.email}`]: \"email\",\n [`usr.${ModelUserFields.address}`]: \"address\",\n [`usr.${ModelUserFields.parent_user_id}`]: \"parent_user_id\",\n [`usr.${ModelUserFields.status}`]: \"status\",\n}\n\nlet defaultSqlSelect = {\n [`usr.${ModelUserFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`usr.${ModelUserFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`usr.${ModelUserFields.isdelete}`]: \"isdelete\",\n [`usr.${ModelUserFields.istrash}`]: \"istrash\",\n [`usr.${ModelUserFields.accountid}`]: \"accountid\",\n}\n\nexport const userParentSqlSelect = {\n [`parentuser.${ModelUserFields.user_id}`]: \"parent_user_id\",\n [`parentuser.${ModelUserFields.login_username}`]: \"parent_username\",\n [`parentuser.${ModelUserFields.user_type}`]: \"parent_user_type\",\n [`parentuser.${ModelUserFields.firstname}`]: \"parent_firstname\",\n [`parentuser.${ModelUserFields.lastname}`]: \"parent_lastname\",\n [`CONCAT(parentuser.${ModelUserFields.contact_country_code}, parentuser.${ModelUserFields.contact_phone_number})`]: \"parent_contact\",\n [`parentuser.${ModelUserFields.contact_country_code}`]: \"parent_contact_country_code\",\n [`parentuser.${ModelUserFields.contact_phone_number}`]: \"parent_contact_phone_number\",\n [`parentuser.${ModelUserFields.email}`]: \"parent_email\",\n [`parentuser.${ModelUserFields.address}`]: \"parent_address\",\n [`parentuser.${ModelUserFields.status}`]: \"parent_user_status\"\n}\n\nconst getCreatePayload = async (\n userType: UserType,\n data: UserCreateProps[\"data\"],\n contact: {\n countryCode: number,\n phoneNumber: string\n }\n) => {\n\n if (\"user\" in data) {\n\n // have to hash the password\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.login_password}`]: await hashPassword(data.user.loginPassword),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact_country_code}`]: contact.countryCode,\n [`${ModelUserFields.contact_phone_number}`]: contact.phoneNumber,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: Boolean(data.user.status),\n [`${ModelUserFields.user_type}`]: `${userType}`,\n ...(data?.user?.parentUserId ? { [`${ModelUserFields.parent_user_id}`]: Number(data.user.parentUserId) } : {})\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = async (\n userType: UserType,\n data: UserUpdateProps[\"data\"],\n contact: {\n countryCode: number,\n phoneNumber: string\n }\n) => {\n\n if (\"user\" in data) {\n\n const newHashPassword = data?.user?.loginPassword ? await hashPassword(data.user.loginPassword) : \"\"\n\n return {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n ...(newHashPassword ? { [`${ModelUserFields.login_password}`]: newHashPassword } : {}),\n [`${ModelUserFields.address}`]: data.user.address,\n [`${ModelUserFields.contact_country_code}`]: contact.countryCode,\n [`${ModelUserFields.contact_phone_number}`]: contact.phoneNumber,\n [`${ModelUserFields.email}`]: data.user.email,\n [`${ModelUserFields.firstname}`]: data.user.firstname,\n [`${ModelUserFields.lastname}`]: data.user.lastname,\n [`${ModelUserFields.status}`]: Boolean(data.user.status),\n [`${ModelUserFields.user_type}`]: `${userType}`,\n ...(data?.user?.parentUserId ? { [`${ModelUserFields.parent_user_id}`]: Number(data.user.parentUserId) } : {})\n }\n }\n\n return false\n\n}\n\n// Example reserved words for username\nexport const loginUsernameReservedWords = [\n \"admin\", \"administrator\", \"root\", \"system\", \"operator\", \"moderator\", \"owner\", \"manager\",\n \"user\", \"users\", \"account\", \"guest\", \"login\", \"logout\", \"signup\", \"register\", \"auth\",\n \"api\", \"www\", \"app\", \"support\", \"help\", \"dashboard\", \"portal\", \"console\", \"control\", \"ops\",\n \"test\", \"demo\", \"beta\", \"alpha\", \"dev\", \"development\", \"staging\", \"prod\", \"production\",\n \"security\", \"privacy\", \"terms\", \"policy\", \"legal\", \"about\", \"company\", \"team\", \"teams\",\n \"billing\", \"payment\", \"invoice\", \"finance\", \"financeadmin\", \"subscription\", \"plan\", \"plans\",\n \"rootadmin\", \"superuser\", \"staff\", \"moderation\", \"systemadmin\", \"sysadmin\", \"internal\",\n \"management\", \"supportdesk\", \"helpdesk\", \"contact\", \"feedback\", \"news\", \"blog\", \"media\",\n \"press\", \"events\", \"calendar\", \"forum\", \"community\", \"chat\", \"messaging\", \"notifications\",\n \"alerts\", \"reports\", \"analytics\", \"metrics\", \"logs\", \"history\", \"archive\", \"backup\",\n \"restore\", \"files\", \"documents\", \"resources\", \"library\", \"gallery\", \"images\", \"videos\",\n \"downloads\", \"uploads\", \"templates\", \"home\", \"index\", \"static\", \"public\", \"webmaster\"\n];\n\n// Zod schema for username\nexport const loginUsernameSchema = z\n .string()\n .min(5, { message: \"Login username must be at least 5 characters\" })\n .max(63, { message: \"Login username must be at most 63 characters\" })\n .regex(\n /^[a-z0-9]([a-z0-9-_]{3,61}[a-z0-9])?$/,\n \"Login username can only contain lowercase letters, numbers, hyphens, and underscores, cannot start or end with a hyphen or underscore\"\n )\n .transform((val) => val.toLowerCase().trim()) // normalize\n .refine((val) => !loginUsernameReservedWords.includes(val), {\n message: \"This login username is reserved. Please choose another one\",\n });\n\nexport const UserService = (props: UserServiceProps) => {\n\n const {\n userType = \"administrator\",\n ...rest\n } = props\n\n const userModel = UserModel({ ...rest })\n const countryModel = CountryModel({ ...rest })\n\n const userPropService = UserPropService({ ...rest, userPropType: \"LOCATION_ID\" })\n const customerService = CustomerService({ ...rest })\n const administratorService = AdministratorService({ ...rest })\n const operatorService = OperatorService({ ...rest })\n const workerService = WorkerService({ ...rest })\n const driverService = DriverService({ ...rest })\n const retailerService = RetailerService({ ...rest })\n const memberService = MemberService({ ...rest })\n const agentService = AgentService({ ...rest })\n\n const validateUserContactPhoneNumber = (val: string) => {\n // Must be numeric\n if (!/^\\d+$/.test(val)) {\n throw new Error(`Contact No. only allowed numbers`);\n }\n\n // Must have realistic length (4 to 15 digits)\n if (val.length < 4 || val.length > 15) {\n throw new Error(`Contact No. length must be between 4 and 15 digits`);\n }\n\n return true;\n };\n\n const validateUserContactCountryCode = async (countryCode: number) => {\n\n // 1. Load active countries\n const activeCountries: ModelCountry[] = await countryModel.list({\n where: {\n [`${ModelCountryFields.isdelete}`]: false,\n [`${ModelCountryFields.istrash}`]: false,\n [`${ModelCountryFields.status}`]: true\n }\n })\n\n // Check if country code exists\n const exists = activeCountries.some(c => c.phone_code === countryCode);\n\n if (!exists) {\n throw new Error(`Invalid country code: ${countryCode}`);\n }\n\n return true; // valid\n\n }\n\n const validateUserContact = async (countryCode: number, phoneNumber: string) => {\n\n try {\n // validate the phone number without country code\n validateUserContactPhoneNumber(phoneNumber)\n\n // validate user contact country code\n await validateUserContactCountryCode(countryCode)\n\n return true\n\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n throw new Error(`Invalid user contact no.: ${msg}, provided: ${countryCode} ${phoneNumber}`);\n }\n\n }\n\n const validateLoginUsernameFormat = (loginUsername: string) => {\n try {\n return loginUsernameSchema.parse(loginUsername); // throws if invalid\n } catch (err) {\n if (err instanceof z.ZodError) {\n throw new Error(\n `Invalid login username: \"${loginUsername}\". ` +\n err.errors.map((e) => e.message).join(\"; \")\n );\n }\n throw err;\n }\n };\n\n const createUser = async ({ data, userType: overrideUserType }: UserCreateProps) => {\n\n const _userType = overrideUserType || userType\n\n // validate the credential contact no\n const userLoginUsername = data.user.loginUsername\n const userLoginPassword = data.user.loginPassword\n const userContactCountryCode = data.user.contact.countryCode\n const userContactPhoneNumber = data.user.contact.phoneNumber\n\n // validate the contact no only can be digit in text only\n // validate the country code in prefix\n await validateUserContact(userContactCountryCode, userContactPhoneNumber)\n\n // validate login username\n validateLoginUsernameFormat(userLoginUsername)\n\n // validate login password\n validateLoginPasswordFormat(userLoginPassword)\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.accountid}`]: Number(rest.accountId),\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n\n // validation before insertion\n // if (_userType === \"member\" && \"member\" in data) {\n\n // const memberOwnerUserId = data?.member?.ownerUserId ?? \"\";\n\n // validate owner user id\n // if (memberOwnerUserId) {\n // await memberService.validateMemberOwnerUserId(memberOwnerUserId)\n // }\n\n // }\n\n // if (_userType === \"agent\" && \"agent\" in data) {\n\n // const agentOwnerUserId = data?.agent?.ownerUserId ?? \"\";\n\n // validate owner user id\n // if (agentOwnerUserId) {\n // await agentService.validateAgentOwnerUserId(agentOwnerUserId)\n // }\n\n // }\n\n const _data = await getCreatePayload(\n _userType,\n data,\n {\n countryCode: userContactCountryCode,\n phoneNumber: userContactPhoneNumber\n }\n )\n\n if (!_data) {\n throw new Error(`Invalid create payload: ${JSON.stringify(_data)}`);\n }\n\n // create user\n let responseUser = await userModel.create({ data: _data })\n\n let newUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerCreateProps[\"data\"] = {\n customer: {\n ...data.customer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create customer\n await customerService.createCustomer({ data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataAdministrator: AdministratorCreateProps[\"data\"] = {\n administrator: {\n ...data.administrator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create administrator\n await administratorService.createAdministrator({ data: dataAdministrator })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorCreateProps[\"data\"] = {\n operator: {\n ...data.operator,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create operator\n await operatorService.createOperator({ data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerCreateProps[\"data\"] = {\n worker: {\n ...data.worker,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create worker\n await workerService.createWorker({ data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverCreateProps[\"data\"] = {\n driver: {\n ...data.driver,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create driver\n await driverService.createDriver({ data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(newUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberCreateProps[\"data\"] = {\n member: {\n ...data.member,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create member\n await memberService.createMember({ userId: Number(newUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"agent\" && \"agent\" in data) {\n\n let dataAgent: AgentCreateProps[\"data\"] = {\n agent: {\n ...data.agent,\n // userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create agent\n await agentService.createAgent({ userId: Number(newUserId), data: dataAgent })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(newUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await agentService.getAgent({ id: Number(newUserId), datatypes: [] })\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerCreateProps[\"data\"] = {\n retailer: {\n ...data.retailer,\n userId: Number(newUserId) ?? \"\"\n }\n }\n\n // create retailer\n await retailerService.createRetailer({ data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(newUserId), datatypes: [] })\n }\n\n return response\n }\n\n const updateUser = async ({ id, data, userType: overrideUserType }: UserUpdateProps) => {\n\n const _userType = overrideUserType || userType\n\n // validate the credential contact no\n const userLoginUsername = data.user.loginUsername\n const userLoginPassword = data.user?.loginPassword ?? \"\"\n const userContactCountryCode = data.user.contact.countryCode\n const userContactPhoneNumber = data.user.contact.phoneNumber\n\n // validate the contact no only can be digit in text only\n // validate the country code in prefix\n await validateUserContact(userContactCountryCode, userContactPhoneNumber)\n\n // validate login username\n validateLoginUsernameFormat(userLoginUsername)\n\n // validate login password\n if (userLoginPassword) {\n validateLoginPasswordFormat(userLoginPassword)\n }\n\n // check the username duplicated?\n const checkUsername = await userModel.list({\n limit: 1,\n offset: 0,\n orderBy: {\n [`${ModelUserFields.user_id}`]: \"asc\"\n },\n include: [],\n where: {\n [`${ModelUserFields.login_username}`]: data.user.loginUsername,\n [`${ModelUserFields.isdelete}`]: false,\n [`${ModelUserFields.istrash}`]: false,\n [`${ModelUserFields.accountid}`]: rest.accountId,\n },\n })\n\n // console.log('ch', checkUsername)\n\n if (checkUsername.length > 0) {\n if (Number(checkUsername[0]?.user_id) !== Number(id)) { // if not self user id\n throwError(`Duplicated username: ${data.user.loginUsername}(${checkUsername[0]?.user_type})`)\n }\n }\n\n // validation before insertion\n // if (_userType === \"member\" && \"member\" in data) {\n // }\n\n const _data = await getUpdatePayload(\n _userType,\n data,\n {\n countryCode: userContactCountryCode,\n phoneNumber: userContactPhoneNumber\n }\n )\n\n if (!_data) {\n throw new Error(`Invalid update payload: ${JSON.stringify(_data)}`);\n }\n\n // update user\n let responseUser = await userModel.update({ id, data: _data })\n\n let updateUserId = responseUser.user_id\n\n let response: any = {}\n\n if (_userType === \"customer\" && \"customer\" in data) {\n\n let dataCustomer: CustomerUpdateProps[\"data\"] = {\n customer: {\n ...data.customer\n }\n }\n\n await customerService.updateCustomer({ userId: Number(updateUserId), data: dataCustomer })\n\n response = await customerService.getCustomer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"operator\" && \"operator\" in data) {\n\n let dataOperator: OperatorUpdateProps[\"data\"] = {\n operator: {\n ...data.operator\n }\n }\n\n await operatorService.updateOperator({ userId: Number(updateUserId), data: dataOperator })\n\n response = await operatorService.getOperator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"administrator\" && \"administrator\" in data) {\n\n let dataCustomer: AdministratorUpdateProps[\"data\"] = {\n administrator: {\n ...data.administrator\n }\n }\n\n await administratorService.updateAdministrator({ userId: Number(updateUserId), data: dataCustomer })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await administratorService.getAdministrator({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"worker\" && \"worker\" in data) {\n\n let dataWorker: WorkerUpdateProps[\"data\"] = {\n worker: {\n ...data.worker\n }\n }\n\n await workerService.updateWorker({ userId: Number(updateUserId), data: dataWorker })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await workerService.getWorker({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"driver\" && \"driver\" in data) {\n\n let dataDriver: DriverUpdateProps[\"data\"] = {\n driver: {\n ...data.driver\n }\n }\n\n await driverService.updateDriver({ userId: Number(updateUserId), data: dataDriver })\n\n // replace user prop\n await userPropService.replaceUserProp({\n userPropType: \"LOCATION_ID\",\n data: {\n userProp: {\n userId: Number(updateUserId),\n locationIds: data.props.locationIds\n }\n }\n })\n\n response = await driverService.getDriver({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"member\" && \"member\" in data) {\n\n let dataMember: MemberUpdateProps[\"data\"] = {\n member: {\n ...data.member\n }\n }\n\n await memberService.updateMember({ userId: Number(updateUserId), data: dataMember })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await memberService.getMember({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"agent\" && \"agent\" in data) {\n\n let dataAgent: AgentUpdateProps[\"data\"] = {\n agent: {\n ...data.agent\n }\n }\n\n await agentService.updateAgent({ userId: Number(updateUserId), data: dataAgent })\n\n // replace user prop\n // await userPropService.replaceUserProp({\n // userPropType: \"LOCATION_ID\",\n // data: {\n // userProp: {\n // userId: Number(updateUserId),\n // locationIds: data.props.locationIds\n // }\n // }\n // })\n\n response = await agentService.getAgent({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n if (_userType === \"retailer\" && \"retailer\" in data) {\n\n let dataRetailer: RetailerUpdateProps[\"data\"] = {\n retailer: {\n ...data.retailer\n }\n }\n\n await retailerService.updateRetailer({ userId: Number(updateUserId), data: dataRetailer })\n\n response = await retailerService.getRetailer({ id: Number(updateUserId), datatypes: [] })\n\n }\n\n return response\n }\n\n const getUser = async ({ id, datatypes = [], includePassword = false, overrideUserType = \"\", skipFilterAccountId = false, skipFilterUserType = false }: UserGetProps) => {\n\n let data: any = {}\n\n if (skipFilterUserType === true) {\n\n let { data } = await listUsers({\n includePassword,\n limit: 1,\n offset: 0,\n filters: [{ field: \"user_id\", operator: \"=\", value: id }],\n sortfield: \"user_id\",\n sortorder: \"ASC\",\n datatypes,\n skipFilterAccountId,\n skipFilterUserType\n })\n\n return data[0] ?? null;\n }\n\n const _userType = overrideUserType ? overrideUserType : userType\n\n if (_userType === \"customer\") {\n data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"operator\") {\n data = await operatorService.getOperator({ id, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"administrator\") {\n data = await administratorService.getAdministrator({ id, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword, skipFilterAccountId })\n }\n\n if (_userType === \"worker\") {\n data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"driver\") {\n data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"member\") {\n data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"agent\") {\n data = await agentService.getAgent({ id, datatypes: datatypes as AgentGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"retailer\") {\n data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n }\n\n if (!data) {\n throw new Error(`Invalid id: ${id}`);\n }\n\n return data\n };\n\n const getUserByUsername = async ({ username, datatypes = [], includePassword = false, overrideUserType = \"\", skipFilterAccountId = false }: UserGetByUsernameProps) => {\n\n let data: any = {}\n\n const _userType = overrideUserType ? overrideUserType : userType\n\n // if (_userType === \"customer\") {\n // data = await customerService.getCustomer({ id, datatypes: datatypes as CustomerGetProps[\"datatypes\"], includePassword })\n // }\n\n if (_userType === \"operator\") {\n data = await operatorService.getOperatorByUsername({ username, datatypes: datatypes as OperatorGetProps[\"datatypes\"], includePassword })\n }\n\n if (_userType === \"administrator\") {\n data = await administratorService.getAdministratorByUsername({ username, datatypes: datatypes as AdministratorGetProps[\"datatypes\"], includePassword, skipFilterAccountId })\n }\n\n // if (_userType === \"worker\") {\n // data = await workerService.getWorker({ id, datatypes: datatypes as WorkerGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"driver\") {\n // data = await driverService.getDriver({ id, datatypes: datatypes as DriverGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"member\") {\n // data = await memberService.getMember({ id, datatypes: datatypes as MemberGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"agent\") {\n // data = await agentService.getAgent({ id, datatypes: datatypes as AgentGetProps[\"datatypes\"], includePassword })\n // }\n\n // if (_userType === \"retailer\") {\n // data = await retailerService.getRetailer({ id, datatypes: datatypes as RetailerGetProps[\"datatypes\"], includePassword })\n // }\n\n if (!data) {\n throw new Error(`Invalid username: ${username}`);\n }\n\n return data\n };\n\n const listUsers = async ({ limit, offset, filters = [], sortfield, sortorder, datatypes, includePassword = false, skipFilterAccountId = false, skipFilterUserType = false }: UserListProps) => {\n\n let data: any[] = [];\n let total = 0;\n\n if (skipFilterUserType === true) {\n\n mainSqlSelect = {\n ...mainSqlSelect,\n ...(includePassword ? { [`usr.${ModelUserFields.login_password}`]: \"password\" } : {}),\n }\n\n let sqlSelect = [\n `COUNT(usr.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"usr\", \"users\", \"parentuser\", [\"usr.parent_user_id = parentuser.user_id\", \"parentuser.isdelete = false\", \"parentuser.istrash = false\"]),\n buildSqlRelation(\"left\", \"usr\", \"users\", \"creator\", [\"usr.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"usr\", \"users\", \"updater\", [\"usr.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [\n ...Object.keys(mainSqlSelect),\n ...Object.keys(defaultSqlSelect)\n ]\n\n let filterColumns = {\n ...mainSqlSelect,\n ...defaultSqlSelect\n }\n\n let sqlWhere = [\n `usr.isdelete = false`,\n `usr.istrash = false`,\n ...(filters.length ? [buildSqlWhere(filters, filterColumns)?.where] : []),\n ]\n\n let sqlOrderby = buildSqlOrderBy(sortfield, sortorder)\n let sqlLimitOffset = buildSqlLimitOffset(limit, offset)\n\n const sqlRaw = buildSqlRawSelect({\n tableName: \"users\",\n mainAlias: \"usr\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset,\n skipFilterAccountId\n })\n\n data = await userModel.raw(sqlRaw)\n\n const response = {\n data: data.map(({ filtered_count, ...rest }) => rest),\n total: data.length ? Number(data[0].filtered_count) : 0\n }\n\n return response\n }\n\n if (userType === \"customer\") {\n ({ data, total } = await customerService.listCustomers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as CustomerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"operator\") {\n ({ data, total } = await operatorService.listOperators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as OperatorListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"administrator\") {\n ({ data, total } = await administratorService.listAdministrators(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AdministratorListProps[\"datatypes\"], skipFilterAccountId }\n ))\n }\n\n if (userType === \"worker\") {\n ({ data, total } = await workerService.listWorkers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as WorkerListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"driver\") {\n ({ data, total } = await driverService.listDrivers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as DriverListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"member\") {\n ({ data, total } = await memberService.listMembers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as MemberListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"agent\") {\n ({ data, total } = await agentService.listAgents(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as AgentListProps[\"datatypes\"] }\n ))\n }\n\n if (userType === \"retailer\") {\n ({ data, total } = await retailerService.listRetailers(\n { includePassword, limit, offset, filters, sortfield, sortorder, datatypes: datatypes as RetailerListProps[\"datatypes\"] }\n ))\n }\n\n return {\n data,\n total\n }\n };\n\n const removeUsers = async ({ ids }: UserRemoveProps) => {\n\n if (!ids.length) throwError('id is required');\n\n let response: any[] = []\n\n if (userType === \"customer\") {\n response = await customerService.removeCustomers({ userIds: ids })\n }\n\n if (userType === \"operator\") {\n response = await operatorService.removeOperators({ userIds: ids })\n }\n\n if (userType === \"administrator\") {\n\n // have to check the ids is is_owner account\n const { data: administrators } = await administratorService.listAdministrators({\n limit: 9999,\n offset: 0,\n filters: [{\n field: `${ModelAdministratorFields.user_id}`,\n operator: \"where_in\",\n value: ids\n }],\n sortfield: `${ModelAdministratorFields.administrator_id}`,\n sortorder: \"ASC\",\n datatypes: []\n })\n\n const ownerAdministrators = administrators.filter(i => i.is_owner === true)\n\n if (ownerAdministrators.length > 0) {\n throw new Error(`Cannot delete on administrator owner user ids: ${ownerAdministrators.map(i => i.user_id)}`);\n }\n\n response = await administratorService.removeAdministrators({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"worker\") {\n response = await workerService.removeWorkers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"driver\") {\n response = await driverService.removeDrivers({ userIds: ids })\n await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"member\") {\n response = await memberService.removeMembers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"agent\") {\n response = await agentService.removeAgents({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n if (userType === \"retailer\") {\n response = await retailerService.removeRetailers({ userIds: ids })\n // await userPropService.removeUserProps({ userIds: ids })\n }\n\n // remove user\n let responseUser = await userModel.remove({ ids: ids.map(i => Number(i)) })\n\n response.forEach((i, index) => {\n i.user = responseUser[index]\n })\n\n return response\n };\n\n const replacePassword = async ({ id, data, isOperator = false }: UserReplacePasswordProps) => {\n\n const passwordUserModel = UserModel({\n ...rest,\n ...(isOperator === true ? { isOperator } : {})\n })\n\n // update user password\n let responseUser = await passwordUserModel.update({\n id,\n data: {\n login_password: await hashPassword(data?.unhashLoginPassword)\n }\n })\n\n let updateUserId = responseUser.user_id\n\n let response = await getUser({ id: Number(updateUserId), includePassword: false, datatypes: [] })\n\n return response\n }\n\n const suspendUsers = async ({ ids }: UserSuspendProps) => {\n\n if (!ids.length) throwError('id is required');\n\n // change users status\n let response = await userModel.update({\n where: {\n [`${ModelUserFields.user_id}`]: {\n in: ids.map((i: any) => Number(i))\n }\n },\n data: {\n [`${ModelUserFields.status}`]: false\n }\n })\n\n const { login_password, ...safeResponse } = response;\n\n return safeResponse\n };\n\n const getDataTypes = () => {\n\n let data: any[] = [];\n let total = 0;\n\n if (userType === \"customer\") {\n data = customerService.getDataTypes()\n }\n\n if (userType === \"operator\") {\n data = operatorService.getDataTypes()\n }\n\n if (userType === \"administrator\") {\n data = administratorService.getDataTypes()\n }\n\n if (userType === \"worker\") {\n data = workerService.getDataTypes()\n }\n\n if (userType === \"driver\") {\n data = driverService.getDataTypes()\n }\n\n if (userType === \"member\") {\n data = memberService.getDataTypes()\n }\n\n if (userType === \"agent\") {\n data = agentService.getDataTypes()\n }\n\n if (userType === \"retailer\") {\n data = retailerService.getDataTypes()\n }\n\n return data\n };\n\n // return {\n // createUser,\n // updateUser,\n // getUser,\n // listUsers,\n // removeUsers,\n // replacePassword,\n // getUserDataTypes\n // }\n\n const methodConfigs = {\n getUser: { fn: getUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user\" },\n getUserByUsername: { fn: getUserByUsername, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user by username\" },\n listUsers: { fn: listUsers, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"list users\" },\n createUser: { fn: createUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"create user\" },\n updateUser: { fn: updateUser, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"update user\" },\n replacePassword: { fn: replacePassword, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"replace user password\" },\n removeUsers: { fn: removeUsers, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"remove users\" },\n suspendUsers: { fn: suspendUsers, allowUserTypes: [\"any\"] as const, actionName: \"suspend users\" },\n getDataTypes: { fn: getDataTypes, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"get user datatypes\" },\n validateUserContact: { fn: validateUserContact, allowUserTypes: [\"operator\", \"administrator\"] as const, actionName: \"validate user contact\" },\n };\n\n return ServiceFactory(\"UserService\", rest, methodConfigs);\n\n}\n\n"]}
|
|
@@ -12,6 +12,7 @@ exports.workerDataTypes = {
|
|
|
12
12
|
zoneCount: "zone_count",
|
|
13
13
|
workerInjectionFields: "worker_injection_fields",
|
|
14
14
|
file: "file",
|
|
15
|
+
parentUser: "parent_user"
|
|
15
16
|
};
|
|
16
17
|
const getCreatePayload = (data) => {
|
|
17
18
|
if ("worker" in data) {
|
|
@@ -46,26 +47,27 @@ let userSqlSelect = {
|
|
|
46
47
|
[`usr.${models_1.ModelUserFields.contact_phone_number}`]: "contact_phone_number",
|
|
47
48
|
[`usr.${models_1.ModelUserFields.email}`]: "email",
|
|
48
49
|
[`usr.${models_1.ModelUserFields.address}`]: "address",
|
|
49
|
-
[`usr.${models_1.ModelUserFields.
|
|
50
|
+
[`usr.${models_1.ModelUserFields.parent_user_id}`]: "parent_user_id",
|
|
51
|
+
[`usr.${models_1.ModelUserFields.status}`]: "status"
|
|
50
52
|
};
|
|
51
53
|
let defaultSqlSelect = {
|
|
52
|
-
[`wrk.${models_1.ModelWorkerFields.createdatetime}`]: "createdatetime",
|
|
53
|
-
[`creator.${models_1.ModelUserFields.login_username}`]: "createusername",
|
|
54
|
-
[`wrk.${models_1.ModelWorkerFields.updatedatetime}`]: "updatedatetime",
|
|
55
|
-
[`updater.${models_1.ModelUserFields.login_username}`]: "updateusername",
|
|
56
|
-
[`wrk.${models_1.ModelWorkerFields.isdelete}`]: "isdelete",
|
|
57
|
-
[`wrk.${models_1.ModelWorkerFields.istrash}`]: "istrash",
|
|
58
|
-
[`wrk.${models_1.ModelWorkerFields.accountid}`]: "accountid",
|
|
54
|
+
[`wrk.${models_1.ModelWorkerFields.createdatetime} `]: "createdatetime",
|
|
55
|
+
[`creator.${models_1.ModelUserFields.login_username} `]: "createusername",
|
|
56
|
+
[`wrk.${models_1.ModelWorkerFields.updatedatetime} `]: "updatedatetime",
|
|
57
|
+
[`updater.${models_1.ModelUserFields.login_username} `]: "updateusername",
|
|
58
|
+
[`wrk.${models_1.ModelWorkerFields.isdelete} `]: "isdelete",
|
|
59
|
+
[`wrk.${models_1.ModelWorkerFields.istrash} `]: "istrash",
|
|
60
|
+
[`wrk.${models_1.ModelWorkerFields.accountid} `]: "accountid",
|
|
59
61
|
};
|
|
60
62
|
let userPropLocationSqlSelect = {
|
|
61
63
|
[`COALESCE(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
STRING_AGG(usrprop_location.${models_1.ModelUserPropFields.props_id}:: text, ', '),
|
|
65
|
+
''
|
|
66
|
+
)`]: "location_id",
|
|
65
67
|
[`COALESCE(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
STRING_AGG(location.${models_1.ModelLocationFields.location_name}:: text, ', '),
|
|
69
|
+
''
|
|
70
|
+
)`]: "location_name",
|
|
69
71
|
};
|
|
70
72
|
const WorkerService = (props) => {
|
|
71
73
|
const { ...rest } = props;
|
|
@@ -75,7 +77,7 @@ const WorkerService = (props) => {
|
|
|
75
77
|
const createWorker = async ({ data }) => {
|
|
76
78
|
const _data = getCreatePayload(data);
|
|
77
79
|
if (!_data) {
|
|
78
|
-
throw new Error(`Invalid create worker payload: ${JSON.stringify(_data)}`);
|
|
80
|
+
throw new Error(`Invalid create worker payload: ${JSON.stringify(_data)} `);
|
|
79
81
|
}
|
|
80
82
|
let response = await workerModel.create({ data: _data });
|
|
81
83
|
return response;
|
|
@@ -83,9 +85,9 @@ const WorkerService = (props) => {
|
|
|
83
85
|
const updateWorker = async ({ userId, data }) => {
|
|
84
86
|
const _data = getUpdatePayload(data);
|
|
85
87
|
if (!_data) {
|
|
86
|
-
throw new Error(`Invalid update worker payload: ${JSON.stringify(_data)}`);
|
|
88
|
+
throw new Error(`Invalid update worker payload: ${JSON.stringify(_data)} `);
|
|
87
89
|
}
|
|
88
|
-
let response = await workerModel.update({ where: { [`${models_1.ModelWorkerFields.user_id}`]: userId }, data: _data });
|
|
90
|
+
let response = await workerModel.update({ where: { [`${models_1.ModelWorkerFields.user_id} `]: userId }, data: _data });
|
|
89
91
|
return response;
|
|
90
92
|
};
|
|
91
93
|
const getWorker = async ({ id, datatypes = [], includePassword = false }) => {
|
|
@@ -105,11 +107,11 @@ const WorkerService = (props) => {
|
|
|
105
107
|
if (includePassword === true) {
|
|
106
108
|
userSqlSelect = {
|
|
107
109
|
...userSqlSelect,
|
|
108
|
-
[`usr.${models_1.ModelUserFields.login_password}`]: "password",
|
|
110
|
+
[`usr.${models_1.ModelUserFields.login_password} `]: "password",
|
|
109
111
|
};
|
|
110
112
|
}
|
|
111
113
|
else {
|
|
112
|
-
delete userSqlSelect[`usr.${models_1.ModelUserFields.login_password}`];
|
|
114
|
+
delete userSqlSelect[`usr.${models_1.ModelUserFields.login_password} `];
|
|
113
115
|
}
|
|
114
116
|
let sqlSelect = [
|
|
115
117
|
`COUNT(wrk.*) OVER() as filtered_count`,
|
|
@@ -145,31 +147,37 @@ const WorkerService = (props) => {
|
|
|
145
147
|
sqlRelation = [...sqlRelation, (0, lib_1.buildSqlRelation)("left", "wrk", "user_injection_fields", "uif", ["wrk.user_id = uif.user_id", "uif.field_ref = 'user'", "uif.field_module = 'worker'", "uif.isdelete = false", "uif.istrash = false"])];
|
|
146
148
|
sqlGroupBy = [...sqlGroupBy, ...Object.keys(workerInjectionFieldSqlSelect)];
|
|
147
149
|
}
|
|
150
|
+
if (datatypes.includes(exports.workerDataTypes.parentUser)) {
|
|
151
|
+
filterColumns = { ...filterColumns, ...services_1.userParentSqlSelect };
|
|
152
|
+
sqlRelation = [...sqlRelation, (0, lib_1.buildSqlRelation)("left", "wrk", "users", "parentuser", ["usr.parent_user_id = parentuser.user_id", "parentuser.isdelete = false", "parentuser.istrash = false"])];
|
|
153
|
+
sqlSelect = [...sqlSelect, (0, lib_1.buildSqlSelect)(``, services_1.userParentSqlSelect)];
|
|
154
|
+
sqlGroupBy = [...sqlGroupBy, ...Object.keys(services_1.userParentSqlSelect)];
|
|
155
|
+
}
|
|
148
156
|
if (datatypes.includes(exports.workerDataTypes.location)) {
|
|
149
157
|
let locationSqlSelect = {
|
|
150
158
|
[`COALESCE(
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
159
|
+
JSON_AGG(
|
|
160
|
+
DISTINCT JSONB_BUILD_OBJECT(
|
|
161
|
+
'${models_1.ModelLocationFields.location_id}', location.location_id,
|
|
162
|
+
'${models_1.ModelLocationFields.location_code}', location.location_code,
|
|
163
|
+
'${models_1.ModelLocationFields.location_name}', location.location_name,
|
|
164
|
+
'${models_1.ModelLocationFields.location_type}', location.location_type,
|
|
165
|
+
'${models_1.ModelLocationFields.address_1}', location.address_1,
|
|
166
|
+
'${models_1.ModelLocationFields.address_2}', location.address_2,
|
|
167
|
+
'${models_1.ModelLocationFields.area_id}', location.area_id,
|
|
168
|
+
'${models_1.ModelLocationFields.country_id}', location.country_id,
|
|
169
|
+
'${models_1.ModelLocationFields.state_id}', location.state_id,
|
|
170
|
+
'${models_1.ModelLocationFields.postcode}', location.postcode,
|
|
171
|
+
'${models_1.ModelLocationFields.is_default}', location.is_default,
|
|
172
|
+
'${models_1.ModelLocationFields.person_contact}', location.person_contact,
|
|
173
|
+
'${models_1.ModelLocationFields.person_name}', location.person_contact,
|
|
174
|
+
'${models_1.ModelLocationFields.person_email}', location.person_email,
|
|
175
|
+
'${models_1.ModelLocationFields.isdelete}', location.isdelete,
|
|
176
|
+
'${models_1.ModelLocationFields.istrash}', location.istrash
|
|
177
|
+
)
|
|
178
|
+
) FILTER(WHERE location.location_id IS NOT NULL AND location.isdelete = false AND location.istrash = false),
|
|
179
|
+
'[]'
|
|
180
|
+
)`]: "locations"
|
|
173
181
|
};
|
|
174
182
|
filterColumns = { ...filterColumns, ...locationSqlSelect };
|
|
175
183
|
sqlSelect = [...sqlSelect, (0, lib_1.buildSqlSelect)(``, locationSqlSelect)];
|
|
@@ -177,7 +185,7 @@ const WorkerService = (props) => {
|
|
|
177
185
|
}
|
|
178
186
|
if (datatypes.includes(exports.workerDataTypes.locationCount)) {
|
|
179
187
|
let locationCountSqlSelect = {
|
|
180
|
-
[`COUNT(DISTINCT location.${models_1.ModelLocationFields.location_id})::INT`]: "location_count"
|
|
188
|
+
[`COUNT(DISTINCT location.${models_1.ModelLocationFields.location_id}):: INT`]: "location_count"
|
|
181
189
|
};
|
|
182
190
|
filterColumns = { ...filterColumns, ...locationCountSqlSelect };
|
|
183
191
|
sqlSelect = [...sqlSelect, (0, lib_1.buildSqlSelect)(``, locationCountSqlSelect)];
|
|
@@ -185,7 +193,7 @@ const WorkerService = (props) => {
|
|
|
185
193
|
}
|
|
186
194
|
// if (datatypes.includes(customerDataTypes.branchUserCount)) {
|
|
187
195
|
// let branchUserCountSqlSelect = {
|
|
188
|
-
// [`COUNT(DISTINCT brnusrcount.${ModelBranchUserFields.branch_user_id})::INT`]: "branch_user_count"
|
|
196
|
+
// [`COUNT(DISTINCT brnusrcount.${ ModelBranchUserFields.branch_user_id }):: INT`]: "branch_user_count"
|
|
189
197
|
// }
|
|
190
198
|
// filterColumns = { ...filterColumns, ...branchUserCountSqlSelect }
|
|
191
199
|
// sqlSelect = [...sqlSelect, buildSqlSelect(``, branchUserCountSqlSelect)]
|
|
@@ -219,7 +227,7 @@ const WorkerService = (props) => {
|
|
|
219
227
|
const removeWorkers = async ({ userIds }) => {
|
|
220
228
|
if (!userIds.length)
|
|
221
229
|
(0, utils_1.throwError)('userIds is required');
|
|
222
|
-
const response = await workerModel.remove({ where: { [`${models_1.ModelWorkerFields.user_id}`]: { in: userIds } } });
|
|
230
|
+
const response = await workerModel.remove({ where: { [`${models_1.ModelWorkerFields.user_id} `]: { in: userIds } } });
|
|
223
231
|
return response;
|
|
224
232
|
};
|
|
225
233
|
const getDataTypes = () => {
|