storemw-core-api 1.0.154 → 1.0.155

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.
Files changed (59) hide show
  1. package/dist/services/access_control/AccessControlRoleService.js +1 -1
  2. package/dist/services/access_control/AccessControlRoleService.js.map +1 -1
  3. package/dist/services/access_key/AccessKeyService.js +1 -1
  4. package/dist/services/access_key/AccessKeyService.js.map +1 -1
  5. package/dist/services/account/AccountService.js +1 -1
  6. package/dist/services/account/AccountService.js.map +1 -1
  7. package/dist/services/business/BusinessService.js +1 -1
  8. package/dist/services/business/BusinessService.js.map +1 -1
  9. package/dist/services/injection_field/InjectionFieldService.js +1 -1
  10. package/dist/services/injection_field/InjectionFieldService.js.map +1 -1
  11. package/dist/services/item/ItemBrandService.js +1 -1
  12. package/dist/services/item/ItemBrandService.js.map +1 -1
  13. package/dist/services/item/ItemCategoryService.js +1 -1
  14. package/dist/services/item/ItemCategoryService.js.map +1 -1
  15. package/dist/services/item/ItemItemService.js +1 -1
  16. package/dist/services/item/ItemItemService.js.map +1 -1
  17. package/dist/services/item/ItemProductService.js +1 -1
  18. package/dist/services/item/ItemProductService.js.map +1 -1
  19. package/dist/services/item/ItemUomService.js +1 -1
  20. package/dist/services/item/ItemUomService.js.map +1 -1
  21. package/dist/services/location/LocationLocationService.js +1 -1
  22. package/dist/services/location/LocationLocationService.js.map +1 -1
  23. package/dist/services/location/LocationRackService.js +1 -1
  24. package/dist/services/location/LocationRackService.js.map +1 -1
  25. package/dist/services/location/LocationSlotService.js +1 -1
  26. package/dist/services/location/LocationSlotService.js.map +1 -1
  27. package/dist/services/one_time_code/OneTimeCodeService.js +1 -1
  28. package/dist/services/one_time_code/OneTimeCodeService.js.map +1 -1
  29. package/dist/services/region/AreaService.js +1 -1
  30. package/dist/services/region/AreaService.js.map +1 -1
  31. package/dist/services/region/CountryService.js +1 -1
  32. package/dist/services/region/CountryService.js.map +1 -1
  33. package/dist/services/region/StateService.js +1 -1
  34. package/dist/services/region/StateService.js.map +1 -1
  35. package/dist/services/scheduler/SchedulerLogService.js +1 -1
  36. package/dist/services/scheduler/SchedulerLogService.js.map +1 -1
  37. package/dist/services/subscription/account/AccountSubscribeService.js +1 -1
  38. package/dist/services/subscription/account/AccountSubscribeService.js.map +1 -1
  39. package/dist/services/subscription/plan/SubscribePlanService.js +1 -1
  40. package/dist/services/subscription/plan/SubscribePlanService.js.map +1 -1
  41. package/dist/services/user/AdministratorService.js +1 -1
  42. package/dist/services/user/AdministratorService.js.map +1 -1
  43. package/dist/services/user/AgentService.js +1 -1
  44. package/dist/services/user/AgentService.js.map +1 -1
  45. package/dist/services/user/CustomerService.js +1 -1
  46. package/dist/services/user/CustomerService.js.map +1 -1
  47. package/dist/services/user/DriverService.js +1 -1
  48. package/dist/services/user/DriverService.js.map +1 -1
  49. package/dist/services/user/MemberService.js +1 -1
  50. package/dist/services/user/MemberService.js.map +1 -1
  51. package/dist/services/user/OperatorService.js +1 -1
  52. package/dist/services/user/OperatorService.js.map +1 -1
  53. package/dist/services/user/RetailerService.js +1 -1
  54. package/dist/services/user/RetailerService.js.map +1 -1
  55. package/dist/services/user/UserService.js +1 -1
  56. package/dist/services/user/UserService.js.map +1 -1
  57. package/dist/services/user/WorkerService.js +1 -1
  58. package/dist/services/user/WorkerService.js.map +1 -1
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"RetailerService.js","sourceRoot":"","sources":["../../../src/services/user/RetailerService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelUserBranchFields,\n RetailerModel,\n ModelRetailerFields,\n ModelBranchUserFields,\n} from \"@/models\";\n\nimport { InjectionFieldService, userParentSqlSelect } from \"@/services\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect } from \"@/lib\";\n\nexport type UserType = \"retailer\"\n\nexport const retailerDataTypes = {\n retailerInjectionFields: \"retailer_injection_fields\",\n business: \"business\",\n file: \"file\",\n branch: \"branch\",\n member: \"member\",\n branchCount: \"branch_count\",\n memberCount: \"member_count\",\n shippingAddress: \"shipping_address\",\n shippingAddressCount: \"shipping_address_count\",\n branchUserCount: \"branch_user_count\",\n parentUser: \"parent_user\"\n}\n\nexport type RetailerDataType = keyof typeof retailerDataTypes;\n\nexport type RetailerServiceProps = DefaultServiceProps & {};\n\nexport type RetailerGetProps = QueryGet & {\n id: number,\n includePassword?: boolean,\n datatypes: RetailerDataType[]\n};\n\nexport type RetailerListProps = QueryList & {\n includePassword?: boolean,\n datatypes: RetailerDataType[]\n};\n\nexport type RetailerRemoveProps = {\n userIds: BigInt[]\n};\n\nexport type RetailerCreateProps = {\n data:\n // retailer\n {\n retailer: {\n userId: number,\n accountCode: string,\n code: string\n companyName: string\n gstNo: string\n regNo: string\n remark: string\n }\n }\n}\n\nexport type RetailerUpdateProps = {\n userId: number,\n data:\n // retailer\n {\n retailer: {\n // userId: number,\n accountCode: string,\n code: string\n companyName: string\n gstNo: string\n regNo: string\n remark: string\n }\n }\n}\n\nconst getCreatePayload = (data: RetailerCreateProps[\"data\"]) => {\n\n if (\"retailer\" in data) {\n\n return {\n [`${ModelRetailerFields.user_id}`]: data.retailer.userId,\n [`${ModelRetailerFields.account_code}`]: data.retailer.accountCode,\n [`${ModelRetailerFields.code}`]: data.retailer.code,\n [`${ModelRetailerFields.company_name}`]: data.retailer.companyName,\n [`${ModelRetailerFields.gst_no}`]: data.retailer.gstNo,\n [`${ModelRetailerFields.reg_no}`]: data.retailer.regNo,\n [`${ModelRetailerFields.remark}`]: data.retailer.remark,\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = (data: RetailerUpdateProps[\"data\"]) => {\n\n if (\"retailer\" in data) {\n\n return {\n // [`${ModelRetailerFields.user_id}`]: data.retailer.userId,\n [`${ModelRetailerFields.account_code}`]: data.retailer.accountCode,\n [`${ModelRetailerFields.code}`]: data.retailer.code,\n [`${ModelRetailerFields.company_name}`]: data.retailer.companyName,\n [`${ModelRetailerFields.gst_no}`]: data.retailer.gstNo,\n [`${ModelRetailerFields.reg_no}`]: data.retailer.regNo,\n [`${ModelRetailerFields.remark}`]: data.retailer.remark,\n }\n }\n\n return false\n\n}\n\nlet mainSqlSelect = {\n [`rtl.${ModelRetailerFields.user_id}`]: \"user_id\",\n [`rtl.${ModelRetailerFields.retailer_id}`]: \"retailer_id\",\n [`rtl.${ModelRetailerFields.account_code}`]: \"account_code\",\n [`rtl.${ModelRetailerFields.code}`]: \"code\",\n [`rtl.${ModelRetailerFields.company_name}`]: \"company_name\",\n [`rtl.${ModelRetailerFields.gst_no}`]: \"gst_no\",\n [`rtl.${ModelRetailerFields.reg_no}`]: \"reg_no\",\n [`rtl.${ModelRetailerFields.remark}`]: \"remark\"\n}\n\nlet userSqlSelect = {\n [`usr.${ModelUserFields.login_username}`]: \"username\",\n [`usr.${ModelUserFields.user_type}`]: \"user_type\",\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 [`rtl.${ModelRetailerFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`rtl.${ModelRetailerFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`rtl.${ModelRetailerFields.isdelete}`]: \"isdelete\",\n [`rtl.${ModelRetailerFields.istrash}`]: \"istrash\",\n [`rtl.${ModelRetailerFields.accountid}`]: \"accountid\",\n}\n\nexport const RetailerService = (props: RetailerServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const retailerModel = RetailerModel({ ...rest })\n\n const injectionFieldService = InjectionFieldService({ ...rest, injectionFieldType: \"item\" })\n\n const createRetailer = async ({ data }: RetailerCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create retailer payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await retailerModel.create({ data: _data })\n\n return response\n }\n\n const updateRetailer = async ({ userId, data }: RetailerUpdateProps) => {\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update retailer payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await retailerModel.update({ where: { [`${ModelRetailerFields.user_id}`]: userId }, data: _data })\n\n return response\n }\n\n const getRetailer = async ({ id, datatypes = [], includePassword = false }: RetailerGetProps) => {\n\n let { data } = await listRetailers({\n includePassword,\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelRetailerFields.user_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelRetailerFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listRetailers = async ({\n includePassword = false,\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: RetailerListProps) => {\n\n let data = []\n\n if (includePassword === true) {\n userSqlSelect = {\n ...userSqlSelect,\n [`usr.${ModelUserFields.login_password}`]: \"password\",\n }\n } else {\n delete userSqlSelect[`usr.${ModelUserFields.login_password}`];\n }\n\n let sqlSelect = [\n `COUNT(rtl.*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, userSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"usr\", [\"rtl.user_id = usr.user_id\", \"usr.isdelete = false\", \"usr.istrash = false\"]),\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"creator\", [\"rtl.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"updater\", [\"rtl.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [...Object.keys(mainSqlSelect), ...Object.keys(userSqlSelect), ...Object.keys(defaultSqlSelect)]\n\n let filterColumns = { ...mainSqlSelect, ...userSqlSelect, ...defaultSqlSelect }\n\n if (datatypes.includes(retailerDataTypes.retailerInjectionFields)) {\n\n let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"user\", \"retailer\")\n\n const retailerInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"uif\", activeInjectionFields)\n\n // const retailerInjectionFieldSqlSelect = activeInjectionFields.reduce((acc, col) => {\n // acc[`uif.${col}`] = `${col}`;\n // return acc;\n // }, {} as Record<string, string>);\n\n filterColumns = { ...filterColumns, ...retailerInjectionFieldSqlSelect }\n\n sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, retailerInjectionFieldSqlSelect)] : [])]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"user_injection_fields\", \"uif\", [\"rtl.user_id = uif.user_id\", \"uif.field_ref = 'user'\", \"uif.isdelete = false\", \"uif.istrash = false\"])]\n sqlGroupBy = [...sqlGroupBy, ...Object.keys(retailerInjectionFieldSqlSelect)]\n }\n\n if (datatypes.includes(retailerDataTypes.branch)) {\n\n let branchSqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT JSONB_BUILD_OBJECT(\n '${ModelUserBranchFields.type}', brn.type,\n '${ModelUserBranchFields.branch_id}', brn.branch_id,\n '${ModelUserBranchFields.branch_code}', brn.branch_code,\n '${ModelUserBranchFields.branch_name}', brn.branch_name,\n '${ModelUserBranchFields.address_1}', brn.address_1,\n '${ModelUserBranchFields.address_2}', brn.address_2,\n '${ModelUserBranchFields.area}', brn.area,\n '${ModelUserBranchFields.area_id}', brn.area_id,\n '${ModelUserBranchFields.branch_contact}', brn.branch_contact,\n '${ModelUserBranchFields.branch_email}', brn.branch_email,\n '${ModelUserBranchFields.country_id}', brn.country_id,\n '${ModelUserBranchFields.is_hq}', brn.is_hq,\n '${ModelUserBranchFields.remark}', brn.remark,\n '${ModelUserBranchFields.pic_contact}', brn.pic_contact,\n '${ModelUserBranchFields.pic_email}', brn.pic_email,\n '${ModelUserBranchFields.pic_contact}', brn.pic_contact,\n '${ModelUserBranchFields.postcode}', brn.postcode,\n '${ModelUserBranchFields.state_id}', brn.state_id,\n '${ModelUserBranchFields.status}', brn.status,\n '${ModelUserBranchFields.user_id}', brn.user_id\n )\n ) FILTER (WHERE brn.branch_id IS NOT NULL AND brn.isdelete = false AND brn.istrash = false), \n '[]'\n )`]: \"branches\"\n }\n\n filterColumns = { ...filterColumns, ...branchSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brn\", [\"rtl.user_id = brn.user_id\", \"brn.isdelete = false\", \"brn.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.shippingAddress)) {\n\n let branchShippingAddressSqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT JSONB_BUILD_OBJECT(\n '${ModelUserBranchFields.type}', brnship.type,\n '${ModelUserBranchFields.branch_id}', brnship.branch_id,\n '${ModelUserBranchFields.branch_code}', brnship.branch_code,\n '${ModelUserBranchFields.branch_name}', brnship.branch_name,\n '${ModelUserBranchFields.address_1}', brnship.address_1,\n '${ModelUserBranchFields.address_2}', brnship.address_2,\n '${ModelUserBranchFields.area}', brnship.area,\n '${ModelUserBranchFields.area_id}', brnship.area_id,\n '${ModelUserBranchFields.branch_contact}', brnship.branch_contact,\n '${ModelUserBranchFields.branch_email}', brnship.branch_email,\n '${ModelUserBranchFields.country_id}', brnship.country_id,\n '${ModelUserBranchFields.is_hq}', brnship.is_hq,\n '${ModelUserBranchFields.remark}', brnship.remark,\n '${ModelUserBranchFields.pic_contact}', brnship.pic_contact,\n '${ModelUserBranchFields.pic_email}', brnship.pic_email,\n '${ModelUserBranchFields.pic_contact}', brnship.pic_contact,\n '${ModelUserBranchFields.postcode}', brnship.postcode,\n '${ModelUserBranchFields.state_id}', brnship.state_id,\n '${ModelUserBranchFields.status}', brnship.status,\n '${ModelUserBranchFields.user_id}', brnship.user_id\n )\n ) FILTER (WHERE brnship.branch_id IS NOT NULL AND brnship.isdelete = false AND brnship.istrash = false AND brnship.type = 'shipping_address'), \n '[]'\n )`]: \"shipping_address\"\n }\n\n filterColumns = { ...filterColumns, ...branchShippingAddressSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchShippingAddressSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brnship\", [\"rtl.user_id = brnship.user_id\", \"brnship.isdelete = false\", \"brnship.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.branchCount)) {\n\n let branchCountSqlSelect = {\n [`COUNT(DISTINCT brncount.${ModelUserBranchFields.branch_id})::INT`]: \"branch_count\"\n }\n\n filterColumns = { ...filterColumns, ...branchCountSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchCountSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brncount\", [\"rtl.user_id = brncount.user_id\", \"brncount.isdelete = false\", \"brncount.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.branchUserCount)) {\n\n let branchUserCountSqlSelect = {\n [`COUNT(DISTINCT brnusrcount.${ModelBranchUserFields.branch_user_id})::INT`]: \"branch_user_count\"\n }\n\n filterColumns = { ...filterColumns, ...branchUserCountSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchUserCountSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branch_users\", \"brnusrcount\", [\"rtl.user_id = brnusrcount.user_id\", \"brnusrcount.isdelete = false\", \"brnusrcount.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.parentUser)) {\n\n filterColumns = { ...filterColumns, ...userParentSqlSelect }\n\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"wrk\", \"users\", \"parentuser\", [\"usr.parent_user_id = parentuser.user_id\", \"parentuser.isdelete = false\", \"parentuser.istrash = false\"])]\n sqlSelect = [...sqlSelect, buildSqlSelect(``, userParentSqlSelect)]\n sqlGroupBy = [...sqlGroupBy, ...Object.keys(userParentSqlSelect)]\n\n }\n\n let sqlWhere = [\n `rtl.isdelete = false`,\n `rtl.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: \"retailers\",\n mainAlias: \"rtl\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n data = await retailerModel.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\n const removeRetailers = async ({ userIds }: RetailerRemoveProps) => {\n\n if (!userIds.length) throwError('userIds is required');\n\n const response = await retailerModel.remove({ where: { [`${ModelRetailerFields.user_id}`]: { in: userIds } } });\n\n return response\n };\n\n const getDataTypes = () => {\n return Object.values(retailerDataTypes);\n }\n\n return {\n createRetailer,\n updateRetailer,\n getRetailer,\n listRetailers,\n removeRetailers,\n getDataTypes\n }\n\n}\n\n"]}
1
+ {"version":3,"file":"RetailerService.js","sourceRoot":"","sources":["../../../src/services/user/RetailerService.ts"],"names":[],"mappings":"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","sourcesContent":["import { logError, throwError } from \"@/utils\";\n\nimport {\n ModelUserFields,\n ModelUserBranchFields,\n RetailerModel,\n ModelRetailerFields,\n ModelBranchUserFields,\n} from \"@/models\";\n\nimport { InjectionFieldService, userParentSqlSelect } from \"@/services\";\n\nimport { QueryList, QueryGet } from \"@/schema/common\";\n\nimport { DefaultServiceProps } from \"@/utils\";\n\nimport { buildSqlRelation, buildSqlRawSelect, buildSqlWhere, buildSqlSelect, buildSqlLimitOffset, buildSqlOrderBy, buildInjectionFieldsSqlSelect } from \"@/lib\";\n\nexport type UserType = \"retailer\"\n\nexport const retailerDataTypes = {\n retailerInjectionFields: \"retailer_injection_fields\",\n business: \"business\",\n file: \"file\",\n branch: \"branch\",\n member: \"member\",\n branchCount: \"branch_count\",\n memberCount: \"member_count\",\n shippingAddress: \"shipping_address\",\n shippingAddressCount: \"shipping_address_count\",\n branchUserCount: \"branch_user_count\",\n parentUser: \"parent_user\"\n}\n\nexport type RetailerDataType = keyof typeof retailerDataTypes;\n\nexport type RetailerServiceProps = DefaultServiceProps & {};\n\nexport type RetailerGetProps = QueryGet & {\n id: number,\n includePassword?: boolean,\n datatypes: RetailerDataType[]\n};\n\nexport type RetailerListProps = QueryList & {\n includePassword?: boolean,\n datatypes: RetailerDataType[]\n};\n\nexport type RetailerRemoveProps = {\n userIds: BigInt[]\n};\n\nexport type RetailerCreateProps = {\n data:\n // retailer\n {\n retailer: {\n userId: number,\n accountCode: string,\n code: string\n companyName: string\n gstNo: string\n regNo: string\n remark: string\n }\n }\n}\n\nexport type RetailerUpdateProps = {\n userId: number,\n data:\n // retailer\n {\n retailer: {\n // userId: number,\n accountCode: string,\n code: string\n companyName: string\n gstNo: string\n regNo: string\n remark: string\n }\n }\n}\n\nconst getCreatePayload = (data: RetailerCreateProps[\"data\"]) => {\n\n if (\"retailer\" in data) {\n\n return {\n [`${ModelRetailerFields.user_id}`]: data.retailer.userId,\n [`${ModelRetailerFields.account_code}`]: data.retailer.accountCode,\n [`${ModelRetailerFields.code}`]: data.retailer.code,\n [`${ModelRetailerFields.company_name}`]: data.retailer.companyName,\n [`${ModelRetailerFields.gst_no}`]: data.retailer.gstNo,\n [`${ModelRetailerFields.reg_no}`]: data.retailer.regNo,\n [`${ModelRetailerFields.remark}`]: data.retailer.remark,\n }\n }\n\n return false\n\n}\n\nconst getUpdatePayload = (data: RetailerUpdateProps[\"data\"]) => {\n\n if (\"retailer\" in data) {\n\n return {\n // [`${ModelRetailerFields.user_id}`]: data.retailer.userId,\n [`${ModelRetailerFields.account_code}`]: data.retailer.accountCode,\n [`${ModelRetailerFields.code}`]: data.retailer.code,\n [`${ModelRetailerFields.company_name}`]: data.retailer.companyName,\n [`${ModelRetailerFields.gst_no}`]: data.retailer.gstNo,\n [`${ModelRetailerFields.reg_no}`]: data.retailer.regNo,\n [`${ModelRetailerFields.remark}`]: data.retailer.remark,\n }\n }\n\n return false\n\n}\n\nlet mainSqlSelect = {\n [`rtl.${ModelRetailerFields.user_id}`]: \"user_id\",\n [`rtl.${ModelRetailerFields.retailer_id}`]: \"retailer_id\",\n [`rtl.${ModelRetailerFields.account_code}`]: \"account_code\",\n [`rtl.${ModelRetailerFields.code}`]: \"code\",\n [`rtl.${ModelRetailerFields.company_name}`]: \"company_name\",\n [`rtl.${ModelRetailerFields.gst_no}`]: \"gst_no\",\n [`rtl.${ModelRetailerFields.reg_no}`]: \"reg_no\",\n [`rtl.${ModelRetailerFields.remark}`]: \"remark\"\n}\n\nlet userSqlSelect = {\n [`usr.${ModelUserFields.login_username}`]: \"username\",\n [`usr.${ModelUserFields.user_type}`]: \"user_type\",\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 [`rtl.${ModelRetailerFields.createdatetime}`]: \"createdatetime\",\n [`creator.${ModelUserFields.login_username}`]: \"createusername\",\n [`rtl.${ModelRetailerFields.updatedatetime}`]: \"updatedatetime\",\n [`updater.${ModelUserFields.login_username}`]: \"updateusername\",\n [`rtl.${ModelRetailerFields.isdelete}`]: \"isdelete\",\n [`rtl.${ModelRetailerFields.istrash}`]: \"istrash\",\n [`rtl.${ModelRetailerFields.accountid}`]: \"accountid\",\n}\n\nexport const RetailerService = (props: RetailerServiceProps) => {\n\n const {\n ...rest\n } = props\n\n const retailerModel = RetailerModel({ ...rest })\n\n const injectionFieldService = InjectionFieldService({ ...rest, injectionFieldType: \"item\" })\n\n const createRetailer = async ({ data }: RetailerCreateProps) => {\n\n const _data = getCreatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid create retailer payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await retailerModel.create({ data: _data })\n\n return response\n }\n\n const updateRetailer = async ({ userId, data }: RetailerUpdateProps) => {\n\n const _data = getUpdatePayload(data)\n\n if (!_data) {\n throw new Error(`Invalid update retailer payload: ${JSON.stringify(_data)}`);\n }\n\n let response = await retailerModel.update({ where: { [`${ModelRetailerFields.user_id}`]: userId }, data: _data })\n\n return response\n }\n\n const getRetailer = async ({ id, datatypes = [], includePassword = false }: RetailerGetProps) => {\n\n let { data } = await listRetailers({\n includePassword,\n limit: 1,\n offset: 0,\n filters: [{ field: `${ModelRetailerFields.user_id}`, operator: \"=\", value: id }],\n sortfield: `${ModelRetailerFields.user_id}`,\n sortorder: \"ASC\",\n datatypes\n })\n\n return data[0] ?? null;\n\n };\n\n const listRetailers = async ({\n includePassword = false,\n limit,\n offset,\n filters,\n sortfield,\n sortorder,\n datatypes = []\n }: RetailerListProps) => {\n\n let data = []\n\n if (includePassword === true) {\n userSqlSelect = {\n ...userSqlSelect,\n [`usr.${ModelUserFields.login_password}`]: \"password\",\n }\n } else {\n delete userSqlSelect[`usr.${ModelUserFields.login_password}`];\n }\n\n let sqlSelect = [\n `COUNT(*) OVER() as filtered_count`,\n buildSqlSelect(``, mainSqlSelect),\n buildSqlSelect(``, userSqlSelect),\n buildSqlSelect(``, defaultSqlSelect)\n ]\n\n let sqlRelation = [\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"usr\", [\"rtl.user_id = usr.user_id\", \"usr.isdelete = false\", \"usr.istrash = false\"]),\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"creator\", [\"rtl.createuserid = creator.user_id\", \"creator.isdelete = false\", \"creator.istrash = false\"]),\n buildSqlRelation(\"left\", \"rtl\", \"users\", \"updater\", [\"rtl.updateuserid = updater.user_id\", \"updater.isdelete = false\", \"updater.istrash = false\"])\n ]\n\n let sqlGroupBy: string[] = [...Object.keys(mainSqlSelect), ...Object.keys(userSqlSelect), ...Object.keys(defaultSqlSelect)]\n\n let filterColumns = { ...mainSqlSelect, ...userSqlSelect, ...defaultSqlSelect }\n\n if (datatypes.includes(retailerDataTypes.retailerInjectionFields)) {\n\n let activeInjectionFields = await injectionFieldService.listActiveInjectionFields(\"user\", \"retailer\")\n\n const retailerInjectionFieldSqlSelect = buildInjectionFieldsSqlSelect(\"uif\", activeInjectionFields)\n\n // const retailerInjectionFieldSqlSelect = activeInjectionFields.reduce((acc, col) => {\n // acc[`uif.${col}`] = `${col}`;\n // return acc;\n // }, {} as Record<string, string>);\n\n filterColumns = { ...filterColumns, ...retailerInjectionFieldSqlSelect }\n\n sqlSelect = [...sqlSelect, ...(activeInjectionFields.length > 0 ? [buildSqlSelect(``, retailerInjectionFieldSqlSelect)] : [])]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"user_injection_fields\", \"uif\", [\"rtl.user_id = uif.user_id\", \"uif.field_ref = 'user'\", \"uif.isdelete = false\", \"uif.istrash = false\"])]\n sqlGroupBy = [...sqlGroupBy, ...Object.keys(retailerInjectionFieldSqlSelect)]\n }\n\n if (datatypes.includes(retailerDataTypes.branch)) {\n\n let branchSqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT JSONB_BUILD_OBJECT(\n '${ModelUserBranchFields.type}', brn.type,\n '${ModelUserBranchFields.branch_id}', brn.branch_id,\n '${ModelUserBranchFields.branch_code}', brn.branch_code,\n '${ModelUserBranchFields.branch_name}', brn.branch_name,\n '${ModelUserBranchFields.address_1}', brn.address_1,\n '${ModelUserBranchFields.address_2}', brn.address_2,\n '${ModelUserBranchFields.area}', brn.area,\n '${ModelUserBranchFields.area_id}', brn.area_id,\n '${ModelUserBranchFields.branch_contact}', brn.branch_contact,\n '${ModelUserBranchFields.branch_email}', brn.branch_email,\n '${ModelUserBranchFields.country_id}', brn.country_id,\n '${ModelUserBranchFields.is_hq}', brn.is_hq,\n '${ModelUserBranchFields.remark}', brn.remark,\n '${ModelUserBranchFields.pic_contact}', brn.pic_contact,\n '${ModelUserBranchFields.pic_email}', brn.pic_email,\n '${ModelUserBranchFields.pic_contact}', brn.pic_contact,\n '${ModelUserBranchFields.postcode}', brn.postcode,\n '${ModelUserBranchFields.state_id}', brn.state_id,\n '${ModelUserBranchFields.status}', brn.status,\n '${ModelUserBranchFields.user_id}', brn.user_id\n )\n ) FILTER (WHERE brn.branch_id IS NOT NULL AND brn.isdelete = false AND brn.istrash = false), \n '[]'\n )`]: \"branches\"\n }\n\n filterColumns = { ...filterColumns, ...branchSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brn\", [\"rtl.user_id = brn.user_id\", \"brn.isdelete = false\", \"brn.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.shippingAddress)) {\n\n let branchShippingAddressSqlSelect = {\n [`COALESCE(\n JSON_AGG(\n DISTINCT JSONB_BUILD_OBJECT(\n '${ModelUserBranchFields.type}', brnship.type,\n '${ModelUserBranchFields.branch_id}', brnship.branch_id,\n '${ModelUserBranchFields.branch_code}', brnship.branch_code,\n '${ModelUserBranchFields.branch_name}', brnship.branch_name,\n '${ModelUserBranchFields.address_1}', brnship.address_1,\n '${ModelUserBranchFields.address_2}', brnship.address_2,\n '${ModelUserBranchFields.area}', brnship.area,\n '${ModelUserBranchFields.area_id}', brnship.area_id,\n '${ModelUserBranchFields.branch_contact}', brnship.branch_contact,\n '${ModelUserBranchFields.branch_email}', brnship.branch_email,\n '${ModelUserBranchFields.country_id}', brnship.country_id,\n '${ModelUserBranchFields.is_hq}', brnship.is_hq,\n '${ModelUserBranchFields.remark}', brnship.remark,\n '${ModelUserBranchFields.pic_contact}', brnship.pic_contact,\n '${ModelUserBranchFields.pic_email}', brnship.pic_email,\n '${ModelUserBranchFields.pic_contact}', brnship.pic_contact,\n '${ModelUserBranchFields.postcode}', brnship.postcode,\n '${ModelUserBranchFields.state_id}', brnship.state_id,\n '${ModelUserBranchFields.status}', brnship.status,\n '${ModelUserBranchFields.user_id}', brnship.user_id\n )\n ) FILTER (WHERE brnship.branch_id IS NOT NULL AND brnship.isdelete = false AND brnship.istrash = false AND brnship.type = 'shipping_address'), \n '[]'\n )`]: \"shipping_address\"\n }\n\n filterColumns = { ...filterColumns, ...branchShippingAddressSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchShippingAddressSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brnship\", [\"rtl.user_id = brnship.user_id\", \"brnship.isdelete = false\", \"brnship.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.branchCount)) {\n\n let branchCountSqlSelect = {\n [`COUNT(DISTINCT brncount.${ModelUserBranchFields.branch_id})::INT`]: \"branch_count\"\n }\n\n filterColumns = { ...filterColumns, ...branchCountSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchCountSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branches\", \"brncount\", [\"rtl.user_id = brncount.user_id\", \"brncount.isdelete = false\", \"brncount.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.branchUserCount)) {\n\n let branchUserCountSqlSelect = {\n [`COUNT(DISTINCT brnusrcount.${ModelBranchUserFields.branch_user_id})::INT`]: \"branch_user_count\"\n }\n\n filterColumns = { ...filterColumns, ...branchUserCountSqlSelect }\n\n sqlSelect = [...sqlSelect, buildSqlSelect(``, branchUserCountSqlSelect)]\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"rtl\", \"branch_users\", \"brnusrcount\", [\"rtl.user_id = brnusrcount.user_id\", \"brnusrcount.isdelete = false\", \"brnusrcount.istrash = false\"])]\n\n }\n\n if (datatypes.includes(retailerDataTypes.parentUser)) {\n\n filterColumns = { ...filterColumns, ...userParentSqlSelect }\n\n sqlRelation = [...sqlRelation, buildSqlRelation(\"left\", \"wrk\", \"users\", \"parentuser\", [\"usr.parent_user_id = parentuser.user_id\", \"parentuser.isdelete = false\", \"parentuser.istrash = false\"])]\n sqlSelect = [...sqlSelect, buildSqlSelect(``, userParentSqlSelect)]\n sqlGroupBy = [...sqlGroupBy, ...Object.keys(userParentSqlSelect)]\n\n }\n\n let sqlWhere = [\n `rtl.isdelete = false`,\n `rtl.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: \"retailers\",\n mainAlias: \"rtl\",\n accountId: rest.accountId,\n sqlSelect,\n sqlRelation,\n sqlWhere,\n sqlGroupBy,\n sqlOrderby,\n sqlLimitOffset\n })\n\n data = await retailerModel.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\n const removeRetailers = async ({ userIds }: RetailerRemoveProps) => {\n\n if (!userIds.length) throwError('userIds is required');\n\n const response = await retailerModel.remove({ where: { [`${ModelRetailerFields.user_id}`]: { in: userIds } } });\n\n return response\n };\n\n const getDataTypes = () => {\n return Object.values(retailerDataTypes);\n }\n\n return {\n createRetailer,\n updateRetailer,\n getRetailer,\n listRetailers,\n removeRetailers,\n getDataTypes\n }\n\n}\n\n"]}
@@ -651,7 +651,7 @@ const UserService = (props) => {
651
651
  ...(includePassword ? { [`usr.${models_1.ModelUserFields.login_password}`]: "password" } : {}),
652
652
  };
