131 lines
5.0 KiB
JavaScript
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;
|