fix(db): use TEXT for user_id columns across entire codebase

Better Auth generates non-UUID user IDs (32-char base62 format like
'otUe1YrfENPdHnrF3g1vSBfpkQfambCZ'). Changed all `uuid('user_id')` to
`text('user_id')` in Drizzle schemas for consistency with auth system.

Affected packages/apps:
- apps/calendar, clock, picture, zitare
- games/figgos, voxelava
- packages/manadeck-database, news-database, uload-database
- services/mana-core-auth (feedback schema)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Wuesteon 2025-12-09 16:30:51 +01:00
parent 4e63f3f74b
commit f440ca2a8d
33 changed files with 73 additions and 53 deletions

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, timestamp, varchar, text, boolean, jsonb } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, varchar, boolean, jsonb } from 'drizzle-orm/pg-core';
/** /**
* Calendar settings stored in JSONB * Calendar settings stored in JSONB
@ -16,7 +16,7 @@ export interface CalendarSettings {
*/ */
export const calendars = pgTable('calendars', { export const calendars = pgTable('calendars', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
name: varchar('name', { length: 255 }).notNull(), name: varchar('name', { length: 255 }).notNull(),
description: text('description'), description: text('description'),
color: varchar('color', { length: 7 }).default('#3B82F6'), color: varchar('color', { length: 7 }).default('#3B82F6'),

View file

@ -1,9 +1,9 @@
import { import {
pgTable, pgTable,
uuid, uuid,
text,
timestamp, timestamp,
varchar, varchar,
text,
boolean, boolean,
jsonb, jsonb,
index, index,
@ -41,7 +41,7 @@ export const events = pgTable(
calendarId: uuid('calendar_id') calendarId: uuid('calendar_id')
.notNull() .notNull()
.references(() => calendars.id, { onDelete: 'cascade' }), .references(() => calendars.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
// Basic info // Basic info
title: varchar('title', { length: 500 }).notNull(), title: varchar('title', { length: 500 }).notNull(),

View file

@ -1,9 +1,9 @@
import { import {
pgTable, pgTable,
uuid, uuid,
text,
timestamp, timestamp,
varchar, varchar,
text,
boolean, boolean,
jsonb, jsonb,
integer, integer,
@ -27,7 +27,7 @@ export interface ExternalCalendarProviderData {
*/ */
export const externalCalendars = pgTable('external_calendars', { export const externalCalendars = pgTable('external_calendars', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
// Calendar identification // Calendar identification
name: varchar('name', { length: 255 }).notNull(), name: varchar('name', { length: 255 }).notNull(),

View file

@ -1,4 +1,13 @@
import { pgTable, uuid, timestamp, varchar, integer, boolean, index } from 'drizzle-orm/pg-core'; import {
pgTable,
uuid,
text,
timestamp,
varchar,
integer,
boolean,
index,
} from 'drizzle-orm/pg-core';
import { events } from './events.schema'; import { events } from './events.schema';
/** /**
@ -11,7 +20,7 @@ export const reminders = pgTable(
eventId: uuid('event_id') eventId: uuid('event_id')
.notNull() .notNull()
.references(() => events.id, { onDelete: 'cascade' }), .references(() => events.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
// Timing // Timing
minutesBefore: integer('minutes_before').notNull(), minutesBefore: integer('minutes_before').notNull(),

View file

@ -1,8 +1,17 @@
import { pgTable, uuid, varchar, time, boolean, integer, timestamp } from 'drizzle-orm/pg-core'; import {
pgTable,
uuid,
text,
varchar,
time,
boolean,
integer,
timestamp,
} from 'drizzle-orm/pg-core';
export const alarms = pgTable('alarms', { export const alarms = pgTable('alarms', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
label: varchar('label', { length: 255 }), label: varchar('label', { length: 255 }),
time: time('time').notNull(), time: time('time').notNull(),
enabled: boolean('enabled').default(true).notNull(), enabled: boolean('enabled').default(true).notNull(),

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, varchar, integer, jsonb, timestamp } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, varchar, integer, jsonb, timestamp } from 'drizzle-orm/pg-core';
export interface PresetSettings { export interface PresetSettings {
// For pomodoro presets // For pomodoro presets
@ -12,7 +12,7 @@ export interface PresetSettings {
export const presets = pgTable('presets', { export const presets = pgTable('presets', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
type: varchar('type', { length: 20 }).notNull(), // 'timer' | 'pomodoro' type: varchar('type', { length: 20 }).notNull(), // 'timer' | 'pomodoro'
name: varchar('name', { length: 255 }).notNull(), name: varchar('name', { length: 255 }).notNull(),
durationSeconds: integer('duration_seconds').notNull(), durationSeconds: integer('duration_seconds').notNull(),

View file

@ -1,8 +1,8 @@
import { pgTable, uuid, varchar, integer, timestamp } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, varchar, integer, timestamp } from 'drizzle-orm/pg-core';
export const timers = pgTable('timers', { export const timers = pgTable('timers', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
label: varchar('label', { length: 255 }), label: varchar('label', { length: 255 }),
durationSeconds: integer('duration_seconds').notNull(), durationSeconds: integer('duration_seconds').notNull(),
remainingSeconds: integer('remaining_seconds'), remainingSeconds: integer('remaining_seconds'),

View file

@ -1,8 +1,8 @@
import { pgTable, uuid, varchar, integer, timestamp } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, varchar, integer, timestamp } from 'drizzle-orm/pg-core';
export const worldClocks = pgTable('world_clocks', { export const worldClocks = pgTable('world_clocks', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
timezone: varchar('timezone', { length: 100 }).notNull(), // IANA timezone e.g. 'America/New_York' timezone: varchar('timezone', { length: 100 }).notNull(), // IANA timezone e.g. 'America/New_York'
cityName: varchar('city_name', { length: 255 }).notNull(), cityName: varchar('city_name', { length: 255 }).notNull(),
sortOrder: integer('sort_order').default(0).notNull(), sortOrder: integer('sort_order').default(0).notNull(),

View file

@ -10,7 +10,7 @@ export const batchStatusEnum = pgEnum('batch_status', [
export const batchGenerations = pgTable('batch_generations', { export const batchGenerations = pgTable('batch_generations', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
name: text('name'), name: text('name'),
totalCount: integer('total_count').notNull(), totalCount: integer('total_count').notNull(),

View file

@ -2,7 +2,7 @@ import { pgTable, uuid, text, timestamp, boolean, integer } from 'drizzle-orm/pg
export const boards = pgTable('boards', { export const boards = pgTable('boards', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
name: text('name').notNull(), name: text('name').notNull(),
description: text('description'), description: text('description'),

View file

@ -11,7 +11,7 @@ export const generationStatusEnum = pgEnum('generation_status', [
export const imageGenerations = pgTable('image_generations', { export const imageGenerations = pgTable('image_generations', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
modelId: uuid('model_id'), modelId: uuid('model_id'),
batchId: uuid('batch_id'), batchId: uuid('batch_id'),

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, timestamp, unique } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, unique } from 'drizzle-orm/pg-core';
import { images } from './images.schema'; import { images } from './images.schema';
export const imageLikes = pgTable( export const imageLikes = pgTable(
@ -8,7 +8,7 @@ export const imageLikes = pgTable(
imageId: uuid('image_id') imageId: uuid('image_id')
.notNull() .notNull()
.references(() => images.id, { onDelete: 'cascade' }), .references(() => images.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
}, },
(table) => ({ (table) => ({

View file

@ -2,7 +2,7 @@ import { pgTable, uuid, text, timestamp, boolean, integer } from 'drizzle-orm/pg
export const images = pgTable('images', { export const images = pgTable('images', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
generationId: uuid('generation_id'), generationId: uuid('generation_id'),
sourceImageId: uuid('source_image_id'), sourceImageId: uuid('source_image_id'),

View file

@ -1,10 +1,10 @@
import { pgTable, uuid, timestamp, unique, varchar } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, unique, varchar } from 'drizzle-orm/pg-core';
export const favorites = pgTable( export const favorites = pgTable(
'favorites', 'favorites',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
quoteId: varchar('quote_id', { length: 100 }).notNull(), // References static quote ID from shared package quoteId: varchar('quote_id', { length: 100 }).notNull(), // References static quote ID from shared package
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),
}, },

View file

@ -2,7 +2,7 @@ import { pgTable, uuid, text, timestamp, jsonb } from 'drizzle-orm/pg-core';
export const userLists = pgTable('user_lists', { export const userLists = pgTable('user_lists', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
name: text('name').notNull(), name: text('name').notNull(),
description: text('description'), description: text('description'),
quoteIds: jsonb('quote_ids').$type<string[]>().default([]), // References static quote IDs from shared package quoteIds: jsonb('quote_ids').$type<string[]>().default([]), // References static quote IDs from shared package

View file

@ -246,7 +246,7 @@ import { pgTable, uuid, varchar, text, boolean, timestamp, jsonb } from 'drizzle
export const decks = pgTable('decks', { export const decks = pgTable('decks', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(), // text, not uuid - Better Auth uses non-UUID IDs
title: varchar('title', { length: 255 }).notNull(), title: varchar('title', { length: 255 }).notNull(),
description: text('description'), description: text('description'),
coverImageUrl: text('cover_image_url'), coverImageUrl: text('cover_image_url'),

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, timestamp, unique } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, unique } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm'; import { relations } from 'drizzle-orm';
import { figures } from './figures.schema'; import { figures } from './figures.schema';
@ -9,7 +9,7 @@ export const figureLikes = pgTable(
figureId: uuid('figure_id') figureId: uuid('figure_id')
.notNull() .notNull()
.references(() => figures.id, { onDelete: 'cascade' }), .references(() => figures.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
createdAt: timestamp('created_at').defaultNow(), createdAt: timestamp('created_at').defaultNow(),
}, },
(table) => ({ (table) => ({

View file

@ -12,7 +12,7 @@ export const figures = pgTable('figures', {
isPublic: boolean('is_public').default(true), isPublic: boolean('is_public').default(true),
isArchived: boolean('is_archived').default(false), isArchived: boolean('is_archived').default(false),
likes: integer('likes').default(0), likes: integer('likes').default(0),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
createdAt: timestamp('created_at').defaultNow(), createdAt: timestamp('created_at').defaultNow(),
updatedAt: timestamp('updated_at').defaultNow(), updatedAt: timestamp('updated_at').defaultNow(),
}); });

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, timestamp, unique } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, unique } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm'; import { relations } from 'drizzle-orm';
import { levels } from './levels.schema'; import { levels } from './levels.schema';
@ -9,7 +9,7 @@ export const levelLikes = pgTable(
levelId: uuid('level_id') levelId: uuid('level_id')
.notNull() .notNull()
.references(() => levels.id, { onDelete: 'cascade' }), .references(() => levels.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
createdAt: timestamp('created_at').defaultNow(), createdAt: timestamp('created_at').defaultNow(),
}, },
(table) => ({ (table) => ({

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, timestamp, real, integer, boolean } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, timestamp, real, integer, boolean } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm'; import { relations } from 'drizzle-orm';
import { levels } from './levels.schema'; import { levels } from './levels.schema';
@ -7,7 +7,7 @@ export const levelPlays = pgTable('level_plays', {
levelId: uuid('level_id') levelId: uuid('level_id')
.notNull() .notNull()
.references(() => levels.id, { onDelete: 'cascade' }), .references(() => levels.id, { onDelete: 'cascade' }),
userId: uuid('user_id'), userId: text('user_id'),
completionTime: real('completion_time'), completionTime: real('completion_time'),
attempts: integer('attempts').default(1), attempts: integer('attempts').default(1),
completed: boolean('completed').default(false), completed: boolean('completed').default(false),

View file

@ -5,7 +5,7 @@ export const levels = pgTable('levels', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
name: text('name').notNull(), name: text('name').notNull(),
description: text('description'), description: text('description'),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
voxelData: jsonb('voxel_data').notNull(), voxelData: jsonb('voxel_data').notNull(),
spawnPoint: jsonb('spawn_point').notNull(), spawnPoint: jsonb('spawn_point').notNull(),
worldSize: jsonb('world_size').notNull(), worldSize: jsonb('world_size').notNull(),

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, varchar, text, timestamp, jsonb, index, pgEnum } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, varchar, timestamp, jsonb, index, pgEnum } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm'; import { relations } from 'drizzle-orm';
import { decks } from './decks.js'; import { decks } from './decks.js';
@ -25,7 +25,7 @@ export const aiGenerations = pgTable(
'ai_generations', 'ai_generations',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
deckId: uuid('deck_id').references(() => decks.id, { onDelete: 'set null' }), deckId: uuid('deck_id').references(() => decks.id, { onDelete: 'set null' }),
functionName: varchar('function_name', { length: 100 }).notNull(), functionName: varchar('function_name', { length: 100 }).notNull(),
prompt: text('prompt').notNull(), prompt: text('prompt').notNull(),

View file

@ -1,6 +1,7 @@
import { import {
pgTable, pgTable,
uuid, uuid,
text,
integer, integer,
timestamp, timestamp,
index, index,
@ -23,7 +24,7 @@ export const cardProgress = pgTable(
'card_progress', 'card_progress',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
cardId: uuid('card_id') cardId: uuid('card_id')
.notNull() .notNull()
.references(() => cards.id, { onDelete: 'cascade' }), .references(() => cards.id, { onDelete: 'cascade' }),

View file

@ -1,10 +1,10 @@
import { import {
pgTable, pgTable,
uuid, uuid,
text,
date, date,
integer, integer,
decimal, decimal,
text,
timestamp, timestamp,
index, index,
unique, unique,
@ -14,7 +14,7 @@ export const dailyProgress = pgTable(
'daily_progress', 'daily_progress',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
date: date('date').notNull(), date: date('date').notNull(),
cardsStudied: integer('cards_studied').default(0).notNull(), cardsStudied: integer('cards_studied').default(0).notNull(),
timeSpentMinutes: integer('time_spent_minutes').default(0).notNull(), timeSpentMinutes: integer('time_spent_minutes').default(0).notNull(),

View file

@ -1,8 +1,8 @@
import { import {
pgTable, pgTable,
uuid, uuid,
varchar,
text, text,
varchar,
boolean, boolean,
timestamp, timestamp,
jsonb, jsonb,
@ -17,7 +17,7 @@ export const decks = pgTable(
'decks', 'decks',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
title: varchar('title', { length: 255 }).notNull(), title: varchar('title', { length: 255 }).notNull(),
description: text('description'), description: text('description'),
coverImageUrl: text('cover_image_url'), coverImageUrl: text('cover_image_url'),

View file

@ -1,4 +1,4 @@
import { pgTable, uuid, integer, timestamp, index, pgEnum } from 'drizzle-orm/pg-core'; import { pgTable, uuid, text, integer, timestamp, index, pgEnum } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm'; import { relations } from 'drizzle-orm';
import { decks } from './decks.js'; import { decks } from './decks.js';
@ -12,7 +12,7 @@ export const studySessions = pgTable(
deckId: uuid('deck_id') deckId: uuid('deck_id')
.notNull() .notNull()
.references(() => decks.id, { onDelete: 'cascade' }), .references(() => decks.id, { onDelete: 'cascade' }),
userId: uuid('user_id').notNull(), userId: text('user_id').notNull(),
mode: studyModeEnum('mode').notNull(), mode: studyModeEnum('mode').notNull(),
totalCards: integer('total_cards').notNull().default(0), totalCards: integer('total_cards').notNull().default(0),
completedCards: integer('completed_cards').notNull().default(0), completedCards: integer('completed_cards').notNull().default(0),

View file

@ -1,9 +1,9 @@
import { pgTable, uuid, integer, decimal, date, timestamp, index } from 'drizzle-orm/pg-core'; import { pgTable, text, integer, decimal, date, timestamp, index } from 'drizzle-orm/pg-core';
export const userStats = pgTable( export const userStats = pgTable(
'user_stats', 'user_stats',
{ {
userId: uuid('user_id').primaryKey(), userId: text('user_id').primaryKey(),
totalWins: integer('total_wins').default(0).notNull(), totalWins: integer('total_wins').default(0).notNull(),
totalSessions: integer('total_sessions').default(0).notNull(), totalSessions: integer('total_sessions').default(0).notNull(),
totalCardsStudied: integer('total_cards_studied').default(0).notNull(), totalCardsStudied: integer('total_cards_studied').default(0).notNull(),

View file

@ -29,7 +29,7 @@ export const articles = pgTable(
summary: text('summary'), summary: text('summary'),
// For user-saved articles // For user-saved articles
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' }), userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }),
originalUrl: text('original_url'), originalUrl: text('original_url'),
parsedContent: text('parsed_content'), parsedContent: text('parsed_content'),
isArchived: boolean('is_archived').default(false), isArchived: boolean('is_archived').default(false),

View file

@ -4,7 +4,7 @@ import { users } from './users';
// Better Auth Sessions // Better Auth Sessions
export const sessions = pgTable('sessions', { export const sessions = pgTable('sessions', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id') userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' }) .references(() => users.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
token: text('token').notNull().unique(), token: text('token').notNull().unique(),
@ -18,7 +18,7 @@ export const sessions = pgTable('sessions', {
// Better Auth Accounts (for OAuth providers) // Better Auth Accounts (for OAuth providers)
export const accounts = pgTable('accounts', { export const accounts = pgTable('accounts', {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id') userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' }) .references(() => users.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
providerId: text('provider_id').notNull(), // 'credential', 'google', 'apple', etc. providerId: text('provider_id').notNull(), // 'credential', 'google', 'apple', etc.

View file

@ -1,6 +1,7 @@
import { import {
pgTable, pgTable,
uuid, uuid,
text,
timestamp, timestamp,
boolean, boolean,
real, real,
@ -15,7 +16,7 @@ export const userArticleInteractions = pgTable(
'user_article_interactions', 'user_article_interactions',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id') userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' }) .references(() => users.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
articleId: uuid('article_id') articleId: uuid('article_id')

View file

@ -21,7 +21,7 @@ export const links = pgTable(
originalUrl: text('original_url').notNull(), originalUrl: text('original_url').notNull(),
title: text('title'), title: text('title'),
description: text('description'), description: text('description'),
userId: uuid('user_id').references(() => users.id, { onDelete: 'cascade' }), userId: text('user_id').references(() => users.id, { onDelete: 'cascade' }),
isActive: boolean('is_active').default(true), isActive: boolean('is_active').default(true),
password: text('password'), // hashed password: text('password'), // hashed
maxClicks: integer('max_clicks'), maxClicks: integer('max_clicks'),

View file

@ -12,7 +12,7 @@ export const tags = pgTable(
icon: text('icon'), icon: text('icon'),
isPublic: boolean('is_public').default(false), isPublic: boolean('is_public').default(false),
usageCount: integer('usage_count').default(0), usageCount: integer('usage_count').default(0),
userId: uuid('user_id').references(() => users.id), userId: text('user_id').references(() => users.id),
createdAt: timestamp('created_at').defaultNow().notNull(), createdAt: timestamp('created_at').defaultNow().notNull(),
updatedAt: timestamp('updated_at').defaultNow().notNull(), updatedAt: timestamp('updated_at').defaultNow().notNull(),
}, },

View file

@ -38,7 +38,7 @@ export const userFeedback = feedbackSchema.table(
'user_feedback', 'user_feedback',
{ {
id: uuid('id').primaryKey().defaultRandom(), id: uuid('id').primaryKey().defaultRandom(),
userId: uuid('user_id') userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' }) .references(() => users.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
appId: text('app_id').notNull(), // 'chat', 'picture', 'zitare', etc. appId: text('app_id').notNull(), // 'chat', 'picture', 'zitare', etc.
@ -82,7 +82,7 @@ export const feedbackVotes = feedbackSchema.table(
feedbackId: uuid('feedback_id') feedbackId: uuid('feedback_id')
.references(() => userFeedback.id, { onDelete: 'cascade' }) .references(() => userFeedback.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
userId: uuid('user_id') userId: text('user_id')
.references(() => users.id, { onDelete: 'cascade' }) .references(() => users.id, { onDelete: 'cascade' })
.notNull(), .notNull(),
createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(), createdAt: timestamp('created_at', { withTimezone: true }).defaultNow().notNull(),