diff --git a/packages/core/src/entities/models/article.ts b/packages/core/src/entities/models/article.ts new file mode 100644 index 0000000..59e15bd --- /dev/null +++ b/packages/core/src/entities/models/article.ts @@ -0,0 +1,17 @@ +import { z } from "zod"; + +export const articleStatusSchema = z.enum(["draft", "published"]); + +export const articleSchema = z.object({ + id: z.string(), + title: z.string().min(1).max(255), + slug: z.string().min(1).max(255), + content: z.string(), + status: articleStatusSchema.default("draft"), + authorId: z.string(), + createdAt: z.date(), + updatedAt: z.date(), +}); + +export type Article = z.infer; +export type ArticleStatus = z.infer; diff --git a/packages/core/src/entities/models/cookie.ts b/packages/core/src/entities/models/cookie.ts new file mode 100644 index 0000000..f3dfa4a --- /dev/null +++ b/packages/core/src/entities/models/cookie.ts @@ -0,0 +1,15 @@ +type CookieAttributes = { + secure?: boolean; + path?: string; + domain?: string; + sameSite?: "lax" | "strict" | "none"; + httpOnly?: boolean; + maxAge?: number; + expires?: Date; +}; + +export type Cookie = { + name: string; + value: string; + attributes: CookieAttributes; +}; diff --git a/packages/core/src/entities/models/index.ts b/packages/core/src/entities/models/index.ts new file mode 100644 index 0000000..b852b8b --- /dev/null +++ b/packages/core/src/entities/models/index.ts @@ -0,0 +1,9 @@ +export { userSchema, type User } from "./user.js"; +export { + articleSchema, + articleStatusSchema, + type Article, + type ArticleStatus, +} from "./article.js"; +export { sessionSchema, type Session } from "./session.js"; +export type { Cookie } from "./cookie.js"; diff --git a/packages/core/src/entities/models/session.ts b/packages/core/src/entities/models/session.ts new file mode 100644 index 0000000..cedf8a9 --- /dev/null +++ b/packages/core/src/entities/models/session.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const sessionSchema = z.object({ + id: z.string(), + userId: z.string(), + expiresAt: z.date(), +}); + +export type Session = z.infer; diff --git a/packages/core/src/entities/models/user.ts b/packages/core/src/entities/models/user.ts new file mode 100644 index 0000000..3de2240 --- /dev/null +++ b/packages/core/src/entities/models/user.ts @@ -0,0 +1,9 @@ +import { z } from "zod"; + +export const userSchema = z.object({ + id: z.string(), + username: z.string().min(3).max(31), + passwordHash: z.string().min(6).max(255), +}); + +export type User = z.infer;