|
|
@@ -60,7 +60,7 @@ export async function upsertUser(user: InsertUser): Promise<void> {
|
|
|
else if (user.openId === ENV.ownerOpenId) { values.role = 'admin'; updateSet.role = 'admin'; }
|
|
|
if (!values.lastSignedIn) { values.lastSignedIn = new Date(); }
|
|
|
if (Object.keys(updateSet).length === 0) { updateSet.lastSignedIn = new Date(); }
|
|
|
- await db.insert(users).values(values).onDuplicateKeyUpdate({ set: updateSet });
|
|
|
+ await db.insert(users).values(values).onConflictDoUpdate({ target: users.openId, set: updateSet });
|
|
|
} catch (error) { console.error("[Database] Failed to upsert user:", error); throw error; }
|
|
|
}
|
|
|
|
|
|
@@ -236,7 +236,7 @@ export async function expireOldInvitations() {
|
|
|
lt(invitations.expiresAt, new Date()),
|
|
|
)
|
|
|
);
|
|
|
- return result[0]?.affectedRows || 0;
|
|
|
+ return 0; // PostgreSQL: affected row count not available without RETURNING
|
|
|
}
|
|
|
|
|
|
/* ─── Audit log helpers ─── */
|
|
|
@@ -474,9 +474,9 @@ export async function getConversationStats() {
|
|
|
export async function addMessage(data: InsertMessage) {
|
|
|
const db = await getDb();
|
|
|
if (!db) throw new Error("Database not available");
|
|
|
- const result = await db.insert(messages).values(data);
|
|
|
+ const [inserted] = await db.insert(messages).values(data).returning({ id: messages.id });
|
|
|
await db.update(conversations).set({ updatedAt: new Date() }).where(eq(conversations.id, data.conversationId));
|
|
|
- return { id: Number(result[0].insertId), ...data };
|
|
|
+ return { id: inserted.id, ...data };
|
|
|
}
|
|
|
|
|
|
export async function getMessagesByConversation(conversationId: number) {
|
|
|
@@ -545,8 +545,8 @@ export async function bulkCreateWorkflowSuggestions(suggestions: InsertWorkflowS
|
|
|
export async function trackAnalyticsEvent(event: Omit<InsertAnalyticsEvent, "id" | "createdAt">) {
|
|
|
const db = await getDb();
|
|
|
if (!db) return null;
|
|
|
- const [result] = await db.insert(analyticsEvents).values(event as any);
|
|
|
- return result.insertId;
|
|
|
+ const [inserted] = await db.insert(analyticsEvents).values(event as any).returning({ id: analyticsEvents.id });
|
|
|
+ return inserted?.id ?? null;
|
|
|
}
|
|
|
|
|
|
export async function getAnalyticsEvents(filters?: {
|
|
|
@@ -624,8 +624,8 @@ export async function getAnalyticsSummary(startDate?: Date, endDate?: Date) {
|
|
|
export async function createDataSource(source: Omit<InsertDataSource, "id" | "createdAt" | "updatedAt">) {
|
|
|
const db = await getDb();
|
|
|
if (!db) return null;
|
|
|
- const [result] = await db.insert(dataSources).values(source as any);
|
|
|
- return result.insertId;
|
|
|
+ const [inserted] = await db.insert(dataSources).values(source as any).returning({ id: dataSources.id });
|
|
|
+ return inserted?.id ?? null;
|
|
|
}
|
|
|
|
|
|
export async function getDataSources() {
|
|
|
@@ -658,8 +658,8 @@ export async function deleteDataSource(id: number) {
|
|
|
export async function createApiConnection(conn: Omit<InsertApiConnection, "id" | "createdAt" | "updatedAt">) {
|
|
|
const db = await getDb();
|
|
|
if (!db) return null;
|
|
|
- const [result] = await db.insert(apiConnections).values(conn as any);
|
|
|
- return result.insertId;
|
|
|
+ const [inserted] = await db.insert(apiConnections).values(conn as any).returning({ id: apiConnections.id });
|
|
|
+ return inserted?.id ?? null;
|
|
|
}
|
|
|
|
|
|
export async function getApiConnections() {
|