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;