Files
AdventureLog/src/lib/db/schema.ts
2024-06-01 15:29:53 +00:00

106 lines
2.9 KiB
TypeScript

import { desc, sql } from "drizzle-orm";
import {
pgTable,
text,
timestamp,
json,
serial,
varchar,
integer,
} from "drizzle-orm/pg-core";
export const sharedAdventures = pgTable("sharedAdventures", {
id: text("id").primaryKey(),
data: json("data").notNull(),
name: text("name").notNull(),
date: text("date").notNull(),
});
export const userTable = pgTable("user", {
id: text("id").primaryKey(),
username: text("username").notNull(),
first_name: text("first_name").notNull(),
last_name: text("last_name").notNull(),
icon: text("icon"),
hashed_password: varchar("hashed_password").notNull(),
signup_date: timestamp("signup_date", {
withTimezone: true,
mode: "date",
}).notNull(),
last_login: timestamp("last_login", {
withTimezone: true,
mode: "date",
}),
role: text("role").notNull(),
});
// export type SelectUser = typeof userTable.$inferSelect;
export const sessionTable = pgTable("session", {
id: text("id").primaryKey(),
userId: text("user_id")
.notNull()
.references(() => userTable.id),
expiresAt: timestamp("expires_at", {
withTimezone: true,
mode: "date",
}).notNull(),
});
export const worldTravelCountries = pgTable("worldTravelCountries", {
id: serial("id").primaryKey(),
name: text("name").notNull(),
country_code: text("country_code").notNull().unique(),
continent: text("continent").notNull(),
});
export const worldTravelCountryRegions = pgTable("worldTravelCountryRegions", {
id: varchar("id").primaryKey(),
name: text("name").notNull(),
country_code: text("country_code")
.notNull()
.references(() => worldTravelCountries.country_code),
info: json("info"),
});
export const userVisitedWorldTravel = pgTable("userVisitedWorldTravel", {
id: serial("id").primaryKey(),
country_code: text("country_code")
.notNull()
.references(() => worldTravelCountries.country_code),
userId: text("user_id")
.notNull()
.references(() => userTable.id),
region_id: varchar("region_id")
.notNull()
.references(() => worldTravelCountryRegions.id),
});
export const userPlannedTrips = pgTable("userPlannedTrips", {
id: serial("id").primaryKey(),
userId: text("userId")
.notNull()
.references(() => userTable.id),
name: text("adventureName").notNull(),
description: text("description"),
startDate: text("startDate"),
endDate: text("endDate"),
});
export const adventureTable = pgTable("adventures", {
id: serial("id").primaryKey(),
type: text("type").notNull(),
userId: text("userId").references(() => userTable.id),
name: text("name").notNull(),
location: text("location"),
activityTypes: text("activityTypes")
.array()
.default(sql`ARRAY[]::text[]`),
description: text("description"),
rating: integer("rating"),
link: text("link"),
imageUrl: text("imageUrl"),
date: text("date"),
tripId: integer("tripId").references(() => userPlannedTrips.id),
});