/ opencodehub / src / db / schema / review-rules.ts
swadhinbiswas feat: OpenCodeHub v1.1.0 - Enterprise Features & Storage Adapters · 2/15/2026
719a1cb
39 lines · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import { boolean, integer, pgTable, text, timestamp } from "drizzle-orm/pg-core";
import { repositories } from "./repositories";
import { users } from "./users";

export const reviewRequirements = pgTable("review_requirements", {
  id: text("id").primaryKey(),
  repositoryId: text("repository_id")
    .notNull()
    .references(() => repositories.id, { onDelete: "cascade" }),
  minApprovals: integer("min_approvals").default(1),
  requireCodeOwner: boolean("require_code_owner").default(false),
  requireTeamLead: boolean("require_team_lead").default(false),
  dismissStaleReviews: boolean("dismiss_stale_reviews").default(false),
  requireReReviewOnPush: boolean("require_rereview_on_push").default(false),
  createdById: text("created_by_id").references(() => users.id),
  createdAt: timestamp("created_at").notNull().defaultNow(),
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
});

export const reviewerRules = pgTable("reviewer_rules", {
  id: text("id").primaryKey(),
  repositoryId: text("repository_id")
    .notNull()
    .references(() => repositories.id, { onDelete: "cascade" }),
  name: text("name").notNull(),
  ruleType: text("rule_type").notNull(), // user, team, codeowner, random
  targetId: text("target_id"),
  count: integer("count"),
  pathPattern: text("path_pattern"),
  isRequired: boolean("is_required").default(true),
  isEnabled: boolean("is_enabled").default(true),
  createdById: text("created_by_id").references(() => users.id),
  createdAt: timestamp("created_at").notNull().defaultNow(),
  updatedAt: timestamp("updated_at").notNull().defaultNow(),
});

export type ReviewRequirement = typeof reviewRequirements.$inferSelect;
export type ReviewerRule = typeof reviewerRules.$inferSelect;