feat: implement admin panel with multiple routes for user management, credits, jobs, and content moderation. Add admin dashboard for platform overview and integrate visibility controls for featured content. Enhance sidebar navigation for admin access and ensure proper session handling for admin users.
bede2fc Download packages/db/src/schema/auth.ts from Atmint/cpns: direct link, hf CLI and curl.
- Browser
- Download file 2.99 kB
-
https://huggingface.co/spaces/Atmint/cpns/resolve/main/packages/db/src/schema/auth.ts
- Command line
-
hf download hf://spaces/Atmint/cpns/packages/db/src/schema/auth.ts
-
curl -L -o auth.ts https://huggingface.co/spaces/Atmint/cpns/resolve/main/packages/db/src/schema/auth.ts
2.99 kB
| import { relations } from "drizzle-orm"; | |
| import { pgTable, text, timestamp, boolean, index } from "drizzle-orm/pg-core"; | |
| export const user = pgTable("user", { | |
| id: text("id").primaryKey(), | |
| name: text("name").notNull(), | |
| email: text("email").notNull().unique(), | |
| emailVerified: boolean("email_verified").default(false).notNull(), | |
| image: text("image"), | |
| role: text("role").default("user").notNull(), | |
| suspended: boolean("suspended").default(false).notNull(), | |
| createdAt: timestamp("created_at").defaultNow().notNull(), | |
| updatedAt: timestamp("updated_at") | |
| .defaultNow() | |
| .$onUpdate(() => /* @__PURE__ */ new Date()) | |
| .notNull(), | |
| }); | |
| export const session = pgTable( | |
| "session", | |
| { | |
| id: text("id").primaryKey(), | |
| expiresAt: timestamp("expires_at").notNull(), | |
| token: text("token").notNull().unique(), | |
| createdAt: timestamp("created_at").defaultNow().notNull(), | |
| updatedAt: timestamp("updated_at") | |
| .$onUpdate(() => /* @__PURE__ */ new Date()) | |
| .notNull(), | |
| ipAddress: text("ip_address"), | |
| userAgent: text("user_agent"), | |
| userId: text("user_id") | |
| .notNull() | |
| .references(() => user.id, { onDelete: "cascade" }), | |
| }, | |
| (table) => [index("session_userId_idx").on(table.userId)], | |
| ); | |
| export const account = pgTable( | |
| "account", | |
| { | |
| id: text("id").primaryKey(), | |
| accountId: text("account_id").notNull(), | |
| providerId: text("provider_id").notNull(), | |
| userId: text("user_id") | |
| .notNull() | |
| .references(() => user.id, { onDelete: "cascade" }), | |
| accessToken: text("access_token"), | |
| refreshToken: text("refresh_token"), | |
| idToken: text("id_token"), | |
| accessTokenExpiresAt: timestamp("access_token_expires_at"), | |
| refreshTokenExpiresAt: timestamp("refresh_token_expires_at"), | |
| scope: text("scope"), | |
| password: text("password"), | |
| createdAt: timestamp("created_at").defaultNow().notNull(), | |
| updatedAt: timestamp("updated_at") | |
| .$onUpdate(() => /* @__PURE__ */ new Date()) | |
| .notNull(), | |
| }, | |
| (table) => [index("account_userId_idx").on(table.userId)], | |
| ); | |
| export const verification = pgTable( | |
| "verification", | |
| { | |
| id: text("id").primaryKey(), | |
| identifier: text("identifier").notNull(), | |
| value: text("value").notNull(), | |
| expiresAt: timestamp("expires_at").notNull(), | |
| createdAt: timestamp("created_at").defaultNow().notNull(), | |
| updatedAt: timestamp("updated_at") | |
| .defaultNow() | |
| .$onUpdate(() => /* @__PURE__ */ new Date()) | |
| .notNull(), | |
| }, | |
| (table) => [index("verification_identifier_idx").on(table.identifier)], | |
| ); | |
| export const userRelations = relations(user, ({ many }) => ({ | |
| sessions: many(session), | |
| accounts: many(account), | |
| })); | |
| export const sessionRelations = relations(session, ({ one }) => ({ | |
| user: one(user, { | |
| fields: [session.userId], | |
| references: [user.id], | |
| }), | |
| })); | |
| export const accountRelations = relations(account, ({ one }) => ({ | |
| user: one(user, { | |
| fields: [account.userId], | |
| references: [user.id], | |
| }), | |
| })); | |