mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-11 17:26:45 +02:00
Enable scheduling and posting to Facebook and Instagram pages
Fix bug in post creation to correctly handle media, page selection, and scheduling for social media posts. 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/sjuGm8z
This commit is contained in:
1 parent
f07f897ce0
commit
e5123fbb27
3 files changed
+45
-3
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 383 KiB |
@@ -106,9 +106,21 @@ export default function NewPost() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selectedPages.length === 0) {
|
||||||
|
toast({
|
||||||
|
title: "Page requise",
|
||||||
|
description: "Veuillez sélectionner au moins une page",
|
||||||
|
variant: "destructive",
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
createPostMutation.mutate({
|
createPostMutation.mutate({
|
||||||
content: postText,
|
content: postText,
|
||||||
scheduledFor: scheduledDate || undefined,
|
scheduledFor: scheduledDate || undefined,
|
||||||
|
mediaId: selectedMedia || undefined,
|
||||||
|
pageIds: selectedPages,
|
||||||
|
postType: 'feed', // Default to feed post
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+33
-3
@@ -1,13 +1,14 @@
|
|||||||
import type { Express, Request, Response, NextFunction } from "express";
|
import type { Express, Request, Response, NextFunction } from "express";
|
||||||
import { createServer, type Server } from "http";
|
import { createServer, type Server } from "http";
|
||||||
import { storage } from "./storage";
|
import { storage } from "./storage";
|
||||||
|
import { db } from "./db";
|
||||||
import multer from "multer";
|
import multer from "multer";
|
||||||
import bcrypt from "bcrypt";
|
import bcrypt from "bcrypt";
|
||||||
import passport from "./auth";
|
import passport from "./auth";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { openRouterService } from "./services/openrouter";
|
import { openRouterService } from "./services/openrouter";
|
||||||
import { cloudinaryService } from "./services/cloudinary";
|
import { cloudinaryService } from "./services/cloudinary";
|
||||||
import { insertPostSchema, insertScheduledPostSchema, insertSocialPageSchema, insertAiGenerationSchema, insertCloudinaryConfigSchema, insertOpenrouterConfigSchema, updateOpenrouterConfigSchema, insertUserSchema } from "@shared/schema";
|
import { insertPostSchema, insertScheduledPostSchema, insertSocialPageSchema, insertAiGenerationSchema, insertCloudinaryConfigSchema, insertOpenrouterConfigSchema, updateOpenrouterConfigSchema, insertUserSchema, postMedia } from "@shared/schema";
|
||||||
import type { User, InsertUser } from "@shared/schema";
|
import type { User, InsertUser } from "@shared/schema";
|
||||||
|
|
||||||
const upload = multer({ storage: multer.memoryStorage() });
|
const upload = multer({ storage: multer.memoryStorage() });
|
||||||
@@ -442,12 +443,41 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
|||||||
try {
|
try {
|
||||||
const user = req.user as User;
|
const user = req.user as User;
|
||||||
const userId = user.id;
|
const userId = user.id;
|
||||||
const postData = insertPostSchema.parse({ ...req.body, userId });
|
const { pageIds, postType, mediaId, ...postFields } = req.body;
|
||||||
|
|
||||||
|
// Create the post
|
||||||
|
const postData = insertPostSchema.parse({ ...postFields, userId });
|
||||||
const post = await storage.createPost(postData);
|
const post = await storage.createPost(postData);
|
||||||
|
|
||||||
|
// Link media to post if provided
|
||||||
|
if (mediaId) {
|
||||||
|
await db.insert(postMedia).values({
|
||||||
|
postId: post.id,
|
||||||
|
mediaId: mediaId,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create scheduled posts for each selected page
|
||||||
|
if (pageIds && Array.isArray(pageIds) && pageIds.length > 0) {
|
||||||
|
const scheduledAt = postFields.scheduledFor
|
||||||
|
? new Date(postFields.scheduledFor)
|
||||||
|
: new Date(); // Publish immediately if no date specified
|
||||||
|
|
||||||
|
for (const pageId of pageIds) {
|
||||||
|
await storage.createScheduledPost({
|
||||||
|
postId: post.id,
|
||||||
|
pageId,
|
||||||
|
postType: postType || 'feed',
|
||||||
|
scheduledAt,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res.json(post);
|
res.json(post);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error creating post:", error);
|
console.error("Error creating post:", error);
|
||||||
res.status(500).json({ error: "Failed to create post" });
|
const errorMessage = error instanceof Error ? error.message : "Failed to create post";
|
||||||
|
res.status(500).json({ error: errorMessage });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user