diff --git a/packages/database/src/schema/users.ts b/packages/database/src/schema/users.ts index b418864..0178efe 100644 --- a/packages/database/src/schema/users.ts +++ b/packages/database/src/schema/users.ts @@ -5,10 +5,17 @@ import { text, timestamp, boolean, + pgEnum, } from "drizzle-orm/pg-core"; import { createSelectSchema } from "drizzle-zod"; import { timeStamps } from "./base"; +export const privacyScopeEnum = pgEnum("privacy_scope", [ + "everyone", + "contacts", + "nobody", +]); + export const users = pgTable("users", { id: integer().primaryKey().generatedAlwaysAsIdentity(), phoneNumber: varchar({ length: 15 }).unique().notNull(), @@ -29,9 +36,13 @@ export const userPrivacySettings = pgTable("user_privacy_settings", { onDelete: "cascade", onUpdate: "cascade", }), - showOnlineStatus: boolean().notNull().default(true), - showLastSeen: boolean().notNull().default(true), - showReadReceipts: boolean().notNull().default(true), + showPicture: privacyScopeEnum().notNull().default("everyone"), + showDescription: privacyScopeEnum().notNull().default("everyone"), + showStatus: privacyScopeEnum().notNull().default("everyone"), + showLastSeen: privacyScopeEnum().notNull().default("everyone"), + showReadReceipts: privacyScopeEnum().notNull().default("everyone"), + allowCalls: privacyScopeEnum().notNull().default("everyone"), + allowMessages: privacyScopeEnum().notNull().default("everyone"), ...timeStamps(false), }); diff --git a/packages/database/src/scripts/seed.ts b/packages/database/src/scripts/seed.ts index f01b727..6a87acb 100644 --- a/packages/database/src/scripts/seed.ts +++ b/packages/database/src/scripts/seed.ts @@ -48,11 +48,26 @@ const generateUsers = async (count: number) => { const generatePrivacySettings = async (users: schema.User[]) => { console.log("Generating privacy settings..."); + + const privacyOptions = faker.helpers.arrayElement([ + "everyone", + "contacts", + "nobody", + ]) as (typeof schema.privacyScopeEnum.enumValues)[number]; + const randomPrivacy = () => + faker.helpers.arrayElement([ + privacyOptions, + ]) as (typeof schema.privacyScopeEnum.enumValues)[number]; + const settings = users.map((user) => ({ userId: user.id, - showOnlineStatus: faker.datatype.boolean(0.8), - showLastSeen: faker.datatype.boolean(0.7), - showReadReceipts: faker.datatype.boolean(0.6), + showPicture: randomPrivacy(), + showDescription: randomPrivacy(), + showStatus: randomPrivacy(), + showLastSeen: randomPrivacy(), + showReadReceipts: randomPrivacy(), + allowCalls: randomPrivacy(), + allowMessages: randomPrivacy(), })); await db.insert(schema.userPrivacySettings).values(settings);