Add to db schema
This commit is contained in:
		@@ -3,8 +3,10 @@ import {
 | 
				
			|||||||
  timestamp,
 | 
					  timestamp,
 | 
				
			||||||
  pgTable,
 | 
					  pgTable,
 | 
				
			||||||
  text,
 | 
					  text,
 | 
				
			||||||
 | 
					  pgEnum,
 | 
				
			||||||
  primaryKey,
 | 
					  primaryKey,
 | 
				
			||||||
  integer,
 | 
					  integer,
 | 
				
			||||||
 | 
					  numeric,
 | 
				
			||||||
} from "drizzle-orm/pg-core"
 | 
					} from "drizzle-orm/pg-core"
 | 
				
			||||||
import postgres from "postgres"
 | 
					import postgres from "postgres"
 | 
				
			||||||
import { drizzle } from "drizzle-orm/postgres-js"
 | 
					import { drizzle } from "drizzle-orm/postgres-js"
 | 
				
			||||||
@@ -12,18 +14,29 @@ import type { AdapterAccountType } from "next-auth/adapters"
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
const connectionString = process.env.DATABASE_URL ?? "";
 | 
					const connectionString = process.env.DATABASE_URL ?? "";
 | 
				
			||||||
const pool = postgres(connectionString, { max: 1 })
 | 
					const pool = postgres(connectionString, { max: 1 })
 | 
				
			||||||
 
 | 
					 | 
				
			||||||
export const db = drizzle(pool)
 | 
					export const db = drizzle(pool)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
