This commit is contained in:
@@ -2,6 +2,7 @@ import {
|
||||
sqliteTable,
|
||||
text,
|
||||
integer,
|
||||
real,
|
||||
primaryKey,
|
||||
foreignKey,
|
||||
} from "drizzle-orm/sqlite-core";
|
||||
@@ -25,6 +26,11 @@ export const organizations = sqliteTable("organizations", {
|
||||
.primaryKey()
|
||||
.$defaultFn(() => nanoid()),
|
||||
name: text("name").notNull(),
|
||||
street: text("street"),
|
||||
city: text("city"),
|
||||
state: text("state"),
|
||||
zip: text("zip"),
|
||||
country: text("country"),
|
||||
createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn(
|
||||
() => new Date(),
|
||||
),
|
||||
@@ -221,3 +227,58 @@ export const apiTokens = sqliteTable(
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
export const invoices = sqliteTable(
|
||||
"invoices",
|
||||
{
|
||||
id: text("id")
|
||||
.primaryKey()
|
||||
.$defaultFn(() => nanoid()),
|
||||
organizationId: text("organization_id").notNull(),
|
||||
clientId: text("client_id").notNull(),
|
||||
number: text("number").notNull(),
|
||||
type: text("type").notNull().default("invoice"), // 'invoice' or 'quote'
|
||||
status: text("status").notNull().default("draft"), // 'draft', 'sent', 'paid', 'void', 'accepted', 'declined'
|
||||
issueDate: integer("issue_date", { mode: "timestamp" }).notNull(),
|
||||
dueDate: integer("due_date", { mode: "timestamp" }).notNull(),
|
||||
notes: text("notes"),
|
||||
currency: text("currency").default("USD").notNull(),
|
||||
subtotal: integer("subtotal").notNull().default(0), // in cents
|
||||
taxRate: real("tax_rate").default(0), // percentage
|
||||
taxAmount: integer("tax_amount").notNull().default(0), // in cents
|
||||
total: integer("total").notNull().default(0), // in cents
|
||||
createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn(
|
||||
() => new Date(),
|
||||
),
|
||||
},
|
||||
(table: any) => ({
|
||||
orgFk: foreignKey({
|
||||
columns: [table.organizationId],
|
||||
foreignColumns: [organizations.id],
|
||||
}),
|
||||
clientFk: foreignKey({
|
||||
columns: [table.clientId],
|
||||
foreignColumns: [clients.id],
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
export const invoiceItems = sqliteTable(
|
||||
"invoice_items",
|
||||
{
|
||||
id: text("id")
|
||||
.primaryKey()
|
||||
.$defaultFn(() => nanoid()),
|
||||
invoiceId: text("invoice_id").notNull(),
|
||||
description: text("description").notNull(),
|
||||
quantity: real("quantity").notNull().default(1),
|
||||
unitPrice: integer("unit_price").notNull().default(0), // in cents
|
||||
amount: integer("amount").notNull().default(0), // in cents
|
||||
},
|
||||
(table: any) => ({
|
||||
invoiceFk: foreignKey({
|
||||
columns: [table.invoiceId],
|
||||
foreignColumns: [invoices.id],
|
||||
}),
|
||||
}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user