const BaseRepository = require('../../../src/database/repository'); const logger = require('../../../src/utils/logger'); class ResponseRepository extends BaseRepository { constructor() { super('pg_vt_responses'); } /** * Find responses with filters * @param {Object} filters - Filter criteria * @param {Object} options - Query options */ async findWithFilters(filters = {}, options = {}) { const criteria = {}; if (filters.campaign_id) criteria.campaign_id = filters.campaign_id; if (filters.person_id) criteria.person_id = filters.person_id; if (filters.answered !== undefined) criteria.answered = filters.answered; const orderBy = options.orderBy || 'created_at'; const orderDirection = options.orderDirection || 'desc'; const limit = options.limit; return await this.findAll(criteria, { orderBy, orderDirection, limit }); } /** * Get or create response * @param {string} campaignId - Campaign ID * @param {string} personId - Person ID */ async getOrCreate(campaignId, personId) { const existing = await this.findOne({ campaign_id: campaignId, person_id: personId }); if (existing) return existing; return await this.create({ campaign_id: campaignId, person_id: personId, answered: false }); } /** * Mark response as answered * @param {string} responseId - Response ID */ async markAnswered(responseId) { return await this.updateById(responseId, { answered: true, answered_date: new Date().toISOString(), last_modified_date: new Date().toISOString(), updated_at: new Date().toISOString() }); } } module.exports = ResponseRepository;