mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-19 03:01:53 +10:00
refactor(v4.0.0-alpha): beginning of a new era
This commit is contained in:
6
libs/dto/src/auth/forgot-password.ts
Normal file
6
libs/dto/src/auth/forgot-password.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const forgotPasswordSchema = z.object({ email: z.string().email() });
|
||||
|
||||
export class ForgotPasswordDto extends createZodDto(forgotPasswordSchema) {}
|
||||
8
libs/dto/src/auth/index.ts
Normal file
8
libs/dto/src/auth/index.ts
Normal file
@ -0,0 +1,8 @@
|
||||
export * from "./forgot-password";
|
||||
export * from "./login";
|
||||
export * from "./message";
|
||||
export * from "./register";
|
||||
export * from "./reset-password";
|
||||
export * from "./response";
|
||||
export * from "./two-factor";
|
||||
export * from "./update-password";
|
||||
22
libs/dto/src/auth/login.ts
Normal file
22
libs/dto/src/auth/login.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
import { usernameSchema } from "../user";
|
||||
|
||||
export const loginSchema = z
|
||||
.object({
|
||||
identifier: z.string(),
|
||||
password: z.password().min(6),
|
||||
})
|
||||
.refine(
|
||||
(value) => {
|
||||
if (value.identifier.includes("@")) {
|
||||
return z.string().email().parse(value.identifier);
|
||||
} else {
|
||||
return usernameSchema.parse(value.identifier);
|
||||
}
|
||||
},
|
||||
{ message: "InvalidCredentials" },
|
||||
);
|
||||
|
||||
export class LoginDto extends createZodDto(loginSchema) {}
|
||||
6
libs/dto/src/auth/message.ts
Normal file
6
libs/dto/src/auth/message.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const messageSchema = z.object({ message: z.string() });
|
||||
|
||||
export class MessageDto extends createZodDto(messageSchema) {}
|
||||
10
libs/dto/src/auth/register.ts
Normal file
10
libs/dto/src/auth/register.ts
Normal file
@ -0,0 +1,10 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
import { userSchema } from "../user";
|
||||
|
||||
export const registerSchema = userSchema
|
||||
.pick({ name: true, email: true, username: true, language: true })
|
||||
.extend({ password: z.password().min(6) });
|
||||
|
||||
export class RegisterDto extends createZodDto(registerSchema) {}
|
||||
9
libs/dto/src/auth/reset-password.ts
Normal file
9
libs/dto/src/auth/reset-password.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const resetPasswordSchema = z.object({
|
||||
token: z.string(),
|
||||
password: z.password().min(6),
|
||||
});
|
||||
|
||||
export class ResetPasswordDto extends createZodDto(resetPasswordSchema) {}
|
||||
11
libs/dto/src/auth/response.ts
Normal file
11
libs/dto/src/auth/response.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
import { userSchema } from "../user";
|
||||
|
||||
export const authResponseSchema = z.object({
|
||||
status: z.enum(["authenticated", "2fa_required"]),
|
||||
user: userSchema,
|
||||
});
|
||||
|
||||
export class AuthResponseDto extends createZodDto(authResponseSchema) {}
|
||||
23
libs/dto/src/auth/two-factor.ts
Normal file
23
libs/dto/src/auth/two-factor.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const twoFactorSchema = z.object({
|
||||
code: z
|
||||
.string()
|
||||
.length(6)
|
||||
.regex(/^[0-9]+$/, { message: "code must be a 6 digit number" }),
|
||||
});
|
||||
|
||||
export class TwoFactorDto extends createZodDto(twoFactorSchema) {}
|
||||
|
||||
export const backupCodesSchema = z.object({
|
||||
backupCodes: z.array(z.string().length(10)),
|
||||
});
|
||||
|
||||
export class BackupCodesDto extends createZodDto(backupCodesSchema) {}
|
||||
|
||||
export const twoFactorBackupSchema = z.object({
|
||||
code: z.string().length(10),
|
||||
});
|
||||
|
||||
export class TwoFactorBackupDto extends createZodDto(twoFactorBackupSchema) {}
|
||||
8
libs/dto/src/auth/update-password.ts
Normal file
8
libs/dto/src/auth/update-password.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const updatePasswordSchema = z.object({
|
||||
password: z.string().min(6),
|
||||
});
|
||||
|
||||
export class UpdatePasswordDto extends createZodDto(updatePasswordSchema) {}
|
||||
4
libs/dto/src/index.ts
Normal file
4
libs/dto/src/index.ts
Normal file
@ -0,0 +1,4 @@
|
||||
export * from "./auth";
|
||||
export * from "./resume";
|
||||
export * from "./statistics";
|
||||
export * from "./user";
|
||||
11
libs/dto/src/resume/create.ts
Normal file
11
libs/dto/src/resume/create.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { kebabCase } from "@reactive-resume/utils";
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const createResumeSchema = z.object({
|
||||
title: z.string().min(1),
|
||||
slug: z.string().min(1).transform(kebabCase),
|
||||
visibility: z.enum(["public", "private"]).default("private"),
|
||||
});
|
||||
|
||||
export class CreateResumeDto extends createZodDto(createResumeSchema) {}
|
||||
9
libs/dto/src/resume/delete.ts
Normal file
9
libs/dto/src/resume/delete.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { idSchema } from "@reactive-resume/schema";
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const deleteResumeSchema = z.object({
|
||||
id: idSchema,
|
||||
});
|
||||
|
||||
export class DeleteResumeDto extends createZodDto(deleteResumeSchema) {}
|
||||
13
libs/dto/src/resume/import.ts
Normal file
13
libs/dto/src/resume/import.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { resumeDataSchema } from "@reactive-resume/schema";
|
||||
import { kebabCase } from "@reactive-resume/utils";
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const importResumeSchema = z.object({
|
||||
title: z.string().optional(),
|
||||
slug: z.string().min(1).transform(kebabCase).optional(),
|
||||
visibility: z.enum(["public", "private"]).default("private").optional(),
|
||||
data: resumeDataSchema,
|
||||
});
|
||||
|
||||
export class ImportResumeDto extends createZodDto(importResumeSchema) {}
|
||||
6
libs/dto/src/resume/index.ts
Normal file
6
libs/dto/src/resume/index.ts
Normal file
@ -0,0 +1,6 @@
|
||||
export * from "./create";
|
||||
export * from "./delete";
|
||||
export * from "./import";
|
||||
export * from "./resume";
|
||||
export * from "./update";
|
||||
export * from "./url";
|
||||
19
libs/dto/src/resume/resume.ts
Normal file
19
libs/dto/src/resume/resume.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { defaultResumeData, idSchema, resumeDataSchema } from "@reactive-resume/schema";
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
import { userSchema } from "../user";
|
||||
|
||||
export const resumeSchema = z.object({
|
||||
id: idSchema,
|
||||
title: z.string(),
|
||||
slug: z.string(),
|
||||
data: resumeDataSchema.default(defaultResumeData),
|
||||
visibility: z.enum(["private", "public"]).default("private"),
|
||||
userId: idSchema,
|
||||
user: userSchema.optional(),
|
||||
createdAt: z.date().or(z.dateString()),
|
||||
updatedAt: z.date().or(z.dateString()),
|
||||
});
|
||||
|
||||
export class ResumeDto extends createZodDto(resumeSchema) {}
|
||||
7
libs/dto/src/resume/update.ts
Normal file
7
libs/dto/src/resume/update.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
|
||||
import { resumeSchema } from "./resume";
|
||||
|
||||
export const updateResumeSchema = resumeSchema;
|
||||
|
||||
export class UpdateResumeDto extends createZodDto(updateResumeSchema) {}
|
||||
6
libs/dto/src/resume/url.ts
Normal file
6
libs/dto/src/resume/url.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const urlSchema = z.object({ url: z.string().url() });
|
||||
|
||||
export class UrlDto extends createZodDto(urlSchema) {}
|
||||
9
libs/dto/src/statistics/index.ts
Normal file
9
libs/dto/src/statistics/index.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const statisticsSchema = z.object({
|
||||
views: z.number().int().default(0),
|
||||
downloads: z.number().int().default(0),
|
||||
});
|
||||
|
||||
export class StatisticsDto extends createZodDto(statisticsSchema) {}
|
||||
2
libs/dto/src/user/index.ts
Normal file
2
libs/dto/src/user/index.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export * from "./update-user";
|
||||
export * from "./user";
|
||||
13
libs/dto/src/user/update-user.ts
Normal file
13
libs/dto/src/user/update-user.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
|
||||
import { userSchema } from "./user";
|
||||
|
||||
export const updateUserSchema = userSchema.partial().pick({
|
||||
name: true,
|
||||
language: true,
|
||||
username: true,
|
||||
email: true,
|
||||
picture: true,
|
||||
});
|
||||
|
||||
export class UpdateUserDto extends createZodDto(updateUserSchema) {}
|
||||
31
libs/dto/src/user/user.ts
Normal file
31
libs/dto/src/user/user.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import type { Prisma } from "@prisma/client";
|
||||
import { idSchema } from "@reactive-resume/schema";
|
||||
import { createZodDto } from "nestjs-zod/dto";
|
||||
import { z } from "nestjs-zod/z";
|
||||
|
||||
export const usernameSchema = z
|
||||
.string()
|
||||
.min(3)
|
||||
.max(255)
|
||||
.regex(/^[a-z0-9._-]+$/, {
|
||||
message:
|
||||
"Usernames can only contain lowercase letters, numbers, periods, hyphens, and underscores.",
|
||||
});
|
||||
|
||||
export const userSchema = z.object({
|
||||
id: idSchema,
|
||||
name: z.string().min(3).max(255),
|
||||
picture: z.literal("").or(z.null()).or(z.string().url()),
|
||||
username: usernameSchema,
|
||||
email: z.string().email(),
|
||||
language: z.string().default("en"),
|
||||
emailVerified: z.boolean().default(false),
|
||||
twoFactorEnabled: z.boolean().default(false),
|
||||
provider: z.enum(["email", "github", "google"]).default("email"),
|
||||
createdAt: z.date().or(z.dateString()),
|
||||
updatedAt: z.date().or(z.dateString()),
|
||||
});
|
||||
|
||||
export class UserDto extends createZodDto(userSchema) {}
|
||||
|
||||
export type UserWithSecrets = Prisma.UserGetPayload<{ include: { secrets: true } }>;
|
||||
Reference in New Issue
Block a user