Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] chore: Make zod work with prisma #52

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 71 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@
"tsconfig-paths": "^4.1.2",
"tsoa": "^5.1.1",
"winston": "^3.6.0",
"zod": "^3.22.4"
"zod": "^3.22.4",
"zod-prisma-types": "^3.1.6"
}
}
2 changes: 2 additions & 0 deletions prisma/generated/zod/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './modelSchema';
export * from './inputTypeSchemas';
5 changes: 5 additions & 0 deletions prisma/generated/zod/inputTypeSchemas/NullsOrderSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { z } from 'zod';

export const NullsOrderSchema = z.enum(['first', 'last']);

export default NullsOrderSchema;
5 changes: 5 additions & 0 deletions prisma/generated/zod/inputTypeSchemas/QueryModeSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { z } from 'zod';

export const QueryModeSchema = z.enum(['default', 'insensitive']);

export default QueryModeSchema;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { z } from 'zod';

export const SessionScalarFieldEnumSchema = z.enum([
'id',
'createdAt',
'updatedAt',
'userId',
'accessToken',
'refreshToken',
]);

export default SessionScalarFieldEnumSchema;
5 changes: 5 additions & 0 deletions prisma/generated/zod/inputTypeSchemas/SortOrderSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { z } from 'zod';

export const SortOrderSchema = z.enum(['asc', 'desc']);

export default SortOrderSchema;
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { z } from 'zod';

export const TokensScalarFieldEnumSchema = z.enum([
'id',
'createdAt',
'updatedAt',
'token',
'type',
'expiresAt',
'userId',
]);

export default TokensScalarFieldEnumSchema;
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { z } from 'zod';

export const TransactionIsolationLevelSchema = z.enum([
'ReadUncommitted',
'ReadCommitted',
'RepeatableRead',
'Serializable',
]);

export default TransactionIsolationLevelSchema;
7 changes: 7 additions & 0 deletions prisma/generated/zod/inputTypeSchemas/TypeTokenSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { z } from 'zod';

export const TypeTokenSchema = z.enum(['RESET_PASSWORD']);

export type TypeTokenType = `${z.infer<typeof TypeTokenSchema>}`;

export default TypeTokenSchema;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { z } from 'zod';

export const UserScalarFieldEnumSchema = z.enum([
'id',
'createdAt',
'updatedAt',
'email',
'password',
'name',
]);

export default UserScalarFieldEnumSchema;
8 changes: 8 additions & 0 deletions prisma/generated/zod/inputTypeSchemas/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export { TransactionIsolationLevelSchema } from './TransactionIsolationLevelSchema';
export { UserScalarFieldEnumSchema } from './UserScalarFieldEnumSchema';
export { SessionScalarFieldEnumSchema } from './SessionScalarFieldEnumSchema';
export { TokensScalarFieldEnumSchema } from './TokensScalarFieldEnumSchema';
export { SortOrderSchema } from './SortOrderSchema';
export { QueryModeSchema } from './QueryModeSchema';
export { NullsOrderSchema } from './NullsOrderSchema';
export { TypeTokenSchema } from './TypeTokenSchema';
18 changes: 18 additions & 0 deletions prisma/generated/zod/modelSchema/SessionSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { z } from 'zod';

/////////////////////////////////////////
// SESSION SCHEMA
/////////////////////////////////////////

export const SessionSchema = z.object({
id: z.string().uuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
userId: z.string(),
accessToken: z.string(),
refreshToken: z.string(),
});

export type Session = z.infer<typeof SessionSchema>;

export default SessionSchema;
20 changes: 20 additions & 0 deletions prisma/generated/zod/modelSchema/TokensSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { z } from 'zod';
import { TypeTokenSchema } from '../inputTypeSchemas/TypeTokenSchema';

/////////////////////////////////////////
// TOKENS SCHEMA
/////////////////////////////////////////

export const TokensSchema = z.object({
type: TypeTokenSchema,
id: z.string().uuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
token: z.string(),
expiresAt: z.coerce.date(),
userId: z.string().nullable(),
});

export type Tokens = z.infer<typeof TokensSchema>;

export default TokensSchema;
18 changes: 18 additions & 0 deletions prisma/generated/zod/modelSchema/UserSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { z } from 'zod';

/////////////////////////////////////////
// USER SCHEMA
/////////////////////////////////////////

export const UserSchema = z.object({
id: z.string().uuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date(),
email: z.string(),
password: z.string(),
name: z.string().nullable(),
});

export type User = z.infer<typeof UserSchema>;

export default UserSchema;
3 changes: 3 additions & 0 deletions prisma/generated/zod/modelSchema/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './UserSchema';
export * from './SessionSchema';
export * from './TokensSchema';
6 changes: 6 additions & 0 deletions prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@ generator client {
binaryTargets = ["native", "linux-musl", "linux-musl-openssl-3.0.x"]
}

generator zod {
provider = "zod-prisma-types"
useMultipleFiles = true
createInputTypes = false
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
Expand Down
1 change: 1 addition & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"strictNullChecks": true,
"skipLibCheck": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
Expand Down