export const users = pgTable("user", {
 | 
					export const frequencyEnum = pgEnum("frequency", ["Monthly", "Bi-weekly", "Weekly"])
 | 
				
			||||||
 | 
					export const workOrderStatusEnum = pgEnum("workOrderStatus", ["Pending", "Open", "Closed"])
 | 
				
			||||||
 | 
					export const preferredDaysofWeekEnum = pgEnum("preferredDaysofWeek", 
 | 
				
			||||||
 | 
					  ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
 | 
				
			||||||
 | 
					export const propertyTypeEnum = pgEnum("propertyType", ["Apartment", "Condominium",
 | 
				
			||||||
 | 
					  "Mobile Home", "Multi-Unit Home", "Single-Family Residence", "Townhouse"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const users = pgTable(
 | 
				
			||||||
 | 
					  "user",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
    id: text("id")
 | 
					    id: text("id")
 | 
				
			||||||
      .primaryKey()
 | 
					      .primaryKey()
 | 
				
			||||||
      .$defaultFn(() => crypto.randomUUID()),
 | 
					      .$defaultFn(() => crypto.randomUUID()),
 | 
				
			||||||
    name: text("name"),
 | 
					    name: text("name"),
 | 
				
			||||||
  email: text("email").unique(),
 | 
					    email: text("email").unique().notNull(),
 | 
				
			||||||
    emailVerified: timestamp("emailVerified", { mode: "date" }),
 | 
					    emailVerified: timestamp("emailVerified", { mode: "date" }),
 | 
				
			||||||
    image: text("image"),
 | 
					    image: text("image"),
 | 
				
			||||||
})
 | 
					    tenantID: text("tenantID").references(() => tenants.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					    stripeCustomerID: text("stripeCustomerID"),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
export const accounts = pgTable(
 | 
					export const accounts = pgTable(
 | 
				
			||||||
  "account",
 | 
					  "account",
 | 
				
			||||||
@@ -49,13 +62,16 @@ export const accounts = pgTable(
 | 
				
			|||||||
  })
 | 
					  })
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
export const sessions = pgTable("session", {
 | 
					export const sessions = pgTable(
 | 
				
			||||||
 | 
					  "session",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
    sessionToken: text("sessionToken").primaryKey(),
 | 
					    sessionToken: text("sessionToken").primaryKey(),
 | 
				
			||||||
    userId: text("userId")
 | 
					    userId: text("userId")
 | 
				
			||||||
      .notNull()
 | 
					      .notNull()
 | 
				
			||||||
      .references(() => users.id, { onDelete: "cascade" }),
 | 
					      .references(() => users.id, { onDelete: "cascade" }),
 | 
				
			||||||
    expires: timestamp("expires", { mode: "date" }).notNull(),
 | 
					    expires: timestamp("expires", { mode: "date" }).notNull(),
 | 
				
			||||||
})
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
export const verificationTokens = pgTable(
 | 
					export const verificationTokens = pgTable(
 | 
				
			||||||
  "verificationToken",
 | 
					  "verificationToken",
 | 
				
			||||||
@@ -91,3 +107,83 @@ export const authenticators = pgTable(
 | 
				
			|||||||
    }),
 | 
					    }),
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const admins = pgTable(
 | 
				
			||||||
 | 
					  "admin",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    userID: text("userID").notNull().references(() => users.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const properties = pgTable(
 | 
				
			||||||
 | 
					  "property",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    address1: text("address1").unique().notNull(),
 | 
				
			||||||
 | 
					    address2: text("address2"),
 | 
				
			||||||
 | 
					    city: text("city").notNull(),
 | 
				
			||||||
 | 
					    state: text("state").notNull(),
 | 
				
			||||||
 | 
					    zip: text("zip").notNull(),
 | 
				
			||||||
 | 
					    monthlyRent: numeric("monthlyRent").notNull(),
 | 
				
			||||||
 | 
					    securityDeposit: numeric("securityDeposit"),
 | 
				
			||||||
 | 
					    propertyType: propertyTypeEnum("propertyType").notNull(),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const tenants = pgTable(
 | 
				
			||||||
 | 
					  "tenant",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    propertyID: text("propertyID").notNull().references(() => properties.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const payments = pgTable(
 | 
				
			||||||
 | 
					  "payment",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    userID: text("userID").notNull().references(() => users.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					    stripePaymentID: text("stripeID"),
 | 
				
			||||||
 | 
					    amount: numeric("amount").notNull(),
 | 
				
			||||||
 | 
					    paymentDate: timestamp("paymentDate").notNull(),
 | 
				
			||||||
 | 
					    status: text("status").notNull(),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const autoPayments = pgTable(
 | 
				
			||||||
 | 
					  "autoPayment",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    userID: text("userID").notNull().references(() => users.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					    amount: numeric("amount").notNull(),
 | 
				
			||||||
 | 
					    frequency: frequencyEnum("frequency").notNull(),
 | 
				
			||||||
 | 
					    preferredDayofWeek: preferredDaysofWeekEnum("preferredDayofWeek").notNull(),
 | 
				
			||||||
 | 
					    startDate: timestamp("startDate").notNull(),
 | 
				
			||||||
 | 
					    nextPaymentDate: timestamp("nextPaymentDate").notNull(),
 | 
				
			||||||
 | 
					    stripePaymentMethodID: text("stripePaymentMethodID").notNull(),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const workorders = pgTable(
 | 
				
			||||||
 | 
					  "workorder",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    userID: text("userID").notNull().references(() => users.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					    date: timestamp("date").notNull(),
 | 
				
			||||||
 | 
					    status: workOrderStatusEnum("status").notNull().default("Pending"),
 | 
				
			||||||
 | 
					    title: text("title").notNull(),
 | 
				
			||||||
 | 
					    description: text("description"),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const documents = pgTable(
 | 
				
			||||||
 | 
					  "document",
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    id: text("id").primaryKey(),
 | 
				
			||||||
 | 
					    tenantID: text("tenantID").notNull().references(() => tenants.id, { onDelete: "cascade" }),
 | 
				
			||||||
 | 
					    name: text("name").notNull(),
 | 
				
			||||||
 | 
					    type: text("type").notNull(),
 | 
				
			||||||
 | 
					    file: text("file").notNull(),
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user