mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-24 07:28:11 +02:00
Add ability to update post media and retrieve posts with their associated media
Introduce `getPostWithMedia` and `updatePostMedia` methods to `DatabaseStorage` for handling post media associations. Replit-Commit-Author: Agent Replit-Commit-Session-Id: ae4037a0-2a6f-4530-9bac-79b543286bda Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/397bca8c-984f-43ff-841a-10897aeb8140/ae4037a0-2a6f-4530-9bac-79b543286bda/ER8Naji
This commit is contained in:
1 parent
344da0f78e
commit
5439566577
1 file changed
+32
@@ -58,9 +58,11 @@ export interface IStorage {
|
|||||||
// Posts
|
// Posts
|
||||||
getPosts(userId: string): Promise<Post[]>;
|
getPosts(userId: string): Promise<Post[]>;
|
||||||
getPost(id: string): Promise<Post | undefined>;
|
getPost(id: string): Promise<Post | undefined>;
|
||||||
|
getPostWithMedia(id: string): Promise<{ post: Post; media: Media[] } | undefined>;
|
||||||
createPost(post: InsertPost): Promise<Post>;
|
createPost(post: InsertPost): Promise<Post>;
|
||||||
updatePost(id: string, post: Partial<InsertPost>): Promise<Post>;
|
updatePost(id: string, post: Partial<InsertPost>): Promise<Post>;
|
||||||
deletePost(id: string): Promise<void>;
|
deletePost(id: string): Promise<void>;
|
||||||
|
updatePostMedia(postId: string, mediaIds: string[]): Promise<void>;
|
||||||
|
|
||||||
// Scheduled Posts
|
// Scheduled Posts
|
||||||
getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise<ScheduledPost[]>;
|
getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise<ScheduledPost[]>;
|
||||||
@@ -181,6 +183,23 @@ export class DatabaseStorage implements IStorage {
|
|||||||
return post || undefined;
|
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<Post> {
|
async createPost(post: InsertPost): Promise<Post> {
|
||||||
const [newPost] = await db.insert(posts).values(post).returning();
|
const [newPost] = await db.insert(posts).values(post).returning();
|
||||||
return newPost;
|
return newPost;
|
||||||
@@ -195,6 +214,19 @@ export class DatabaseStorage implements IStorage {
|
|||||||
await db.delete(posts).where(eq(posts.id, id));
|
await db.delete(posts).where(eq(posts.id, id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updatePostMedia(postId: string, mediaIds: string[]): Promise<void> {
|
||||||
|
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
|
// Scheduled Posts
|
||||||
async getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise<any[]> {
|
async getScheduledPosts(userId: string, startDate?: Date, endDate?: Date): Promise<any[]> {
|
||||||
let query = db
|
let query = db
|
||||||
|
|||||||
Reference in new issue
Block a user