umstellung auf json Tabellen ...

This commit is contained in:
2025-08-03 09:12:57 -05:00
parent 9c88143c04
commit 738f1d929b
6 changed files with 236 additions and 308 deletions

View File

@@ -8,6 +8,56 @@ export const customerSubTypeEnum = pgEnum('customerSubType', ['broker', 'cpa', '
export const listingsCategoryEnum = pgEnum('listingsCategory', ['commercialProperty', 'business']);
export const subscriptionTypeEnum = pgEnum('subscriptionType', ['free', 'professional', 'broker']);
// Neue JSONB-basierte Tabellen
export const users_json = pgTable(
'users_json',
{
id: uuid('id').primaryKey().defaultRandom().notNull(),
email: varchar('email', { length: 255 }).notNull().unique(),
data: jsonb('data'),
},
table => ({
emailIdx: index('idx_users_json_email').on(table.email),
}),
);
export const businesses_json = pgTable(
'businesses_json',
{
id: uuid('id').primaryKey().defaultRandom().notNull(),
email: varchar('email', { length: 255 }).references(() => users_json.email),
data: jsonb('data'),
},
table => ({
emailIdx: index('idx_businesses_json_email').on(table.email),
}),
);
export const commercials_json = pgTable(
'commercials_json',
{
id: uuid('id').primaryKey().defaultRandom().notNull(),
email: varchar('email', { length: 255 }).references(() => users_json.email),
data: jsonb('data'),
},
table => ({
emailIdx: index('idx_commercials_json_email').on(table.email),
}),
);
export const listing_events_json = pgTable(
'listing_events_json',
{
id: uuid('id').primaryKey().defaultRandom().notNull(),
email: varchar('email', { length: 255 }),
data: jsonb('data'),
},
table => ({
emailIdx: index('idx_listing_events_json_email').on(table.email),
}),
);
// Bestehende Tabellen bleiben unverändert
export const users = pgTable(
'users',
{
@@ -41,6 +91,7 @@ export const users = pgTable(
),
}),
);
export const businesses = pgTable(
'businesses',
{
@@ -52,7 +103,7 @@ export const businesses = pgTable(
price: doublePrecision('price'),
favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
draft: boolean('draft'),
listingsCategory: listingsCategoryEnum('listingsCategory'), //varchar('listingsCategory', { length: 255 }),
listingsCategory: listingsCategoryEnum('listingsCategory'),
realEstateIncluded: boolean('realEstateIncluded'),
leasedLocation: boolean('leasedLocation'),
franchiseResale: boolean('franchiseResale'),
@@ -76,6 +127,7 @@ export const businesses = pgTable(
),
}),
);
export const commercials = pgTable(
'commercials',
{
@@ -87,7 +139,7 @@ export const commercials = pgTable(
description: text('description'),
price: doublePrecision('price'),
favoritesForUser: varchar('favoritesForUser', { length: 30 }).array(),
listingsCategory: listingsCategoryEnum('listingsCategory'), //listingsCategory: varchar('listingsCategory', { length: 255 }),
listingsCategory: listingsCategoryEnum('listingsCategory'),
draft: boolean('draft'),
imageOrder: varchar('imageOrder', { length: 200 }).array(),
imagePath: varchar('imagePath', { length: 200 }),
@@ -102,18 +154,18 @@ export const commercials = pgTable(
}),
);
export const listingEvents = pgTable('listing_events', {
export const listing_events = pgTable('listing_events', {
id: uuid('id').primaryKey().defaultRandom().notNull(),
listingId: varchar('listing_id', { length: 255 }), // Assuming listings are referenced by UUID, adjust as necessary
listingId: varchar('listing_id', { length: 255 }),
email: varchar('email', { length: 255 }),
eventType: varchar('event_type', { length: 50 }), // 'view', 'print', 'email', 'facebook', 'x', 'linkedin', 'contact'
eventType: varchar('event_type', { length: 50 }),
eventTimestamp: timestamp('event_timestamp').defaultNow(),
userIp: varchar('user_ip', { length: 45 }), // Optional if you choose to track IP in frontend or backend
userAgent: varchar('user_agent', { length: 255 }), // Store User-Agent as string
locationCountry: varchar('location_country', { length: 100 }), // Country from IP
locationCity: varchar('location_city', { length: 100 }), // City from IP
locationLat: varchar('location_lat', { length: 20 }), // Latitude from IP, stored as varchar
locationLng: varchar('location_lng', { length: 20 }), // Longitude from IP, stored as varchar
referrer: varchar('referrer', { length: 255 }), // Referrer URL if applicable
additionalData: jsonb('additional_data'), // JSON for any other optional data (like email, social shares etc.)
userIp: varchar('user_ip', { length: 45 }),
userAgent: varchar('user_agent', { length: 255 }),
locationCountry: varchar('location_country', { length: 100 }),
locationCity: varchar('location_city', { length: 100 }),
locationLat: varchar('location_lat', { length: 20 }),
locationLng: varchar('location_lng', { length: 20 }),
referrer: varchar('referrer', { length: 255 }),
additionalData: jsonb('additional_data'),
});