relations.ts (2.04 KB)
import { relations } from "drizzle-orm";
import { comment, issue, pullRequest, repository } from ".";
import { account, apikey, session, user } from "./auth";

export const userRelations = relations(user, ({ many }) => ({
  sessions: many(session),
  accounts: many(account),
  apikeys: many(apikey),

  repositories: many(repository),
  issues: many(issue),
  pullRequests: many(pullRequest),
  comments: many(comment),
}));

export const sessionRelations = relations(session, ({ one }) => ({
  user: one(user, {
    fields: [session.userId],
    references: [user.id],
  }),
}));

export const accountRelations = relations(account, ({ one }) => ({
  user: one(user, {
    fields: [account.userId],
    references: [user.id],
  }),
}));

export const apikeyRelations = relations(apikey, ({ one }) => ({
  user: one(user, {
    fields: [apikey.userId],
    references: [user.id],
  }),
}));

export const repositoryRelations = relations(repository, ({ one, many }) => ({
  owner: one(user, {
    fields: [repository.ownerId],
    references: [user.id],
  }),
  issues: many(issue),
  pullRequests: many(pullRequest),
}));

export const issueRelations = relations(issue, ({ one, many }) => ({
  repository: one(repository, {
    fields: [issue.repositoryId],
    references: [repository.id],
  }),
  creator: one(user, {
    fields: [issue.creatorId],
    references: [user.id],
  }),
  comments: many(comment),
}));

export const pullRequestRelations = relations(pullRequest, ({ one, many }) => ({
  repository: one(repository, {
    fields: [pullRequest.repositoryId],
    references: [repository.id],
  }),
  creator: one(user, {
    fields: [pullRequest.creatorId],
    references: [user.id],
  }),
  comments: many(comment),
}));

export const commentRelations = relations(comment, ({ one }) => ({
  author: one(user, {
    fields: [comment.authorId],
    references: [user.id],
  }),
  issue: one(issue, {
    fields: [comment.issueId],
    references: [issue.id],
  }),
  pullRequest: one(pullRequest, {
    fields: [comment.pullRequestId],
    references: [pullRequest.id],
  }),
}));