generator client { provider = "prisma-client-js" previewFeatures = ["postgresqlExtensions"] } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model ExternalLink { id String @id @default(cuid()) type LinkType url String title String? projectId String project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) @@unique([projectId, url]) @@index([projectId], map: "idx_link_projectId") @@index([type], map: "idx_link_type") @@index([type, url], map: "idx_link_type_url") @@index([url], map: "idx_link_url") @@map("external_links") } model ProjectTag { projectId String tagId String project Project @relation(fields: [projectId], references: [id], onDelete: Cascade) tag Tag @relation(fields: [tagId], references: [id], onDelete: Cascade) @@id([projectId, tagId]) @@index([tagId]) @@map("project_tags") } model Project { id String @id @default(cuid()) name String nameEn String? slug String @unique description String descriptionEn String? content String? contentEn String? githubStars Int @default(0) githubStarsUpdatedAt DateTime? status ProjectStatus @default(ACTIVE) source String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt embedding Unsupported("vector")? embeddingUpdatedAt DateTime? links ExternalLink[] tags ProjectTag[] @@index([embedding], map: "idx_project_embedding_cosine") @@index([slug], map: "idx_project_slug") @@index([status, createdAt], map: "idx_project_status_createdAt") @@index([status, githubStars], map: "idx_project_status_github_stars") @@map("projects") } model Tag { id String @id @default(cuid()) name String @unique nameEn String? slug String @unique category TagCategory @default(FREE_TAG) createdAt DateTime @default(now()) projects ProjectTag[] @@index([category], map: "idx_tag_category") @@index([slug], map: "idx_tag_slug") @@map("tags") } model Signal { id String @id @default(cuid()) source String sourceUrl String title String titleEn String? summary String summaryEn String? topic String? topicEn String? tags Json sections Json engagement Int @default(0) hotScore Int @default(0) isHot Boolean @default(false) publishedAt DateTime isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([source, sourceUrl], map: "uniq_signal_source_url") @@index([source, publishedAt], map: "idx_signal_source_published") @@index([isActive, publishedAt], map: "idx_signal_active_published") @@index([isActive, isHot, hotScore, publishedAt], map: "idx_signal_active_hot_sort") @@index([engagement], map: "idx_signal_engagement") @@index([hotScore], map: "idx_signal_hot_score") @@map("signals") } enum LinkType { WEBSITE GITHUB HUGGINGFACE PAPER } enum ProjectStatus { ACTIVE ARCHIVED } enum TagCategory { FIXED_PROJECT_TYPE TECH_STACK AI_PARADIGM PROTOCOL_INTERFACE PRODUCT_FORM DOMAIN_SCENARIO RESOURCE_TYPE FREE_TAG }