swadhinbiswas Fix: Add date validation in analysis.ts to prevent RangeError · 1/20/2026
a7662cd
51 lines · 2.0 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
40
41
42
43
44
45
46
47
48
49
50
51
import { integer, pgTable, text, timestamp } from "drizzle-orm/pg-core";
import { repositories } from "./repositories";
import { relations } from "drizzle-orm";

export const securityScans = pgTable("security_scans", {
    id: text("id").primaryKey(),
    repositoryId: text("repository_id")
        .notNull()
        .references(() => repositories.id, { onDelete: "cascade" }),
    status: text("status").notNull().default("queued"), // queued, in_progress, completed, failed
    startedAt: timestamp("started_at"),
    completedAt: timestamp("completed_at"),
    criticalCount: integer("critical_count").default(0),
    highCount: integer("high_count").default(0),
    mediumCount: integer("medium_count").default(0),
    lowCount: integer("low_count").default(0),
    unknownCount: integer("unknown_count").default(0),
    logs: text("logs"),
});

export const securityVulnerabilities = pgTable("security_vulnerabilities", {
    id: text("id").primaryKey(),
    scanId: text("scan_id")
        .notNull()
        .references(() => securityScans.id, { onDelete: "cascade" }),
    vulnerabilityId: text("vulnerability_id").notNull(), // e.g. CVE-2023-1234
    pkgName: text("pkg_name").notNull(),
    installedVersion: text("installed_version"),
    fixedVersion: text("fixed_version"),
    severity: text("severity").notNull(), // CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN
    title: text("title"),
    description: text("description"),
    target: text("target"), // e.g. package-lock.json
    class: text("class"), // os-pkgs, lang-pkgs, secret
});

export const securityScansRelations = relations(securityScans, ({ one, many }) => ({
    repository: one(repositories, {
        fields: [securityScans.repositoryId],
        references: [repositories.id],
    }),
    vulnerabilities: many(securityVulnerabilities),
}));

export const securityVulnerabilitiesRelations = relations(securityVulnerabilities, ({ one }) => ({
    scan: one(securityScans, {
        fields: [securityVulnerabilities.scanId],
        references: [securityScans.id],
    }),
}));