feat: add invoice lifecycle schema
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import { z } from 'zod';
|
||||
import { moneyGbp, optionalText, requiredText } from './shared.schema';
|
||||
|
||||
export const invoiceStatusValues = ['draft', 'sent', 'paid', 'void'] as const;
|
||||
export const invoiceStatusSchema = z.enum(invoiceStatusValues);
|
||||
|
||||
export const invoiceCreateSchema = z.object({
|
||||
clientId: requiredText('Client'),
|
||||
invoiceNumber: requiredText('Invoice number', 80),
|
||||
status: invoiceStatusSchema.default('draft'),
|
||||
issueDate: requiredText('Issue date', 40),
|
||||
dueDate: requiredText('Due date', 40),
|
||||
subtotalGbp: moneyGbp,
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
import { index, real, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
||||
import { index, integer, real, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
||||
import { clients } from './clients.schema';
|
||||
import { organizations } from './organizations.schema';
|
||||
import { timestamps } from './shared.schema';
|
||||
|
||||
export const invoiceStatusValues = ['draft', 'sent', 'paid', 'void'] as const;
|
||||
|
||||
export const invoices = sqliteTable(
|
||||
'invoices',
|
||||
{
|
||||
@@ -16,6 +18,10 @@ export const invoices = sqliteTable(
|
||||
.notNull()
|
||||
.references(() => clients.id, { onDelete: 'restrict' }),
|
||||
invoiceNumber: text('invoice_number').notNull().unique(),
|
||||
status: text('status', { enum: invoiceStatusValues }).notNull().default('draft'),
|
||||
sentAt: integer('sent_at', { mode: 'timestamp_ms' }),
|
||||
paidAt: integer('paid_at', { mode: 'timestamp_ms' }),
|
||||
voidedAt: integer('voided_at', { mode: 'timestamp_ms' }),
|
||||
issueDate: text('issue_date').notNull(),
|
||||
dueDate: text('due_date').notNull(),
|
||||
subtotalGbp: real('subtotal_gbp').notNull().default(0),
|
||||
|
||||
Reference in New Issue
Block a user