@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 12.8 kB
Source Map (JSON)
{"version":3,"file":"email-change-requests.mjs","names":["constants"],"sources":["../../../src/libs/repositories/email-change-requests.ts"],"sourcesContent":["import z from \"zod\";\nimport constants from \"../../constants/constants.js\";\nimport type DatabaseAdapter from \"../db/adapter-base.js\";\nimport type { KyselyDB } from \"../db/types.js\";\nimport StaticRepository from \"./parents/static-repository.js\";\nimport type { QueryProps } from \"./types.js\";\n\nexport default class EmailChangeRequestsRepository extends StaticRepository<\"lucid_email_change_requests\"> {\n\tconstructor(db: KyselyDB, dbAdapter: DatabaseAdapter) {\n\t\tsuper(db, dbAdapter, \"lucid_email_change_requests\");\n\t}\n\ttableSchema = z.object({\n\t\tid: z.number(),\n\t\tuser_id: z.number(),\n\t\told_email: z.email(),\n\t\tnew_email: z.email(),\n\t\tconfirm_token_id: z.number(),\n\t\trevert_token_id: z.number(),\n\t\tstatus: z.union([\n\t\t\tz.literal(constants.emailChangeRequestStatuses.pending),\n\t\t\tz.literal(constants.emailChangeRequestStatuses.confirmed),\n\t\t\tz.literal(constants.emailChangeRequestStatuses.cancelled),\n\t\t\tz.literal(constants.emailChangeRequestStatuses.reverted),\n\t\t\tz.literal(constants.emailChangeRequestStatuses.superseded),\n\t\t]),\n\t\tconfirmed_at: z.union([z.string(), z.date()]).nullable(),\n\t\tcancelled_at: z.union([z.string(), z.date()]).nullable(),\n\t\treverted_at: z.union([z.string(), z.date()]).nullable(),\n\t\tcreated_at: z.union([z.string(), z.date()]).nullable(),\n\t\tupdated_at: z.union([z.string(), z.date()]).nullable(),\n\t\texpires_at: z.union([z.string(), z.date()]),\n\t});\n\tcolumnFormats = {\n\t\tid: this.dbAdapter.getDataType(\"primary\"),\n\t\tuser_id: this.dbAdapter.getDataType(\"integer\"),\n\t\told_email: this.dbAdapter.getDataType(\"text\"),\n\t\tnew_email: this.dbAdapter.getDataType(\"text\"),\n\t\tconfirm_token_id: this.dbAdapter.getDataType(\"integer\"),\n\t\trevert_token_id: this.dbAdapter.getDataType(\"integer\"),\n\t\tstatus: this.dbAdapter.getDataType(\"varchar\", 255),\n\t\tconfirmed_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\tcancelled_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\treverted_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\tcreated_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\tupdated_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\texpires_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t};\n\tqueryConfig = {\n\t\ttableKeys: {\n\t\t\tfilters: {\n\t\t\t\tuserId: \"user_id\",\n\t\t\t\toldEmail: \"old_email\",\n\t\t\t\tnewEmail: \"new_email\",\n\t\t\t\tstatus: \"status\",\n\t\t\t},\n\t\t\tsorts: {\n\t\t\t\tcreatedAt: \"created_at\",\n\t\t\t\tupdatedAt: \"updated_at\",\n\t\t\t\texpiresAt: \"expires_at\",\n\t\t\t},\n\t\t},\n\t\toperators: {\n\t\t\toldEmail: \"contains\",\n\t\t\tnewEmail: \"contains\",\n\t\t},\n\t} as const;\n\n\t// ----------------------------------------\n\t// queries\n\tasync selectActivePendingForUser<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tuserId: number;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_email_change_requests\")\n\t\t\t.select([\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t])\n\t\t\t.where(\"user_id\", \"=\", props.userId)\n\t\t\t.where(\"status\", \"=\", constants.emailChangeRequestStatuses.pending)\n\t\t\t.where(\"expires_at\", \">\", new Date().toISOString());\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectActivePendingForUser\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t],\n\t\t});\n\t}\n\n\tasync selectByConfirmTokenId<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\ttokenId: number;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_email_change_requests\")\n\t\t\t.select([\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t])\n\t\t\t.where(\"confirm_token_id\", \"=\", props.tokenId)\n\t\t\t.where(\"expires_at\", \">\", new Date().toISOString());\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectByConfirmTokenId\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t],\n\t\t});\n\t}\n\n\tasync selectByRevertTokenId<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\ttokenId: number;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_email_change_requests\")\n\t\t\t.select([\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t])\n\t\t\t.where(\"revert_token_id\", \"=\", props.tokenId)\n\t\t\t.where(\"expires_at\", \">\", new Date().toISOString());\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectByRevertTokenId\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t],\n\t\t});\n\t}\n\n\tasync selectReservedByEmail<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\temail: string;\n\t\t\t\texcludeUserId?: number;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst now = new Date().toISOString();\n\t\tlet query = this.db\n\t\t\t.selectFrom(\"lucid_email_change_requests\")\n\t\t\t.select([\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t])\n\t\t\t.where((eb) =>\n\t\t\t\teb.or([\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"new_email\", \"=\", props.email),\n\t\t\t\t\t\teb(\"status\", \"=\", constants.emailChangeRequestStatuses.pending),\n\t\t\t\t\t\teb(\"expires_at\", \">\", now),\n\t\t\t\t\t]),\n\t\t\t\t\teb.and([\n\t\t\t\t\t\teb(\"old_email\", \"=\", props.email),\n\t\t\t\t\t\teb(\"status\", \"=\", constants.emailChangeRequestStatuses.confirmed),\n\t\t\t\t\t\teb(\"expires_at\", \">\", now),\n\t\t\t\t\t]),\n\t\t\t\t]),\n\t\t\t);\n\n\t\tif (props.excludeUserId !== undefined) {\n\t\t\tquery = query.where(\"user_id\", \"!=\", props.excludeUserId);\n\t\t}\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectReservedByEmail\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"user_id\",\n\t\t\t\t\"old_email\",\n\t\t\t\t\"new_email\",\n\t\t\t\t\"confirm_token_id\",\n\t\t\t\t\"revert_token_id\",\n\t\t\t\t\"status\",\n\t\t\t\t\"confirmed_at\",\n\t\t\t\t\"cancelled_at\",\n\t\t\t\t\"reverted_at\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"expires_at\",\n\t\t\t],\n\t\t});\n\t}\n}\n"],"mappings":"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"}