Esposter
    Preparing search index...

    Module @esposter/db-schema - v2.31.1

    @esposter/db-schema

    Apache-2.0 licensed

    Drizzle ORM schemas, relations, and migrations for Esposter's PostgreSQL database. The source of truth for all relational data — usable in both browser and server environments.


    We highly recommend you take a look at the documentation to level up.

    After editing a schema file, generate and apply the migration:

    # From packages/db-schema/
    pnpm db:gen # generate migration SQL from schema changes
    pnpm db:up # apply pending migrations to the database
    pnpm db:studio # open Drizzle Studio UI for visual inspection

    Migrations are output to packages/app/server/db/migrations/.

    Domain Tables Description
    Users users, sessions, accounts Authentication via better-auth
    Rooms rooms, roomMembers, roomRoles, roomInvites, roomBans Chat rooms + RBAC
    Messages messages (schema: message) Message metadata; content in Azure Table Storage
    Posts posts, postReactions Social feed posts
    Achievements achievements, userAchievements Gamification
    Push pushSubscriptions Web Push notification subscriptions
    Friends friendships, friendRequests Social graph
    • Use the pgTable wrapper (re-exported from this package), not raw drizzle pgTable — the wrapper adds standard metadata columns.
    • Columns use camelCase property names matching TypeScript properties.
    • All z.discriminatedUnion schemas must end with satisfies z.ZodType<UnionType>.
    • Each model file holds exactly one interface/class and one schema.

    Run from packages/db-schema/:

    pnpm db:gen       # generate migration
    pnpm db:up # apply migrations
    pnpm db:studio # Drizzle Studio
    pnpm build # compile to dist/
    pnpm test # vitest watch mode
    pnpm lint:fix # auto-fix lint
    pnpm typecheck # type check

    This project is licensed under the Apache-2.0 license.

    Enumerations

    AdminActionType
    AzureContainer
    AzureEntityType
    AzureFunction
    AzureQueue
    AzureTable
    AzureWebPubSubHub
    BinaryOperator
    ClickerAchievementName
    DatabaseEntityType
    DerivedDatabaseEntityType
    DungeonsAchievementName
    EmailAchievementName
    FilterType
    FilterTypeHas
    FlowchartAchievementName
    LikeAchievementName
    MessageAchievementName
    MessageMetadataType
    MessageType
    NoiseSuppressionMode
    NotificationType
    PostAchievementName
    RoomAchievementName
    RoomType
    ScheduledMessageJobType
    SearchIndex
    SearchOperator
    SpecialAchievementName
    SurveyAchievementName
    TableAchievementName
    UnaryOperator
    UserStatus
    VoiceInputMode
    WebpageAchievementName

    Classes

    AzureMetadataEntity
    BaseMessageEntity
    CompositeKey
    CompositeKeyEntity
    FileEntity
    MessageMetadataEntity
    ModerationLogEntity
    StandardMessageEntity
    SurveyResponseEntity
    WebhookMessageEntity

    Interfaces

    AzureTableEntityMap
    BaseLinkPreviewResponse
    CompositeKeyEntityConstraint
    DefaultLinkPreviewResponse
    Embed
    EmbedAuthor
    EmbedField
    EmbedFooter
    FileSasEntity
    Filter
    FriendRequestNotificationEventGridData
    PgTable
    PushNotificationEventGridData
    ReminderScheduledMessageJobPayload
    ScheduledMessageScheduledMessageJobPayload
    SearchIndexDocumentMap
    URLLinkPreviewResponse
    Video
    WebhookCreateMessageInput
    WebhookPayload

    Type Aliases

    Achievement
    AchievementName
    AppUserInMessage
    AzureEntity
    AzureUpdateEntity
    BanInMessage
    BanInMessageWithRelations
    Block
    CallSessionInMessage
    Clause
    CreateMessageInput
    CustomTableClient
    EntityTypeKey
    Friend
    FriendRequest
    FriendRequestWithRelations
    InviteInMessage
    InviteInMessageWithRelations
    Like
    LinkPreviewResponse
    MessageEntity
    MessageEntityMap
    Post
    PostWithRelations
    PushSubscriptionInMessageEntity
    PushSubscriptionInMessageWithRelations
    RoomCategoryInMessage
    RoomFilterInMessage
    RoomInMessage
    RoomPermission
    RoomRoleInMessage
    ScheduledMessageJobInMessage
    ScheduledMessageJobPayload
    ScheduledMessageJobQueueMessage
    SearchHistoryInMessage
    SerializableValue
    ServerCreateMessageInput
    StandardCreateMessageInput
    StandardMessageType
    Survey
    User
    UserAchievement
    UserAchievementWithRelations
    UserSettingsInMessage
    UserStatusInMessage
    UserToRoomInMessage
    UserToRoomInMessageWithRelations
    UserToRoomRoleInMessage
    UserToRoomRoleInMessageWithRelations
    WebhookInMessage
    WebhookInMessageWithRelations

    Variables

    accounts
    accountsRelation
    AchievementName
    achievementNameEnum
    AchievementNames
    achievementNameSchema
    achievements
    achievementsRelation
    adminActionTypeSchema
    APP_USER_NAME_MAX_LENGTH
    appUsersInMessage
    appUsersInMessageRelation
    AZURE_MAX_BATCH_SIZE
    AZURE_MAX_PAGE_SIZE
    AZURE_SELF_DESTRUCT_TIMER
    AzureContainerPropertiesMap
    AzureEntity
    BanInMessageRelations
    bansInMessage
    bansInMessageRelation
    baseMessageEntitySchema
    BinaryOperators
    BlockRelations
    blocks
    blocksRelation
    CALL_ID_LENGTH
    CALL_ID_REGEX
    callSessionIdSchema
    callSessionsInMessage
    callSessionsInMessageRelation
    CompositeKeyPropertyNames
    DEFAULT_AUTO_IDLE_THRESHOLD_MS
    DEFAULT_INPUT_SENSITIVITY_DECIBELS
    DEFAULT_MICROPHONE_VOLUME_PERCENTAGE
    DEFAULT_SPEAKER_VOLUME_PERCENTAGE
    embedAuthorSchema
    embedFieldSchema
    embedFooterSchema
    embedSchema
    FILE_MAX_LENGTH
    FileEntityPropertyNames
    fileEntitySchema
    FILENAME_MAX_LENGTH
    FILTER_KEY_MAX_LENGTH
    FILTER_WORDS_MAX_LENGTH
    filterSchema
    FilterTypeHases
    FilterTypes
    filterTypeSchema
    friendRequestNotificationEventGridDataSchema
    FriendRequestRelations
    friendRequests
    friendRequestsRelation
    friends
    friendsRelation
    INVITE_ID_LENGTH
    INVITE_ID_REGEX
    InviteInMessageRelations
    invitesInMessage
    invitesInMessageRelation
    likes
    likesRelation
    MAX_AUTO_IDLE_THRESHOLD_MS
    MAX_INPUT_SENSITIVITY_DECIBELS
    MAX_USER_VOLUME_PERCENTAGE
    MENTION_MAX_LENGTH
    MESSAGE_MAX_LENGTH
    MessageEntityMap
    messageSchema
    MessageTypes
    metadataSchema
    MIN_AUTO_IDLE_THRESHOLD_MS
    MIN_INPUT_SENSITIVITY_DECIBELS
    moderationLogEntitySchema
    NICKNAME_MAX_LENGTH
    noiseSuppressionModeEnum
    notificationTypeEnum
    notificationTypeSchema
    pgTable
    POST_DESCRIPTION_MAX_LENGTH
    POST_TITLE_MAX_LENGTH
    PostRelations
    posts
    postsRelation
    PUSH_NOTIFICATION_MESSAGE_MAX_LENGTH
    pushNotificationEventGridDataSchema
    pushSubscriptionsInMessage
    pushSubscriptionsInMessageRelation
    rateLimiterFlexible
    relations
    reminderScheduledMessageJobPayloadSchema
    ROOM_CATEGORY_NAME_MAX_LENGTH
    ROOM_NAME_MAX_LENGTH
    ROOM_ROLE_COLOR_MAX_LENGTH
    ROOM_ROLE_NAME_MAX_LENGTH
    ROOM_TOPIC_MAX_LENGTH
    roomCategoriesInMessage
    roomCategoriesInMessageRelation
    roomFiltersInMessage
    roomFiltersInMessageRelation
    roomIdSchema
    roomIdsSchema
    RoomPermission
    RoomRoleInMessageRelations
    roomRolesInMessage
    roomRolesInMessageRelation
    roomsInMessage
    roomsInMessageRelation
    roomTypeEnum
    roomTypeSchema
    scheduledMessageJobPayloadSchema
    scheduledMessageJobQueueMessageSchema
    scheduledMessageJobsInMessage
    scheduledMessageJobsInMessageRelation
    scheduledMessageJobTypeSchema
    scheduledMessageScheduledMessageJobPayloadSchema
    schema
    searchHistoriesInMessage
    searchHistoriesInMessageRelation
    SearchIndexSearchableFieldsMap
    selectAchievementSchema
    selectAppUserInMessageSchema
    selectBanInMessageSchema
    selectBlockSchema
    selectCallSessionInMessageSchema
    selectCommentSchema
    selectFriendRequestSchema
    selectFriendSchema
    selectInviteInMessageSchema
    selectLikeSchema
    selectPostSchema
    selectPushSubscriptionInMessageSchema
    selectRoomCategoryInMessageSchema
    selectRoomInMessageSchema
    selectRoomRoleInMessageSchema
    selectScheduledMessageJobInMessageSchema
    selectSearchHistoryInMessageSchema
    selectSurveySchema
    selectUserAchievementSchema
    selectUserSchema
    selectUserSettingsInMessageSchema
    selectUserStatusInMessageSchema
    selectUserToRoomInMessageSchema
    selectUserToRoomRoleInMessageSchema
    selectWebhookInMessageSchema
    SERIALIZABLE_VALUE_MAX_LENGTH
    serializableValueSchema
    sessions
    sessionsRelation
    standardCreateMessageInputSchema
    StandardMessageEntityPropertyNames
    standardMessageEntitySchema
    standardMessageTypeSchema
    STATUS_MESSAGE_MAX_LENGTH
    SURVEY_GROUP_MAX_LENGTH
    SURVEY_NAME_MAX_LENGTH
    surveyResponseEntitySchema
    surveys
    surveysRelation
    USER_BIOGRAPHY_MAX_LENGTH
    USER_NAME_MAX_LENGTH
    UserAchievementRelations
    userAchievements
    userAchievementsRelation
    userIdSchema
    userIdsSchema
    users
    userSettingsInMessage
    usersRelation
    userStatusEnum
    UserStatuses
    userStatusesInMessage
    userStatusesInMessageRelation
    usersToRoomRolesInMessage
    usersToRoomRolesInMessageRelation
    usersToRoomsInMessage
    usersToRoomsInMessageRelation
    UserToRoomInMessageRelations
    UserToRoomRoleInMessageRelations
    verifications
    voiceInputModeEnum
    WEBHOOK_NAME_MAX_LENGTH
    WebhookInMessageRelations
    webhookMessageEntitySchema
    webhookPayloadSchema
    webhooksInMessage
    webhooksInMessageRelation

    Functions

    createAzureEntitySchema
    createAzureMetadataEntitySchema
    createCompositeKeyEntitySchema
    createMessageEntity
    createMessageMetadataEntitySchema
    createNameCheckSql
    createNameSchema
    escapeValue
    getReverseTickedTimestamp
    refineMessageSchema
    refineRoomSchema
    serializeValue