diff --git a/server/storage.ts b/server/storage.ts index 20571bd..cb8e701 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -58,9 +58,11 @@ export interface IStorage { // Posts getPosts(userId: string): Promise; getPost(id: string): Promise; + getPostWithMedia(id: string): Promise<{ post: Post; media: Media[] } | undefined>; createPost(post: InsertPost): Promise; updatePost(id: string, post: Partial): Promise; deletePost(id: string): Promise; + updatePostMedia(postId: string, mediaIds: string[]): Promise; // Scheduled Posts getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise; @@ -181,6 +183,23 @@ export class DatabaseStorage implements IStorage { return post || undefined; } + async getPostWithMedia(id: string): Promise<{ post: Post; media: Media[] } | undefined> { + const post = await this.getPost(id); + if (!post) return undefined; + + const postMediaLinks = await this.getPostMedia(id); + const mediaItems: Media[] = []; + + for (const link of postMediaLinks) { + const mediaItem = await this.getMediaById(link.mediaId); + if (mediaItem) { + mediaItems.push(mediaItem); + } + } + + return { post, media: mediaItems }; + } + async createPost(post: InsertPost): Promise { const [newPost] = await db.insert(posts).values(post).returning(); return newPost; @@ -195,6 +214,19 @@ export class DatabaseStorage implements IStorage { await db.delete(posts).where(eq(posts.id, id)); } + async updatePostMedia(postId: string, mediaIds: string[]): Promise { + await db.delete(postMedia).where(eq(postMedia.postId, postId)); + + if (mediaIds.length > 0) { + const postMediaEntries = mediaIds.map((mediaId, index) => ({ + postId, + mediaId, + displayOrder: index, + })); + await db.insert(postMedia).values(postMediaEntries); + } + } + // Scheduled Posts async getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise { let query = db