Spaces:
Sleeping
Sleeping
| import { sqliteTable, text, integer, real } from "drizzle-orm/sqlite-core"; | |
| export const users = sqliteTable("users", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| email: text("email").notNull().unique(), | |
| name: text("name").notNull(), | |
| passwordHash: text("password_hash").notNull(), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const companies = sqliteTable("companies", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| name: text("name").notNull(), | |
| domain: text("domain"), | |
| phone: text("phone"), | |
| address: text("address"), | |
| notes: text("notes"), | |
| userId: integer("user_id").notNull().references(() => users.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const contacts = sqliteTable("contacts", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| firstName: text("first_name").notNull(), | |
| lastName: text("last_name").notNull(), | |
| email: text("email"), | |
| phone: text("phone"), | |
| jobTitle: text("job_title"), | |
| companyId: integer("company_id").references(() => companies.id), | |
| userId: integer("user_id").notNull().references(() => users.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const pipelines = sqliteTable("pipelines", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| name: text("name").notNull(), | |
| userId: integer("user_id").notNull().references(() => users.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const pipelineStages = sqliteTable("pipeline_stages", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| name: text("name").notNull(), | |
| position: integer("position").notNull(), | |
| probability: integer("probability").notNull().default(0), | |
| pipelineId: integer("pipeline_id").notNull().references(() => pipelines.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const deals = sqliteTable("deals", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| title: text("title").notNull(), | |
| value: real("value").notNull().default(0), | |
| status: text("status", { enum: ["open", "won", "lost"] }).notNull().default("open"), | |
| position: integer("position").notNull().default(0), | |
| expectedCloseDate: text("expected_close_date"), | |
| stageId: integer("stage_id").notNull().references(() => pipelineStages.id), | |
| contactId: integer("contact_id").references(() => contacts.id), | |
| companyId: integer("company_id").references(() => companies.id), | |
| pipelineId: integer("pipeline_id").notNull().references(() => pipelines.id), | |
| userId: integer("user_id").notNull().references(() => users.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |
| export const activities = sqliteTable("activities", { | |
| id: integer("id").primaryKey({ autoIncrement: true }), | |
| type: text("type", { enum: ["call", "email", "meeting", "task", "note"] }).notNull(), | |
| subject: text("subject").notNull(), | |
| description: text("description"), | |
| dueDate: text("due_date"), | |
| isDone: integer("is_done", { mode: "boolean" }).notNull().default(false), | |
| dealId: integer("deal_id").references(() => deals.id), | |
| contactId: integer("contact_id").references(() => contacts.id), | |
| companyId: integer("company_id").references(() => companies.id), | |
| userId: integer("user_id").notNull().references(() => users.id), | |
| createdAt: text("created_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| updatedAt: text("updated_at").notNull().$defaultFn(() => new Date().toISOString()), | |
| }); | |