/** * Backend Campaign Domain Service * * Demonstrates extending BaseBackendDomainService which provides: * - Automatic validation → mapper → repository/API → mapper flow * - Event emission throughout CRUD lifecycle * - Dual mode: Repository (DbService/dummy) OR HTTP API * - Configurable error throwing behavior * * @fileoverview Campaign domain service for backend operations * @module BackendCampaignDomainService */ import { BaseBackendDomainService } from '../base'; import type { CampaignEntity, CampaignResponseDTO, CreateCampaignDTO, PatchCampaignDTO, QueryCampaignDTO, DeleteCampaignDTO, CampaignStoreItem, CampaignDomainServiceConfig as _CampaignDomainServiceConfig } from '@plyaz/types/campaign'; import type { CoreServiceCreateOptions, CoreInjectedServices } from '@plyaz/types/core'; import { CampaignRepository, type CampaignDatabaseRow } from '../../models/campaign'; import { CampaignMapperClass } from './mappers/CampaignMapper'; import { CampaignValidatorClass } from './validators/CampaignValidator'; /** * Mapper type for this service * @typedef {InstanceType} CampaignMapper */ type CampaignMapper = InstanceType; /** * Validator type for this service * @typedef {InstanceType} CampaignValidator */ type CampaignValidator = InstanceType; /** * Campaign event types for subscription * @typedef {string} CampaignEventType */ export type CampaignEventType = 'campaign:creating' | 'campaign:created' | 'campaign:updating' | 'campaign:updated' | 'campaign:deleting' | 'campaign:deleted'; /** * Backend Campaign Domain Service * * Extends BaseBackendDomainService with campaign-specific functionality. * Provides CRUD operations, validation, mapping, and event emission. * * @class BackendCampaignDomainService * @extends {BaseBackendDomainService} * * @example * ```typescript * // Create service instance * const service = await BackendCampaignDomainService.create({ * throwOnValidationError: true, * throwOnRepositoryError: true, * }); * * // Use inherited CRUD methods * const campaign = await service.create({ name: 'Test Campaign', amount: 100 }); * const updated = await service.patch(campaign.id, { amount: 200 }); * await service.delete(campaign.id, { soft: true }); * ``` */ export declare class BackendCampaignDomainService extends BaseBackendDomainService<_CampaignDomainServiceConfig, CampaignEntity, CampaignResponseDTO, CreateCampaignDTO, CreateCampaignDTO, PatchCampaignDTO, QueryCampaignDTO, DeleteCampaignDTO, CampaignDatabaseRow, CampaignRepository, CampaignStoreItem, CampaignMapper, CampaignValidator> { /** * Repository instance for data access * @protected * @type {CampaignRepository} */ protected repository: CampaignRepository; /** * Event prefix for all events emitted by this service * @protected * @type {string} */ protected eventPrefix: string; /** * Cache prefix for namespacing cache keys * @protected * @type {string} */ protected cachePrefix: string; /** * Unique key for this service (used by ServiceRegistry) * @static * @readonly * @type {string} */ static readonly serviceKey: "campaign"; /** * Factory method for ServiceRegistry auto-initialization. * Creates and initializes the service instance. * * @static * @param {_CampaignDomainServiceConfig} config - Service configuration * @param {CoreServiceCreateOptions} [options] - Global options from the registry * @returns {Promise} Promise resolving to initialized service instance * * @example * ```typescript * const service = await BackendCampaignDomainService.create({ * enabled: true, * throwOnValidationError: true, * cache: { enabled: true, defaultTtl: 300 } * }); * ``` */ static create(config: _CampaignDomainServiceConfig, options?: CoreServiceCreateOptions): Promise; /** * Creates an instance of BackendCampaignDomainService * * @param {_CampaignDomainServiceConfig} [config={}] - Service configuration * @param {CoreInjectedServices} [injected] - Injected core services */ constructor(config?: _CampaignDomainServiceConfig, injected?: CoreInjectedServices); /** * Check if service is available * * @returns {boolean} True if service is enabled and available */ isAvailable(): boolean; /** * Dispose/cleanup the service * Called when service is being destroyed */ dispose(): void; /** * Get all campaigns with optional filters * Demonstrates the getAll() method with typed query parameters * * @param {QueryCampaignDTO} [filters] - Optional query filters (status, pagination, sorting) * @returns {Promise} Promise resolving to array of CampaignEntity * * @example * ```typescript * // Get all active campaigns * const activeCampaigns = await service.getCampaigns({ status: 'active' }); * * // Get campaigns with pagination * const campaigns = await service.getCampaigns({ * page: 2, * limit: 10, * sort_by: 'name', * sort_order: 'asc' * }); * ``` */ getCampaigns(filters?: QueryCampaignDTO): Promise; } /** * Default singleton instance of BackendCampaignDomainService * Use this for singleton pattern usage * * @constant {BackendCampaignDomainService} * * @example * ```typescript * import { backendCampaignDomainService } from '@plyaz/core'; * * const campaign = await backendCampaignDomainService.create({ * name: 'Test Campaign', * amount: 100 * }); * ``` */ export declare const backendCampaignDomainService: BackendCampaignDomainService; export {}; //# sourceMappingURL=BackendCampaignDomainService.d.ts.map