feat(backend): complete AI and business migration

This commit is contained in:
poyrazavsever
2026-07-17 09:12:45 +03:00
parent 42f165b27e
commit 64a5f96872
23 changed files with 1286 additions and 409 deletions
+5 -1
View File
@@ -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 {
+4
View File
@@ -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,