module cleanup

This commit is contained in:
2025-12-19 01:22:45 +01:00
parent d617654928
commit d0fac9e6c1
135 changed files with 5104 additions and 1315 deletions

View File

@@ -1,13 +1,7 @@
/**
* Use Case: RecordEngagementUseCase
*
* Records an engagement event when a visitor interacts with an entity.
*/
import type { AsyncUseCase } from '@core/shared/application';
import type { Logger } from '@core/shared/application';
import { EngagementEvent, type EngagementAction, type EngagementEntityType } from '../../domain/entities/EngagementEvent';
import type { IEngagementRepository } from '../../domain/repositories/IEngagementRepository';
import { EngagementEvent } from '../../domain/entities/EngagementEvent';
import type { EngagementAction, EngagementEntityType } from '../../domain/types/EngagementEvent';
export interface RecordEngagementInput {
action: EngagementAction;
@@ -24,43 +18,41 @@ export interface RecordEngagementOutput {
engagementWeight: number;
}
export class RecordEngagementUseCase
implements AsyncUseCase<RecordEngagementInput, RecordEngagementOutput> {
export class RecordEngagementUseCase {
constructor(
private readonly engagementRepository: IEngagementRepository,
private readonly logger: Logger,
) {}
async execute(input: RecordEngagementInput): Promise<RecordEngagementOutput> {
this.logger.debug('Executing RecordEngagementUseCase', { input });
try {
const eventId = `eng-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
const baseProps: Omit<Parameters<typeof EngagementEvent.create>[0], 'timestamp'> = {
id: eventId,
const engagementEvent = EngagementEvent.create({
id: crypto.randomUUID(),
action: input.action,
entityType: input.entityType,
entityId: input.entityId,
actorId: input.actorId,
actorType: input.actorType,
sessionId: input.sessionId,
};
const event = EngagementEvent.create({
...baseProps,
...(input.actorId !== undefined ? { actorId: input.actorId } : {}),
...(input.metadata !== undefined ? { metadata: input.metadata } : {}),
metadata: input.metadata,
});
await this.engagementRepository.save(event);
this.logger.info('Engagement recorded successfully', { eventId, input });
await this.engagementRepository.save(engagementEvent);
this.logger.info('Engagement event recorded', {
engagementId: engagementEvent.id,
action: input.action,
entityId: input.entityId,
entityType: input.entityType,
});
return {
eventId,
engagementWeight: event.getEngagementWeight(),
eventId: engagementEvent.id,
engagementWeight: engagementEvent.getEngagementWeight(),
};
} catch (error) {
this.logger.error('Error recording engagement', error instanceof Error ? error : new Error(String(error)), { input });
this.logger.error('Failed to record engagement event', { error: error as Error, input });
throw error;
}
}
}
}