mirror of
https://github.com/R0m1k3/Socialflow.git
synced 2026-10-23 23:18:12 +02:00
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
This commit is contained in:
1 parent
7726f6063d
commit
e8fb9c166b
1 file changed
+48
@@ -8,6 +8,7 @@ import {
|
|||||||
aiGenerations,
|
aiGenerations,
|
||||||
cloudinaryConfig,
|
cloudinaryConfig,
|
||||||
openrouterConfig,
|
openrouterConfig,
|
||||||
|
userPagePermissions,
|
||||||
type User,
|
type User,
|
||||||
type InsertUser,
|
type InsertUser,
|
||||||
type SocialPage,
|
type SocialPage,
|
||||||
@@ -25,6 +26,8 @@ import {
|
|||||||
type InsertCloudinaryConfig,
|
type InsertCloudinaryConfig,
|
||||||
type OpenrouterConfig,
|
type OpenrouterConfig,
|
||||||
type InsertOpenrouterConfig,
|
type InsertOpenrouterConfig,
|
||||||
|
type UserPagePermission,
|
||||||
|
type InsertUserPagePermission,
|
||||||
} from "@shared/schema";
|
} from "@shared/schema";
|
||||||
import { db } from "./db";
|
import { db } from "./db";
|
||||||
import { eq, and, gte, lte, desc, isNull } from "drizzle-orm";
|
import { eq, and, gte, lte, desc, isNull } from "drizzle-orm";
|
||||||
@@ -81,6 +84,14 @@ export interface IStorage {
|
|||||||
getOpenrouterConfig(userId: string): Promise<OpenrouterConfig | undefined>;
|
getOpenrouterConfig(userId: string): Promise<OpenrouterConfig | undefined>;
|
||||||
createOpenrouterConfig(config: InsertOpenrouterConfig): Promise<OpenrouterConfig>;
|
createOpenrouterConfig(config: InsertOpenrouterConfig): Promise<OpenrouterConfig>;
|
||||||
updateOpenrouterConfig(userId: string, config: Partial<InsertOpenrouterConfig>): Promise<OpenrouterConfig>;
|
updateOpenrouterConfig(userId: string, config: Partial<InsertOpenrouterConfig>): Promise<OpenrouterConfig>;
|
||||||
|
|
||||||
|
// User Page Permissions
|
||||||
|
getUserPagePermissions(userId: string): Promise<UserPagePermission[]>;
|
||||||
|
getPagePermissions(pageId: string): Promise<UserPagePermission[]>;
|
||||||
|
createPagePermission(permission: InsertUserPagePermission): Promise<UserPagePermission>;
|
||||||
|
deletePagePermission(userId: string, pageId: string): Promise<void>;
|
||||||
|
deleteAllUserPagePermissions(userId: string): Promise<void>;
|
||||||
|
getUserAccessiblePages(userId: string): Promise<SocialPage[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DatabaseStorage implements IStorage {
|
export class DatabaseStorage implements IStorage {
|
||||||
@@ -299,6 +310,43 @@ export class DatabaseStorage implements IStorage {
|
|||||||
.returning();
|
.returning();
|
||||||
return updated;
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// User Page Permissions
|
||||||
|
async getUserPagePermissions(userId: string): Promise<UserPagePermission[]> {
|
||||||
|
return await db.select().from(userPagePermissions).where(eq(userPagePermissions.userId, userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
async getPagePermissions(pageId: string): Promise<UserPagePermission[]> {
|
||||||
|
return await db.select().from(userPagePermissions).where(eq(userPagePermissions.pageId, pageId));
|
||||||
|
}
|
||||||
|
|
||||||
|
async createPagePermission(permission: InsertUserPagePermission): Promise<UserPagePermission> {
|
||||||
|
const [newPermission] = await db.insert(userPagePermissions).values(permission).returning();
|
||||||
|
return newPermission;
|
||||||
|
}
|
||||||
|
|
||||||
|
async deletePagePermission(userId: string, pageId: string): Promise<void> {
|
||||||
|
await db.delete(userPagePermissions).where(
|
||||||
|
and(
|
||||||
|
eq(userPagePermissions.userId, userId),
|
||||||
|
eq(userPagePermissions.pageId, pageId)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
async deleteAllUserPagePermissions(userId: string): Promise<void> {
|
||||||
|
await db.delete(userPagePermissions).where(eq(userPagePermissions.userId, userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
async getUserAccessiblePages(userId: string): Promise<SocialPage[]> {
|
||||||
|
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();
|
export const storage = new DatabaseStorage();
|
||||||
Reference in new issue
Block a user