diff --git a/app/(home-pages)/tag/[tag]/getDocumentsByTag.ts b/app/(home-pages)/tag/[tag]/getDocumentsByTag.ts index bb6394c9..45a0214d 100644 --- a/app/(home-pages)/tag/[tag]/getDocumentsByTag.ts +++ b/app/(home-pages)/tag/[tag]/getDocumentsByTag.ts @@ -45,6 +45,11 @@ export async function getDocumentsByTag( return null; } + // Skip if document has no sort_date + if (!doc.sort_date) { + return null; + } + // Normalize the document data - skip unrecognized formats const normalizedData = normalizeDocumentRecord(doc.data, doc.uri); if (!normalizedData) { diff --git a/app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx b/app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx index e2558466..52555686 100644 --- a/app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx +++ b/app/lish/[did]/[publication]/dashboard/PublishedPostsLists.tsx @@ -113,11 +113,11 @@ function PublishedPostItem(props: { bsky_like_count: doc.bsky_like_count ?? 0, indexed: true, recommend_count: doc.recommendsCount ?? 0, - identity_did: null, }, }, ], leaflets_to_documents: [], + publication_pages: [], blocked_by_admin: null, custom_domain_routes: [], }} diff --git a/drizzle/relations.ts b/drizzle/relations.ts index 38c37f5d..f298fbe1 100644 --- a/drizzle/relations.ts +++ b/drizzle/relations.ts @@ -1,5 +1,5 @@ import { relations } from "drizzle-orm/relations"; -import { identities, notifications, publications, documents, comments_on_documents, bsky_profiles, entity_sets, entities, facts, email_auth_tokens, recommends_on_documents, poll_votes_on_entity, permission_tokens, user_subscriptions, phone_rsvps_to_entity, site_standard_publications, custom_domains, custom_domain_routes, site_standard_documents, email_subscriptions_to_entity, atp_poll_records, atp_poll_votes, publication_newsletter_settings, publication_email_subscribers, publication_email_subscriber_events, bsky_follows, site_standard_documents_in_publications, documents_in_publications, document_mentions_in_bsky, bsky_posts, permission_token_on_homepage, publication_domains, publication_subscriptions, site_standard_subscriptions, user_entitlements, permission_token_rights, publication_post_sends, leaflets_to_documents, leaflets_in_publications } from "./schema"; +import { identities, notifications, publications, documents, comments_on_documents, bsky_profiles, entity_sets, entities, facts, email_auth_tokens, recommends_on_documents, poll_votes_on_entity, permission_tokens, user_subscriptions, phone_rsvps_to_entity, site_standard_publications, custom_domains, custom_domain_routes, site_standard_documents, email_subscriptions_to_entity, atp_poll_records, atp_poll_votes, publication_newsletter_settings, publication_email_subscribers, publication_email_subscriber_events, bsky_follows, site_standard_documents_in_publications, documents_in_publications, document_mentions_in_bsky, bsky_posts, permission_token_on_homepage, publication_domains, publication_subscriptions, site_standard_subscriptions, user_entitlements, permission_token_rights, publication_post_sends, publication_pages, leaflets_to_documents, leaflets_in_publications } from "./schema"; export const notificationsRelations = relations(notifications, ({one}) => ({ identity: one(identities, { @@ -53,6 +53,7 @@ export const publicationsRelations = relations(publications, ({one, many}) => ({ publication_domains: many(publication_domains), publication_subscriptions: many(publication_subscriptions), publication_post_sends: many(publication_post_sends), + publication_pages: many(publication_pages), leaflets_in_publications: many(leaflets_in_publications), })); @@ -73,6 +74,7 @@ export const documentsRelations = relations(documents, ({many}) => ({ documents_in_publications: many(documents_in_publications), document_mentions_in_bskies: many(document_mentions_in_bsky), publication_post_sends: many(publication_post_sends), + publication_pages: many(publication_pages), leaflets_to_documents: many(leaflets_to_documents), leaflets_in_publications: many(leaflets_in_publications), })); @@ -160,6 +162,7 @@ export const permission_tokensRelations = relations(permission_tokens, ({one, ma email_subscriptions_to_entities: many(email_subscriptions_to_entity), permission_token_on_homepages: many(permission_token_on_homepage), permission_token_rights: many(permission_token_rights), + publication_pages: many(publication_pages), leaflets_to_documents: many(leaflets_to_documents), leaflets_in_publications: many(leaflets_in_publications), })); @@ -406,6 +409,21 @@ export const publication_post_sendsRelations = relations(publication_post_sends, }), })); +export const publication_pagesRelations = relations(publication_pages, ({one}) => ({ + document: one(documents, { + fields: [publication_pages.document], + references: [documents.uri] + }), + permission_token: one(permission_tokens, { + fields: [publication_pages.leaflet_src], + references: [permission_tokens.id] + }), + publication: one(publications, { + fields: [publication_pages.publication], + references: [publications.uri] + }), +})); + export const leaflets_to_documentsRelations = relations(leaflets_to_documents, ({one}) => ({ document: one(documents, { fields: [leaflets_to_documents.document], diff --git a/drizzle/schema.ts b/drizzle/schema.ts index 38cc380b..3e28afeb 100644 --- a/drizzle/schema.ts +++ b/drizzle/schema.ts @@ -527,6 +527,23 @@ export const publication_post_sends = pgTable("publication_post_sends", { } }); +export const publication_pages = pgTable("publication_pages", { + // You can use { mode: "bigint" } if numbers are exceeding js number limitations + id: bigint("id", { mode: "number" }).notNull(), + created_at: timestamp("created_at", { withTimezone: true, mode: 'string' }).defaultNow().notNull(), + leaflet_src: uuid("leaflet_src").notNull().references(() => permission_tokens.id), + document: text("document").references(() => documents.uri), + path: text("path"), + publication: text("publication").notNull().references(() => publications.uri, { onDelete: "cascade", onUpdate: "cascade" } ), + title: text("title").default('').notNull(), + metadata: jsonb("metadata").default({}).notNull(), +}, +(table) => { + return { + publication_pages_pkey: primaryKey({ columns: [table.id, table.publication], name: "publication_pages_pkey"}), + } +}); + export const leaflets_to_documents = pgTable("leaflets_to_documents", { leaflet: uuid("leaflet").notNull().references(() => permission_tokens.id, { onDelete: "cascade", onUpdate: "cascade" } ), document: text("document").notNull().references(() => documents.uri, { onDelete: "cascade", onUpdate: "cascade" } ), @@ -536,6 +553,8 @@ export const leaflets_to_documents = pgTable("leaflets_to_documents", { tags: text("tags").default('RRAY[').array(), cover_image: text("cover_image"), preferences: jsonb("preferences"), + scheduled_publish_at: timestamp("scheduled_publish_at", { withTimezone: true, mode: 'string' }), + scheduled_publish_data: jsonb("scheduled_publish_data"), }, (table) => { return { @@ -553,6 +572,8 @@ export const leaflets_in_publications = pgTable("leaflets_in_publications", { tags: text("tags").default('RRAY[').array(), cover_image: text("cover_image"), preferences: jsonb("preferences"), + scheduled_publish_at: timestamp("scheduled_publish_at", { withTimezone: true, mode: 'string' }), + scheduled_publish_data: jsonb("scheduled_publish_data"), }, (table) => { return { diff --git a/supabase/database.types.ts b/supabase/database.types.ts index 60d5bb81..777384af 100644 --- a/supabase/database.types.ts +++ b/supabase/database.types.ts @@ -337,31 +337,28 @@ export type Database = { Row: { bsky_like_count: number data: Json - identity_did: string | null indexed: boolean indexed_at: string recommend_count: number - sort_date: string + sort_date: string | null uri: string } Insert: { bsky_like_count?: number data: Json - identity_did?: string | null indexed?: boolean indexed_at?: string recommend_count?: number - sort_date?: string + sort_date?: string | null uri: string } Update: { bsky_like_count?: number data?: Json - identity_did?: string | null indexed?: boolean indexed_at?: string recommend_count?: number - sort_date?: string + sort_date?: string | null uri?: string } Relationships: [] @@ -605,6 +602,8 @@ export type Database = { leaflet: string preferences: Json | null publication: string + scheduled_publish_at: string | null + scheduled_publish_data: Json | null tags: string[] | null title: string } @@ -616,6 +615,8 @@ export type Database = { leaflet: string preferences?: Json | null publication: string + scheduled_publish_at?: string | null + scheduled_publish_data?: Json | null tags?: string[] | null title?: string } @@ -627,6 +628,8 @@ export type Database = { leaflet?: string preferences?: Json | null publication?: string + scheduled_publish_at?: string | null + scheduled_publish_data?: Json | null tags?: string[] | null title?: string } @@ -656,35 +659,38 @@ export type Database = { } leaflets_to_documents: { Row: { - archived: boolean | null cover_image: string | null created_at: string description: string document: string leaflet: string preferences: Json | null + scheduled_publish_at: string | null + scheduled_publish_data: Json | null tags: string[] | null title: string } Insert: { - archived?: boolean | null cover_image?: string | null created_at?: string description?: string document: string leaflet: string preferences?: Json | null + scheduled_publish_at?: string | null + scheduled_publish_data?: Json | null tags?: string[] | null title?: string } Update: { - archived?: boolean | null cover_image?: string | null created_at?: string description?: string document?: string leaflet?: string preferences?: Json | null + scheduled_publish_at?: string | null + scheduled_publish_data?: Json | null tags?: string[] | null title?: string } @@ -1194,6 +1200,61 @@ export type Database = { }, ] } + publication_pages: { + Row: { + created_at: string + document: string | null + id: number + leaflet_src: string + metadata: Json + path: string | null + publication: string + title: string + } + Insert: { + created_at?: string + document?: string | null + id?: number + leaflet_src: string + metadata?: Json + path?: string | null + publication: string + title?: string + } + Update: { + created_at?: string + document?: string | null + id?: number + leaflet_src?: string + metadata?: Json + path?: string | null + publication?: string + title?: string + } + Relationships: [ + { + foreignKeyName: "publication_pages_document_fkey" + columns: ["document"] + isOneToOne: false + referencedRelation: "documents" + referencedColumns: ["uri"] + }, + { + foreignKeyName: "publication_pages_leaflet_src_fkey" + columns: ["leaflet_src"] + isOneToOne: false + referencedRelation: "permission_tokens" + referencedColumns: ["id"] + }, + { + foreignKeyName: "publication_pages_publication_fkey" + columns: ["publication"] + isOneToOne: false + referencedRelation: "publications" + referencedColumns: ["uri"] + }, + ] + } publication_post_sends: { Row: { completed_at: string | null