fase(20): visual regression refactor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
130
dist/modules/visual-regression/infrastructure/repositories/KyselyVisualRepository.js
vendored
Normal file
130
dist/modules/visual-regression/infrastructure/repositories/KyselyVisualRepository.js
vendored
Normal file
@@ -0,0 +1,130 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user