"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;