Overview
The@feedback/db package provides the database layer for GTM Feedback, built on Drizzle ORM with PostgreSQL. It includes schema definitions, type-safe queries, and relation mappings for users, requests, feedback, areas, and Salesforce data.
Installation
Package Information
@feedback/db
0.0.1
drizzle-orm: ^0.44.5pg: ^8.16.3@auth/core: ^0.41.1
Exports
The package provides multiple export paths:Main Export
Pre-configured Drizzle database client with full schema and relations. Ready to use with type-safe queries.
Schema
User accounts table with authentication detailsColumns:
id(uuid): Primary keyname(text): User’s full nameemail(text): Unique email addressimage(text, optional): Profile image URLavatar(text, optional): Avatar URLemailVerified(timestamp, optional): Email verification timestampisAdmin(boolean): Admin flag (default: false)
Feature requests tableColumns:
id(uuid): Primary keytitle(text): Request titledescription(text): Detailed descriptionstatus(requestStatusEnum): ‘open’ | ‘shipped’ | ‘deprioritized’creator(uuid): Foreign key to userscreatedAt(timestamp): Creation timestampupdatedAt(timestamp): Last update timestampslug(text): Unique URL-friendly identifiernotes(text, optional): Internal notesareaIds(varchar[]): Array of product area IDsrelatedLinks(text[]): Array of related URLslinearUrl(text, optional): Linear issue URLfollowers(uuid[]): Array of user IDs following this requestrelatedRequestId(uuid, optional): Parent/related requestmetadata(jsonb, optional): Additional metadata
Customer feedback entries linked to requestsColumns:
id(uuid): Primary keyrequestId(uuid): Foreign key to requestsaccountId(text): Salesforce account IDopportunityId(text, optional): Salesforce opportunity IDseverity(severityEnum): ‘low’ | ‘medium’ | ‘high’description(text): Feedback detailscreator(uuid): Foreign key to userscreatedAt(timestamp): Creation timestampexternalLinks(text[]): Array of external reference URLsslug(text, optional): Unique identifier within requestcreationSource(feedbackCreationSourceEnum): ‘manual’ | ‘agent’metadata(jsonb, optional): Additional metadata
Product areas for categorizing requestsColumns:
id(varchar): Primary key (max 36 chars)name(text): Unique area nameslug(text): Unique URL-friendly identifierdescription(text): Area descriptionfirehoseChannel(text, optional): Slack channel for notifications
Salesforce account dataColumns:
id(text): Primary key (Salesforce ID)name(text): Account nametype(text, optional): Account typeregionName(text, optional): Geographic regionarr(numeric, optional): Annual recurring revenueisEnterprise(boolean): Enterprise account flagwebsite(text, optional): Company websitelogo(text, optional): Logo URLlink(text, optional): Salesforce record linkcreatedAt(timestamp): Creation timestampupdatedAt(timestamp, optional): Last update timestamp
Salesforce opportunity dataColumns:
id(text): Primary key (Salesforce ID)accountId(text): Foreign key to sfdcAccountsname(text): Opportunity namearr(numeric, optional): Annual recurring revenuestage(text, optional): Sales stagecloseDate(date, optional): Expected close datecreatedAt(timestamp, optional): Creation timestampupdatedAt(timestamp, optional): Last update timestamp
Types
Inferred select type from users table
Inferred insert type for creating users
Inferred select type from requests table
Inferred insert type for creating requests
Inferred select type from feedback table
Inferred insert type for creating feedback
Union type: ‘low’ | ‘medium’ | ‘high’
Union type: ‘open’ | ‘shipped’ | ‘deprioritized’
Relations
.with() syntax.
Database Client Usage
Basic Queries
Relational Queries
Query Patterns
Filtering by Arrays
Aggregations
Joins with Salesforce Data
Database Scripts
Generate migration files from schema changes
Run pending migrations
Push schema changes directly (development only)
Launch Drizzle Studio for database exploration
Environment Variables
PostgreSQL connection string