653
653
  let sqlSelect = [
654
- `COUNT(usr.*) OVER() as filtered_count`,
654
+ `COUNT(*) OVER() as filtered_count`,
655
655
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
656
656
  (0, lib_1.buildSqlSelect)(``, defaultSqlSelect)
657
657
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"UserService.js","sourceRoot":"","sources":["../../../src/services/user/UserService.ts"],"names":[],"mappings":";;;AAAA,qCAOkB;AAElB,6BAAwB;AAExB,uDAA0E;AAC1E,uDAAmI;AACnI,iEAAiK;AACjK,mDAAuH;AACvH,mDAAuH;AACvH,uDAAmI;AACnI,mDAAuH;AACvH,iDAAiH;AAGjH,+BAAgK;AAEhK,mCAAuF;AAEvF,mCAAuC;AACvC,uDAAmI;AAEnI,+BAAuC;AAE1B,QAAA,SAAS,GAAG;IACrB,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACR,CAAA;AAuLV,IAAI,aAAa,GAAG;IAChB,CAAC,OAAO,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAC7C,CAAC,OAAO,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACjD,CAAC,OAAO,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU;IACrD,CAAC,OAAO,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;IACjD,CAAC,OAAO,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IAC/C,CAAC,cAAc,wBAAe,CAAC,oBAAoB,SAAS,wBAAe,CAAC,oBAAoB,GAAG,CAAC,EAAE,SAAS;IAC/G,CAAC,OAAO,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,sBAAsB;IACvE,CAAC,OAAO,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,sBAAsB;IACvE,CAAC,OAAO,wBAAe,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO;IACzC,CAAC,OAAO,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAC7C,CAAC,OAAO,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC3D,CAAC,OAAO,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ;CAC9C,CAAA;AAED,IAAI,gBAAgB,GAAG;IACnB,CAAC,OAAO,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC3D,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC3D,CAAC,WAAW,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,gBAAgB;IAC/D,CAAC,OAAO,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;IAC/C,CAAC,OAAO,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS;IAC7C,CAAC,OAAO,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW;CACpD,CAAA;AAEY,QAAA,mBAAmB,GAAG;IAC/B,CAAC,cAAc,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,gBAAgB;IAC3D,CAAC,cAAc,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,iBAAiB;IACnE,CAAC,cAAc,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,kBAAkB;IAC/D,CAAC,cAAc,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,kBAAkB;IAC/D,CAAC,cAAc,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,iBAAiB;IAC7D,CAAC,qBAAqB,wBAAe,CAAC,oBAAoB,gBAAgB,wBAAe,CAAC,oBAAoB,GAAG,CAAC,EAAE,gBAAgB;IACpI,CAAC,cAAc,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,6BAA6B;IACrF,CAAC,cAAc,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,6BAA6B;IACrF,CAAC,cAAc,wBAAe,CAAC,KAAK,EAAE,CAAC,EAAE,cAAc;IACvD,CAAC,cAAc,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,gBAAgB;IAC3D,CAAC,cAAc,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,oBAAoB;CACjE,CAAA;AAED,MAAM,gBAAgB,GAAG,KAAK,EAC1B,QAAkB,EAClB,IAA6B,EAC7B,OAGC,EACH,EAAE;IAEA,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAEjB,4BAA4B;QAE5B,OAAO;YACH,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YAC9D,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;YAClF,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YACjD,CAAC,GAAG,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW;YAChE,CAAC,GAAG,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW;YAChE,CAAC,GAAG,wBAAe,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YAC7C,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YACrD,CAAC,GAAG,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YACnD,CAAC,GAAG,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACxD,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE;YAC/C,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjH,CAAA;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAEhB,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,KAAK,EAC1B,QAAkB,EAClB,IAA6B,EAC7B,OAGC,EACH,EAAE;IAEA,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QAEjB,MAAM,eAAe,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,IAAA,oBAAY,EAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEpG,OAAO;YACH,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;YAC9D,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;YACjD,CAAC,GAAG,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW;YAChE,CAAC,GAAG,wBAAe,CAAC,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,WAAW;YAChE,CAAC,GAAG,wBAAe,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK;YAC7C,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;YACrD,CAAC,GAAG,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YACnD,CAAC,GAAG,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACxD,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE;YAC/C,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjH,CAAA;IACL,CAAC;IAED,OAAO,KAAK,CAAA;AAEhB,CAAC,CAAA;AAED,sCAAsC;AACzB,QAAA,0BAA0B,GAAG;IACtC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;IACvF,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM;IACpF,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK;IAC1F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY;IACtF,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO;IACtF,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO;IAC3F,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;IACtF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACvF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe;IACzF,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ;IACnF,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ;IACtF,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW;CACxF,CAAC;AAEF,0BAA0B;AACb,QAAA,mBAAmB,GAAG,OAAC;KAC/B,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;KACnE,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;KACpE,KAAK,CACF,uCAAuC,EACvC,uIAAuI,CAC1I;KACA,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY;KACzD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,kCAA0B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACxD,OAAO,EAAE,4DAA4D;CACxE,CAAC,CAAC;AAEA,MAAM,WAAW,GAAG,CAAC,KAAuB,EAAE,EAAE;IAEnD,MAAM,EACF,QAAQ,GAAG,eAAe,EAC1B,GAAG,IAAI,EACV,GAAG,KAAK,CAAA;IAET,MAAM,SAAS,GAAG,IAAA,kBAAS,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,YAAY,GAAG,IAAA,qBAAY,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAE9C,MAAM,eAAe,GAAG,IAAA,iCAAe,EAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAA;IACjF,MAAM,eAAe,GAAG,IAAA,iCAAe,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,oBAAoB,GAAG,IAAA,2CAAoB,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAC9D,MAAM,eAAe,GAAG,IAAA,iCAAe,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,IAAA,6BAAa,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG,IAAA,6BAAa,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,eAAe,GAAG,IAAA,iCAAe,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IACpD,MAAM,aAAa,GAAG,IAAA,6BAAa,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,IAAA,2BAAY,EAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAE9C,MAAM,8BAA8B,GAAG,CAAC,GAAW,EAAE,EAAE;QACnD,kBAAkB;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QAED,8CAA8C;QAC9C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,8BAA8B,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;QAEjE,2BAA2B;QAC3B,MAAM,eAAe,GAAmB,MAAM,YAAY,CAAC,IAAI,CAAC;YAC5D,KAAK,EAAE;gBACH,CAAC,GAAG,2BAAkB,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK;gBACzC,CAAC,GAAG,2BAAkB,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;gBACxC,CAAC,GAAG,2BAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI;aACzC;SACJ,CAAC,CAAA;QAEF,+BAA+B;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,WAAW,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,QAAQ;IAEzB,CAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAmB,EAAE,WAAmB,EAAE,EAAE;QAE3E,IAAI,CAAC;YACD,iDAAiD;YACjD,8BAA8B,CAAC,WAAW,CAAC,CAAA;YAE3C,qCAAqC;YACrC,MAAM,8BAA8B,CAAC,WAAW,CAAC,CAAA;YAEjD,OAAO,IAAI,CAAA;QAEf,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,eAAe,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;QACjG,CAAC;IAEL,CAAC,CAAA;IAED,MAAM,2BAA2B,GAAG,CAAC,aAAqB,EAAE,EAAE;QAC1D,IAAI,CAAC;YACD,OAAO,2BAAmB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,oBAAoB;QACzE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,GAAG,YAAY,OAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACX,4BAA4B,aAAa,KAAK;oBAC9C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C,CAAC;YACN,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAmB,EAAE,EAAE;QAE/E,MAAM,SAAS,GAAG,gBAAgB,IAAI,QAAQ,CAAA;QAE9C,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;QACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;QACjD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QAE5D,yDAAyD;QACzD,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;QAEzE,0BAA0B;QAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;QAE9C,0BAA0B;QAC1B,IAAA,mCAA2B,EAAC,iBAAiB,CAAC,CAAA;QAE9C,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE;gBACL,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;aACxC;YACD,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACH,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;gBAC9D,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;gBACxD,CAAC,GAAG,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK;gBACtC,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;aACxC;SACJ,CAAC,CAAA;QAEF,mCAAmC;QAEnC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;YAAE,IAAA,kBAAU,EAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAA;QAE3H,8BAA8B;QAC9B,oDAAoD;QAEpD,6DAA6D;QAE7D,yBAAyB;QACzB,2BAA2B;QAC3B,uEAAuE;QACvE,IAAI;QAEJ,IAAI;QAEJ,kDAAkD;QAElD,+DAA+D;QAE/D,yBAAyB;QACzB,0BAA0B;QAC1B,oEAAoE;QACpE,IAAI;QAEJ,IAAI;QAEJ,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAChC,SAAS,EACT,IAAI,EACJ;YACI,WAAW,EAAE,sBAAsB;YACnC,WAAW,EAAE,sBAAsB;SACtC,CACJ,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,cAAc;QACd,IAAI,YAAY,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAE1D,IAAI,SAAS,GAAG,YAAY,CAAC,OAAO,CAAA;QAEpC,IAAI,QAAQ,GAAQ,EAAE,CAAA;QAEtB,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;oBAChB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,kBAAkB;YAClB,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE5D,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAC1F,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;YAE3D,IAAI,iBAAiB,GAAqC;gBACtD,aAAa,EAAE;oBACX,GAAG,IAAI,CAAC,aAAa;oBACrB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,uBAAuB;YACvB,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;YAE3E,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;wBACzB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACpG,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;oBAChB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,kBAAkB;YAClB,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE5D,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAC1F,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;oBACd,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,gBAAgB;YAChB,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEtD,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;wBACzB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;oBACd,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,gBAAgB;YAChB,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEtD,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC;wBACzB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;oBACd,kCAAkC;iBACrC;aACJ,CAAA;YAED,gBAAgB;YAChB,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEjF,oBAAoB;YACpB,0CAA0C;YAC1C,mCAAmC;YACnC,cAAc;YACd,sBAAsB;YACtB,yCAAyC;YACzC,kDAAkD;YAClD,YAAY;YACZ,QAAQ;YACR,KAAK;YAEL,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAE3C,IAAI,SAAS,GAA6B;gBACtC,KAAK,EAAE;oBACH,GAAG,IAAI,CAAC,KAAK;oBACb,kCAAkC;iBACrC;aACJ,CAAA;YAED,eAAe;YACf,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;YAE9E,oBAAoB;YACpB,0CAA0C;YAC1C,mCAAmC;YACnC,cAAc;YACd,sBAAsB;YACtB,yCAAyC;YACzC,kDAAkD;YAClD,YAAY;YACZ,QAAQ;YACR,KAAK;YAEL,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QACpF,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;oBAChB,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBAClC;aACJ,CAAA;YAED,kBAAkB;YAClB,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE5D,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAC1F,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAmB,EAAE,EAAE;QAEnF,MAAM,SAAS,GAAG,gBAAgB,IAAI,QAAQ,CAAA;QAE9C,qCAAqC;QACrC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAA;QACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAA;QACxD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QAC5D,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAA;QAE5D,yDAAyD;QACzD,sCAAsC;QACtC,MAAM,mBAAmB,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,CAAA;QAEzE,0BAA0B;QAC1B,2BAA2B,CAAC,iBAAiB,CAAC,CAAA;QAE9C,0BAA0B;QAC1B,IAAI,iBAAiB,EAAE,CAAC;YACpB,IAAA,mCAA2B,EAAC,iBAAiB,CAAC,CAAA;QAClD,CAAC;QAED,iCAAiC;QACjC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC;YACvC,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,OAAO,EAAE;gBACL,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;aACxC;YACD,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACH,CAAC,GAAG,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;gBAC9D,CAAC,GAAG,wBAAe,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK;gBACtC,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK;gBACrC,CAAC,GAAG,wBAAe,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS;aACnD;SACJ,CAAC,CAAA;QAEF,mCAAmC;QAEnC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sBAAsB;gBAC1E,IAAA,kBAAU,EAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAA;YACjG,CAAC;QACL,CAAC;QAED,8BAA8B;QAC9B,oDAAoD;QACpD,IAAI;QAEJ,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAChC,SAAS,EACT,IAAI,EACJ;YACI,WAAW,EAAE,sBAAsB;YACnC,WAAW,EAAE,sBAAsB;SACtC,CACJ,CAAA;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,cAAc;QACd,IAAI,YAAY,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QAE9D,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAA;QAEvC,IAAI,QAAQ,GAAQ,EAAE,CAAA;QAEtB,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;iBACnB;aACJ,CAAA;YAED,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE1F,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAE7F,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;iBACnB;aACJ,CAAA;YAED,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE1F,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAE7F,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;YAE3D,IAAI,YAAY,GAAqC;gBACjD,aAAa,EAAE;oBACX,GAAG,IAAI,CAAC,aAAa;iBACxB;aACJ,CAAA;YAED,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAEpG,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;wBAC5B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvG,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;iBACjB;aACJ,CAAA;YAED,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEpF,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;wBAC5B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEzF,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;iBACjB;aACJ,CAAA;YAED,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEpF,oBAAoB;YACpB,MAAM,eAAe,CAAC,eAAe,CAAC;gBAClC,YAAY,EAAE,aAAa;gBAC3B,IAAI,EAAE;oBACF,QAAQ,EAAE;wBACN,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC;wBAC5B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;qBACtC;iBACJ;aACJ,CAAC,CAAA;YAEF,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEzF,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAE7C,IAAI,UAAU,GAA8B;gBACxC,MAAM,EAAE;oBACJ,GAAG,IAAI,CAAC,MAAM;iBACjB;aACJ,CAAA;YAED,MAAM,aAAa,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;YAEpF,oBAAoB;YACpB,0CAA0C;YAC1C,mCAAmC;YACnC,cAAc;YACd,sBAAsB;YACtB,4CAA4C;YAC5C,kDAAkD;YAClD,YAAY;YACZ,QAAQ;YACR,KAAK;YAEL,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEzF,CAAC;QAED,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAE3C,IAAI,SAAS,GAA6B;gBACtC,KAAK,EAAE;oBACH,GAAG,IAAI,CAAC,KAAK;iBAChB;aACJ,CAAA;YAED,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;YAEjF,oBAAoB;YACpB,0CAA0C;YAC1C,mCAAmC;YACnC,cAAc;YACd,sBAAsB;YACtB,4CAA4C;YAC5C,kDAAkD;YAClD,YAAY;YACZ,QAAQ;YACR,KAAK;YAEL,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEvF,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAEjD,IAAI,YAAY,GAAgC;gBAC5C,QAAQ,EAAE;oBACN,GAAG,IAAI,CAAC,QAAQ;iBACnB;aACJ,CAAA;YAED,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAA;YAE1F,QAAQ,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAE7F,CAAC;QAED,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,eAAe,GAAG,KAAK,EAAE,gBAAgB,GAAG,EAAE,EAAE,mBAAmB,GAAG,KAAK,EAAE,kBAAkB,GAAG,KAAK,EAAgB,EAAE,EAAE;QAEpK,IAAI,IAAI,GAAQ,EAAE,CAAA;QAElB,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAE9B,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,SAAS,CAAC;gBAC3B,eAAe;gBACf,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;gBACzD,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,KAAK;gBAChB,SAAS;gBACT,mBAAmB;gBACnB,kBAAkB;aACrB,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAA;QAEhE,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAA0C,EAAE,eAAe,EAAE,CAAC,CAAA;QAC5H,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAA0C,EAAE,eAAe,EAAE,CAAC,CAAA;QAC5H,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YAChC,IAAI,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAA+C,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAChK,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAwC,EAAE,eAAe,EAAE,CAAC,CAAA;QACtH,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAwC,EAAE,eAAe,EAAE,CAAC,CAAA;QACtH,CAAC;QAED,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzB,IAAI,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAwC,EAAE,eAAe,EAAE,CAAC,CAAA;QACtH,CAAC;QAED,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAuC,EAAE,eAAe,EAAE,CAAC,CAAA;QACnH,CAAC;QAED,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAA0C,EAAE,eAAe,EAAE,CAAC,CAAA;QAC5H,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,eAAe,GAAG,KAAK,EAAE,gBAAgB,GAAG,EAAE,EAAE,mBAAmB,GAAG,KAAK,EAA0B,EAAE,EAAE;QAElK,IAAI,IAAI,GAAQ,EAAE,CAAA;QAElB,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAA;QAEhE,kCAAkC;QAClC,+HAA+H;QAC/H,IAAI;QAEJ,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC3B,IAAI,GAAG,MAAM,eAAe,CAAC,qBAAqB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,SAA0C,EAAE,eAAe,EAAE,CAAC,CAAA;QAC5I,CAAC;QAED,IAAI,SAAS,KAAK,eAAe,EAAE,CAAC;YAChC,IAAI,GAAG,MAAM,oBAAoB,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,SAA+C,EAAE,eAAe,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAChL,CAAC;QAED,gCAAgC;QAChC,yHAAyH;QACzH,IAAI;QAEJ,gCAAgC;QAChC,yHAAyH;QACzH,IAAI;QAEJ,gCAAgC;QAChC,yHAAyH;QACzH,IAAI;QAEJ,+BAA+B;QAC/B,sHAAsH;QACtH,IAAI;QAEJ,kCAAkC;QAClC,+HAA+H;QAC/H,IAAI;QAEJ,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,GAAG,KAAK,EAAE,mBAAmB,GAAG,KAAK,EAAE,kBAAkB,GAAG,KAAK,EAAiB,EAAE,EAAE;QAE1L,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAE9B,aAAa,GAAG;gBACZ,GAAG,aAAa;gBAChB,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,wBAAe,CAAC,cAAc,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxF,CAAA;YAED,IAAI,SAAS,GAAG;gBACZ,uCAAuC;gBACvC,IAAA,oBAAc,EAAC,EAAE,EAAE,aAAa,CAAC;gBACjC,IAAA,oBAAc,EAAC,EAAE,EAAE,gBAAgB,CAAC;aACvC,CAAA;YAED,IAAI,WAAW,GAAG;gBACd,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,yCAAyC,EAAE,6BAA6B,EAAE,4BAA4B,CAAC,CAAC;gBAChK,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;gBAClJ,IAAA,sBAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,oCAAoC,EAAE,0BAA0B,EAAE,yBAAyB,CAAC,CAAC;aACrJ,CAAA;YAED,IAAI,UAAU,GAAa;gBACvB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC7B,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;aACnC,CAAA;YAED,IAAI,aAAa,GAAG;gBAChB,GAAG,aAAa;gBAChB,GAAG,gBAAgB;aACtB,CAAA;YAED,IAAI,QAAQ,GAAG;gBACX,sBAAsB;gBACtB,qBAAqB;gBACrB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAa,EAAC,OAAO,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5E,CAAA;YAED,IAAI,UAAU,GAAG,IAAA,qBAAe,EAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YACtD,IAAI,cAAc,GAAG,IAAA,yBAAmB,EAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAEvD,MAAM,MAAM,GAAG,IAAA,uBAAiB,EAAC;gBAC7B,SAAS,EAAE,OAAO;gBAClB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS;gBACT,WAAW;gBACX,QAAQ;gBACR,UAAU;gBACV,UAAU;gBACV,cAAc;gBACd,mBAAmB;aACtB,CAAC,CAAA;YAEF,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAElC,MAAM,QAAQ,GAAG;gBACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;gBACrD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D,CAAA;YAED,OAAO,QAAQ,CAAA;QACnB,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,aAAa,CAClD,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAA2C,EAAE,CAC5H,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,aAAa,CAClD,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAA2C,EAAE,CAC5H,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YAC/B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAC5D,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAgD,EAAE,mBAAmB,EAAE,CACtJ,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAC9C,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAyC,EAAE,CAC1H,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAC9C,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAyC,EAAE,CAC1H,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAC9C,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAyC,EAAE,CAC1H,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,UAAU,CAC5C,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAwC,EAAE,CACzH,CAAC,CAAA;QACN,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,CAAC,aAAa,CAClD,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAA2C,EAAE,CAC5H,CAAC,CAAA;QACN,CAAC;QAED,OAAO;YACH,IAAI;YACJ,KAAK;SACR,CAAA;IACL,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,EAAE,EAAE,GAAG,EAAmB,EAAE,EAAE;QAEnD,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,IAAA,kBAAU,EAAC,gBAAgB,CAAC,CAAC;QAE9C,IAAI,QAAQ,GAAU,EAAE,CAAA;QAExB,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,QAAQ,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,QAAQ,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QACtE,CAAC;QAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YAE/B,4CAA4C;YAC5C,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,oBAAoB,CAAC,kBAAkB,CAAC;gBAC3E,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,CAAC;wBACN,KAAK,EAAE,GAAG,iCAAwB,CAAC,OAAO,EAAE;wBAC5C,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,GAAG;qBACb,CAAC;gBACF,SAAS,EAAE,GAAG,iCAAwB,CAAC,gBAAgB,EAAE;gBACzD,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,EAAE;aAChB,CAAC,CAAA;YAEF,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAA;YAE3E,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,kDAAkD,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjH,CAAC;YAED,QAAQ,GAAG,MAAM,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC5E,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC9D,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC9D,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,QAAQ,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC9D,0DAA0D;QAC9D,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC5D,0DAA0D;QAC9D,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,QAAQ,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAClE,0DAA0D;QAC9D,CAAC;QAED,cAAc;QACd,IAAI,YAAY,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAE3E,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;YAC1B,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAA4B,EAAE,EAAE;QAEzF,MAAM,iBAAiB,GAAG,IAAA,kBAAS,EAAC;YAChC,GAAG,IAAI;YACP,GAAG,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC,CAAA;QAEF,uBAAuB;QACvB,IAAI,YAAY,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC;YAC9C,EAAE;YACF,IAAI,EAAE;gBACF,cAAc,EAAE,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,mBAAmB,CAAC;aAChE;SACJ,CAAC,CAAA;QAEF,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAA;QAEvC,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAEjG,OAAO,QAAQ,CAAA;IACnB,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EAAE,EAAE,GAAG,EAAoB,EAAE,EAAE;QAErD,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,IAAA,kBAAU,EAAC,gBAAgB,CAAC,CAAC;QAE9C,sBAAsB;QACtB,IAAI,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;YAClC,KAAK,EAAE;gBACH,CAAC,GAAG,wBAAe,CAAC,OAAO,EAAE,CAAC,EAAE;oBAC5B,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;iBACrC;aACJ;YACD,IAAI,EAAE;gBACF,CAAC,GAAG,wBAAe,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK;aACvC;SACJ,CAAC,CAAA;QAEF,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,GAAG,QAAQ,CAAC;QAErD,OAAO,YAAY,CAAA;IACvB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QAEtB,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,IAAI,GAAG,eAAe,CAAC,YAAY,EAAE,CAAA;QACzC,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,IAAI,GAAG,eAAe,CAAC,YAAY,EAAE,CAAA;QACzC,CAAC;QAED,IAAI,QAAQ,KAAK,eAAe,EAAE,CAAC;YAC/B,IAAI,GAAG,oBAAoB,CAAC,YAAY,EAAE,CAAA;QAC9C,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,aAAa,CAAC,YAAY,EAAE,CAAA;QACvC,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,aAAa,CAAC,YAAY,EAAE,CAAA;QACvC,CAAC;QAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,aAAa,CAAC,YAAY,EAAE,CAAA;QACvC,CAAC;QAED,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;QACtC,CAAC;QAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC1B,IAAI,GAAG,eAAe,CAAC,YAAY,EAAE,CAAA;QACzC,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC,CAAC;IAEF,WAAW;IACX,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,iBAAiB;IACjB,mBAAmB;IACnB,uBAAuB;IACvB,uBAAuB;IACvB,IAAI;IAEJ,MAAM,aAAa,GAAG;QAClB,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,UAAU,EAAE;QACxG,iBAAiB,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE;QACxI,SAAS,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,YAAY,EAAE;QAC9G,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,aAAa,EAAE;QACjH,UAAU,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,aAAa,EAAE;QACjH,eAAe,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,uBAAuB,EAAE;QACrI,WAAW,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,cAAc,EAAE;QACpH,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,KAAK,CAAU,EAAE,UAAU,EAAE,eAAe,EAAE;QACjG,YAAY,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE;QAC5H,mBAAmB,EAAE,EAAE,EAAE,EAAE,mBAAmB,EAAE,cAAc,EAAE,CAAC,UAAU,EAAE,eAAe,CAAU,EAAE,UAAU,EAAE,uBAAuB,EAAE;KAChJ,CAAC;IAEF,OAAO,IAAA,oBAAc,EAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAE9D,CAAC,CAAA;AAv+BY,QAAA,WAAW,eAu+BvB","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"]}
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(*) 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"]}
@@ -114,7 +114,7 @@ const WorkerService = (props) => {
114
114
  delete userSqlSelect[`usr.${models_1.ModelUserFields.login_password} `];
115
115
  }
116
116
  let sqlSelect = [
117
- `COUNT(wrk.*) OVER() as filtered_count`,
117
+ `COUNT(*) OVER() as filtered_count`,
118
118
  (0, lib_1.buildSqlSelect)(``, mainSqlSelect),
119
119
  (0, lib_1.buildSqlSelect)(``, userSqlSelect),
120
120
  (0, lib_1.buildSqlSelect)(``, defaultSqlSelect),