Home / File/ pg.schema.ts — drizzle-orm Source File

pg.schema.ts — drizzle-orm Source File

Architecture documentation for pg.schema.ts, a typescript file in the drizzle-orm codebase. 2 imports, 3 dependents.

File typescript DrizzleORM RelationalQuery 2 imports 3 dependents 7 functions

Entity Profile

Dependency Diagram

graph LR
  f361b5a8_1c83_007c_ced2_e978f9ffcf4d["pg.schema.ts"]
  53497908_16e7_977d_e97d_7414884a88a6["pg-core"]
  f361b5a8_1c83_007c_ced2_e978f9ffcf4d --> 53497908_16e7_977d_e97d_7414884a88a6
  690f7dfc_0aea_9ee8_d6e7_26bbb3689031["drizzle-orm"]
  f361b5a8_1c83_007c_ced2_e978f9ffcf4d --> 690f7dfc_0aea_9ee8_d6e7_26bbb3689031
  54830b32_1825_3642_e698_3ee90c891663["pg.postgresjs.test.ts"]
  54830b32_1825_3642_e698_3ee90c891663 --> f361b5a8_1c83_007c_ced2_e978f9ffcf4d
  8da72e71_fec6_e91b_3df5_b885c3bf1fcf["pg.test.ts"]
  8da72e71_fec6_e91b_3df5_b885c3bf1fcf --> f361b5a8_1c83_007c_ced2_e978f9ffcf4d
  6c1b03d8_80ad_3a71_6737_c6a804415fe7["vercel.test.ts"]
  6c1b03d8_80ad_3a71_6737_c6a804415fe7 --> f361b5a8_1c83_007c_ced2_e978f9ffcf4d
  style f361b5a8_1c83_007c_ced2_e978f9ffcf4d fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import {
	boolean,
	integer,
	type PgColumn,
	pgSchema,
	pgTable,
	primaryKey,
	serial,
	text,
	timestamp,
} from 'drizzle-orm/pg-core';

import { relations } from 'drizzle-orm';

export const usersTable = pgTable('users', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	verified: boolean('verified').notNull().default(false),
	invitedBy: integer('invited_by').references((): PgColumn => usersTable.id),
});

export const schemaV1 = pgSchema('schemaV1');

export const usersV1 = schemaV1.table('usersV1', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	verified: boolean('verified').notNull().default(false),
	invitedBy: integer('invited_by'),
});

export const usersTableV1 = schemaV1.table('users_table_V1', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	verified: boolean('verified').notNull().default(false),
	invitedBy: integer('invited_by'),
});

export const usersConfig = relations(usersTable, ({ one, many }) => ({
	invitee: one(usersTable, { fields: [usersTable.invitedBy], references: [usersTable.id] }),
	usersToGroups: many(usersToGroupsTable),
	posts: many(postsTable),
}));

export const groupsTable = pgTable('groups', {
	id: serial('id').primaryKey(),
	name: text('name').notNull(),
	description: text('description'),
});

export const groupsConfig = relations(groupsTable, ({ many }) => ({
	usersToGroups: many(usersToGroupsTable),
}));

export const usersToGroupsTable = pgTable('users_to_groups', {
	id: serial('id').primaryKey(),
	userId: integer('user_id').notNull().references(() => usersTable.id),
	groupId: integer('group_id').notNull().references(() => groupsTable.id),
}, (t) => ({
	pk: primaryKey(t.groupId, t.userId),
}));

export const usersToGroupsConfig = relations(usersToGroupsTable, ({ one }) => ({
	group: one(groupsTable, { fields: [usersToGroupsTable.groupId], references: [groupsTable.id] }),
	user: one(usersTable, { fields: [usersToGroupsTable.userId], references: [usersTable.id] }),
}));

export const postsTable = pgTable('posts', {
	id: serial('id').primaryKey(),
	content: text('content').notNull(),
	ownerId: integer('owner_id').references(() => usersTable.id),
	createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
});

export const postsConfig = relations(postsTable, ({ one, many }) => ({
	author: one(usersTable, { fields: [postsTable.ownerId], references: [usersTable.id] }),
	comments: many(commentsTable),
}));

export const commentsTable = pgTable('comments', {
	id: serial('id').primaryKey(),
	content: text('content').notNull(),
	creator: integer('creator').references(() => usersTable.id),
	postId: integer('post_id').references(() => postsTable.id),
	createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
});

export const commentsConfig = relations(commentsTable, ({ one, many }) => ({
	post: one(postsTable, { fields: [commentsTable.postId], references: [postsTable.id] }),
	author: one(usersTable, { fields: [commentsTable.creator], references: [usersTable.id] }),
	likes: many(commentLikesTable),
}));

export const commentLikesTable = pgTable('comment_likes', {
	id: serial('id').primaryKey(),
	creator: integer('creator').references(() => usersTable.id),
	commentId: integer('comment_id').references(() => commentsTable.id),
	createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
});

export const commentLikesConfig = relations(commentLikesTable, ({ one }) => ({
	comment: one(commentsTable, { fields: [commentLikesTable.commentId], references: [commentsTable.id] }),
	author: one(usersTable, { fields: [commentLikesTable.creator], references: [usersTable.id] }),
}));

Domain

Subdomains

Dependencies

  • drizzle-orm
  • pg-core

Frequently Asked Questions

What does pg.schema.ts do?
pg.schema.ts is a source file in the drizzle-orm codebase, written in typescript. It belongs to the DrizzleORM domain, RelationalQuery subdomain.
What functions are defined in pg.schema.ts?
pg.schema.ts defines 7 function(s): commentLikesConfig, commentsConfig, groupsConfig, postsConfig, usersConfig, usersToGroupsConfig, usersToGroupsTable.
What does pg.schema.ts depend on?
pg.schema.ts imports 2 module(s): drizzle-orm, pg-core.
What files import pg.schema.ts?
pg.schema.ts is imported by 3 file(s): pg.postgresjs.test.ts, pg.test.ts, vercel.test.ts.
Where is pg.schema.ts in the architecture?
pg.schema.ts is located at integration-tests/tests/relational/pg.schema.ts (domain: DrizzleORM, subdomain: RelationalQuery, directory: integration-tests/tests/relational).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free