Files
debian 94defee1f8 fase(20): visual regression refactor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 06:02:37 -04:00

131 lines
5.0 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.KyselyVisualComparisonRepository = exports.KyselyVisualBaselineRepository = void 0;
const UniqueId_1 = require("../../../../shared/domain/UniqueId");
const VisualBaseline_1 = require("../../domain/entities/VisualBaseline");
const VisualComparison_1 = require("../../domain/entities/VisualComparison");
const ComparisonStatus_1 = require("../../domain/value-objects/ComparisonStatus");
class KyselyVisualBaselineRepository {
constructor(db) {
this.db = db;
}
async save(baseline) {
await this.db.insertInto('visual_baselines').values({
id: baseline.id.toString(),
state_id: baseline.stateId,
url: baseline.url,
screenshot_path: baseline.screenshotPath,
approved_at: baseline.approvedAt.getTime(),
approved_by: baseline.approvedBy,
width: baseline.width,
height: baseline.height,
}).onConflict(oc => oc.column('id').doUpdateSet({
screenshot_path: baseline.screenshotPath,
approved_at: baseline.approvedAt.getTime(),
approved_by: baseline.approvedBy,
})).execute();
}
async findByStateId(stateId) {
const row = await this.db
.selectFrom('visual_baselines')
.selectAll()
.where('state_id', '=', stateId)
.orderBy('approved_at', 'desc')
.limit(1)
.executeTakeFirst();
return row ? this.toDomain(row) : null;
}
async findById(id) {
const row = await this.db
.selectFrom('visual_baselines')
.selectAll()
.where('id', '=', id)
.executeTakeFirst();
return row ? this.toDomain(row) : null;
}
toDomain(row) {
return VisualBaseline_1.VisualBaseline.reconstitute({
stateId: row.state_id,
url: row.url,
screenshotPath: row.screenshot_path,
width: row.width,
height: row.height,
approvedAt: new Date(row.approved_at),
approvedBy: row.approved_by ?? 'user',
}, UniqueId_1.UniqueId.from(row.id));
}
}
exports.KyselyVisualBaselineRepository = KyselyVisualBaselineRepository;
class KyselyVisualComparisonRepository {
constructor(db) {
this.db = db;
}
async save(comparison) {
await this.db.insertInto('visual_comparisons').values({
id: comparison.id.toString(),
session_id: comparison.sessionId,
state_id: comparison.stateId,
baseline_id: comparison.baselineId,
current_screenshot_path: comparison.currentScreenshotPath,
diff_screenshot_path: comparison.diffScreenshotPath,
diff_pixels: comparison.diffPixels,
diff_percent: comparison.diffPercent,
status: comparison.status.value,
created_at: comparison.createdAt.getTime(),
}).execute();
}
async update(comparison) {
await this.db.updateTable('visual_comparisons')
.set({
status: comparison.status.value,
baseline_id: comparison.baselineId,
})
.where('id', '=', comparison.id.toString())
.execute();
}
async findById(id) {
const row = await this.db
.selectFrom('visual_comparisons')
.selectAll()
.where('id', '=', id)
.executeTakeFirst();
return row ? this.toDomain(row) : null;
}
async findAll(filters) {
let query = this.db.selectFrom('visual_comparisons').selectAll();
if (filters?.sessionId) {
query = query.where('session_id', '=', filters.sessionId);
}
if (filters?.status) {
query = query.where('status', '=', filters.status);
}
const rows = await query.orderBy('created_at', 'desc').execute();
return rows.map((r) => this.toDomain(r));
}
async findByStatus(sessionId, status) {
let query = this.db
.selectFrom('visual_comparisons')
.selectAll()
.where('status', '=', status);
if (sessionId) {
query = query.where('session_id', '=', sessionId);
}
const rows = await query.orderBy('created_at', 'desc').execute();
return rows.map((r) => this.toDomain(r));
}
toDomain(row) {
return VisualComparison_1.VisualComparison.reconstitute({
sessionId: row.session_id,
stateId: row.state_id,
baselineId: row.baseline_id,
currentScreenshotPath: row.current_screenshot_path,
diffScreenshotPath: row.diff_screenshot_path,
diffPixels: row.diff_pixels,
diffPercent: row.diff_percent,
status: ComparisonStatus_1.ComparisonStatus.from(row.status),
createdAt: new Date(row.created_at),
}, UniqueId_1.UniqueId.from(row.id));
}
}
exports.KyselyVisualComparisonRepository = KyselyVisualComparisonRepository;