'use server' import type { EntityVersionWithAuthor } from './types' import db from '@admin/db' import { entityVersions, user } from '@admin/db/schema' import { and, desc, eq } from 'drizzle-orm' import { alias } from 'drizzle-orm/pg-core' import { cacheLife, cacheTag } from 'next/cache' import { entityVersionsCacheTags } from './types' const createdByUser = alias(user, 'entity_version_created_by_user') export async function getEntityVersions( entityType: string, entityId: string ): Promise { 'use cache' cacheLife('max') cacheTag(entityVersionsCacheTags.for(entityType, entityId)) try { const rows = await db .select({ id: entityVersions.id, entityType: entityVersions.entityType, entityId: entityVersions.entityId, version: entityVersions.version, data: entityVersions.data, createdAt: entityVersions.createdAt, createdBy: entityVersions.createdBy, createdByUser: { id: createdByUser.id, name: createdByUser.name, email: createdByUser.email, image: createdByUser.image } }) .from(entityVersions) .leftJoin(createdByUser, eq(entityVersions.createdBy, createdByUser.id)) .where(and(eq(entityVersions.entityType, entityType), eq(entityVersions.entityId, entityId))) .orderBy(desc(entityVersions.version), desc(entityVersions.createdAt)) return rows as EntityVersionWithAuthor[] } catch (error) { console.error('Error fetching entity versions:', error) return [] } }