From e8fb9c166b1d63cc49f98fa721864acc0b62b444 Mon Sep 17 00:00:00 2001 From: michaelschal <35957947-michaelschal@users.noreply.replit.com> Date: Wed, 8 Oct 2025 14:33:16 +0000 Subject: [PATCH] Add user page permission management to track social media account access Introduce new types, database schema, and storage methods for managing user permissions related to social media pages. 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/u2SCNAb --- server/storage.ts | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/server/storage.ts b/server/storage.ts index 0608006..82a7b95 100644 --- a/server/storage.ts +++ b/server/storage.ts @@ -8,6 +8,7 @@ import { aiGenerations, cloudinaryConfig, openrouterConfig, + userPagePermissions, type User, type InsertUser, type SocialPage, @@ -25,6 +26,8 @@ import { type InsertCloudinaryConfig, type OpenrouterConfig, type InsertOpenrouterConfig, + type UserPagePermission, + type InsertUserPagePermission, } from "@shared/schema"; import { db } from "./db"; import { eq, and, gte, lte, desc, isNull } from "drizzle-orm"; @@ -81,6 +84,14 @@ export interface IStorage { getOpenrouterConfig(userId: string): Promise; createOpenrouterConfig(config: InsertOpenrouterConfig): Promise; updateOpenrouterConfig(userId: string, config: Partial): Promise; + + // User Page Permissions + getUserPagePermissions(userId: string): Promise; + getPagePermissions(pageId: string): Promise; + createPagePermission(permission: InsertUserPagePermission): Promise; + deletePagePermission(userId: string, pageId: string): Promise; + deleteAllUserPagePermissions(userId: string): Promise; + getUserAccessiblePages(userId: string): Promise; } export class DatabaseStorage implements IStorage { @@ -299,6 +310,43 @@ export class DatabaseStorage implements IStorage { .returning(); return updated; } + + // User Page Permissions + async getUserPagePermissions(userId: string): Promise { + return await db.select().from(userPagePermissions).where(eq(userPagePermissions.userId, userId)); + } + + async getPagePermissions(pageId: string): Promise { + return await db.select().from(userPagePermissions).where(eq(userPagePermissions.pageId, pageId)); + } + + async createPagePermission(permission: InsertUserPagePermission): Promise { + const [newPermission] = await db.insert(userPagePermissions).values(permission).returning(); + return newPermission; + } + + async deletePagePermission(userId: string, pageId: string): Promise { + await db.delete(userPagePermissions).where( + and( + eq(userPagePermissions.userId, userId), + eq(userPagePermissions.pageId, pageId) + ) + ); + } + + async deleteAllUserPagePermissions(userId: string): Promise { + await db.delete(userPagePermissions).where(eq(userPagePermissions.userId, userId)); + } + + async getUserAccessiblePages(userId: string): Promise { + const permissions = await db + .select() + .from(userPagePermissions) + .innerJoin(socialPages, eq(userPagePermissions.pageId, socialPages.id)) + .where(eq(userPagePermissions.userId, userId)); + + return permissions.map(p => p.social_pages); + } } export const storage = new DatabaseStorage();