feat(backend): complete AI and business migration
This commit is contained in:
@@ -4,7 +4,9 @@ export type DomainErrorCode =
|
||||
| "FORBIDDEN"
|
||||
| "NOT_FOUND"
|
||||
| "CONFLICT"
|
||||
| "INVARIANT_VIOLATION";
|
||||
| "INVARIANT_VIOLATION"
|
||||
| "UPSTREAM_ERROR"
|
||||
| "UPSTREAM_TIMEOUT";
|
||||
|
||||
const statusByCode: Record<DomainErrorCode, number> = {
|
||||
VALIDATION_ERROR: 400,
|
||||
@@ -13,6 +15,8 @@ const statusByCode: Record<DomainErrorCode, number> = {
|
||||
NOT_FOUND: 404,
|
||||
CONFLICT: 409,
|
||||
INVARIANT_VIOLATION: 422,
|
||||
UPSTREAM_ERROR: 502,
|
||||
UPSTREAM_TIMEOUT: 504,
|
||||
};
|
||||
|
||||
export class DomainError extends Error {
|
||||
|
||||
@@ -245,6 +245,7 @@ export const proposalCreateSchema = z.object({
|
||||
status: z.enum(proposalStatuses).default("draft"),
|
||||
validUntil: z.date().nullable().optional(),
|
||||
});
|
||||
export const proposalUpdateSchema = proposalCreateSchema.omit({ id: true }).partial();
|
||||
export const contractCreateSchema = z.object({
|
||||
id: resourceIdSchema.optional(),
|
||||
proposalId: optionalId,
|
||||
@@ -254,6 +255,7 @@ export const contractCreateSchema = z.object({
|
||||
status: z.enum(contractStatuses).default("draft"),
|
||||
signedAt: z.date().nullable().optional(),
|
||||
});
|
||||
export const contractUpdateSchema = contractCreateSchema.omit({ id: true }).partial();
|
||||
export const invoiceCreateSchema = z.object({
|
||||
id: resourceIdSchema.optional(),
|
||||
clientId: optionalId,
|
||||
@@ -267,6 +269,7 @@ export const invoiceCreateSchema = z.object({
|
||||
dueDate: optionalDate,
|
||||
paidAt: z.date().nullable().optional(),
|
||||
});
|
||||
export const invoiceUpdateSchema = invoiceCreateSchema.omit({ id: true }).partial();
|
||||
export const subscriptionCreateSchema = z.object({
|
||||
id: resourceIdSchema.optional(),
|
||||
name: z.string().trim().min(1).max(300),
|
||||
@@ -277,6 +280,7 @@ export const subscriptionCreateSchema = z.object({
|
||||
status: z.enum(subscriptionStatuses).default("active"),
|
||||
category: optionalText(160),
|
||||
});
|
||||
export const subscriptionUpdateSchema = subscriptionCreateSchema.omit({ id: true }).partial();
|
||||
|
||||
export function parseDomainInput<TSchema extends z.ZodType>(
|
||||
schema: TSchema,
|
||||
|
||||
Reference in New Issue
Block a user