mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-21 22:46:41 +02:00
Move these apps to apps-archived/ as they are not actively developed: - inventory: Inventory management app - presi: Presentation tool - storage: Cloud storage app These can be reactivated by moving back to apps/ when needed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { pgTable, uuid, varchar, timestamp, boolean, text, integer } from 'drizzle-orm/pg-core';
|
|
import { relations } from 'drizzle-orm';
|
|
|
|
export const folders = pgTable('folders', {
|
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
userId: varchar('user_id', { length: 255 }).notNull(),
|
|
|
|
// Folder metadata
|
|
name: varchar('name', { length: 255 }).notNull(),
|
|
color: varchar('color', { length: 20 }),
|
|
description: text('description'),
|
|
|
|
// Hierarchy (self-referencing)
|
|
parentFolderId: uuid('parent_folder_id'),
|
|
|
|
// Path for efficient queries (e.g., "/root-uuid/parent-uuid/current-uuid")
|
|
path: text('path').notNull(),
|
|
depth: integer('depth').default(0).notNull(),
|
|
|
|
// Status flags
|
|
isFavorite: boolean('is_favorite').default(false).notNull(),
|
|
isDeleted: boolean('is_deleted').default(false).notNull(),
|
|
deletedAt: timestamp('deleted_at', { withTimezone: true }),
|
|
|
|
// Timestamps
|
|
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
|
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
});
|
|
|
|
// Self-referencing relation
|
|
export const foldersRelations = relations(folders, ({ one, many }) => ({
|
|
parentFolder: one(folders, {
|
|
fields: [folders.parentFolderId],
|
|
references: [folders.id],
|
|
relationName: 'folder_parent',
|
|
}),
|
|
childFolders: many(folders, { relationName: 'folder_parent' }),
|
|
}));
|
|
|
|
export type Folder = typeof folders.$inferSelect;
|
|
export type NewFolder = typeof folders.$inferInsert;
|