feat(api): add price history, Stringee SMS, Zalo OA, WebSocket notifications, and feature-listing command
- Add PriceHistory model + migration, price-changed domain event, and event handler - Add GetPriceHistory query handler and controller endpoint - Implement StringeeSmsService and ZaloOaService with unit tests - Add Zalo ZNS templates for Vietnamese notification messages - Add WebSocket notification gateway for real-time push - Add FeatureListingCommand for promoted listings - Apply remaining consistent-type-imports lint fixes across API modules Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { Lead as PrismaLead } from '@prisma/client';
|
||||
import { PrismaService } from '@modules/shared';
|
||||
import { LeadEntity, LeadStatus } from '../../domain/entities/lead.entity';
|
||||
import { LeadReadDto } from '../../domain/repositories/lead-read.dto';
|
||||
import { ILeadRepository, LeadStatsData, PaginatedResult } from '../../domain/repositories/lead.repository';
|
||||
import { type Lead as PrismaLead } from '@prisma/client';
|
||||
import { type PrismaService } from '@modules/shared';
|
||||
import { LeadEntity, type LeadStatus } from '../../domain/entities/lead.entity';
|
||||
import { type LeadReadDto } from '../../domain/repositories/lead-read.dto';
|
||||
import { type ILeadRepository, type LeadStatsData, type PaginatedResult } from '../../domain/repositories/lead.repository';
|
||||
import { LeadScore } from '../../domain/value-objects/lead-score.vo';
|
||||
|
||||
@Injectable()
|
||||
|
||||
@@ -9,7 +9,7 @@ import {
|
||||
Query,
|
||||
UseGuards,
|
||||
} from '@nestjs/common';
|
||||
import { CommandBus, QueryBus } from '@nestjs/cqrs';
|
||||
import { type CommandBus, type QueryBus } from '@nestjs/cqrs';
|
||||
import {
|
||||
ApiTags,
|
||||
ApiOperation,
|
||||
@@ -17,18 +17,18 @@ import {
|
||||
ApiBearerAuth,
|
||||
ApiParam,
|
||||
} from '@nestjs/swagger';
|
||||
import { JwtPayload, CurrentUser, JwtAuthGuard, RolesGuard, Roles } from '@modules/auth';
|
||||
import { type JwtPayload, CurrentUser, JwtAuthGuard, RolesGuard, Roles } from '@modules/auth';
|
||||
import { CreateLeadCommand } from '../../application/commands/create-lead/create-lead.command';
|
||||
import { CreateLeadResult } from '../../application/commands/create-lead/create-lead.handler';
|
||||
import { type CreateLeadResult } from '../../application/commands/create-lead/create-lead.handler';
|
||||
import { DeleteLeadCommand } from '../../application/commands/delete-lead/delete-lead.command';
|
||||
import { UpdateLeadStatusCommand } from '../../application/commands/update-lead-status/update-lead-status.command';
|
||||
import { GetLeadStatsQuery } from '../../application/queries/get-lead-stats/get-lead-stats.query';
|
||||
import { GetLeadsByAgentQuery } from '../../application/queries/get-leads-by-agent/get-leads-by-agent.query';
|
||||
import { LeadReadDto } from '../../domain/repositories/lead-read.dto';
|
||||
import { LeadStatsData, PaginatedResult } from '../../domain/repositories/lead.repository';
|
||||
import { CreateLeadDto } from '../dto/create-lead.dto';
|
||||
import { ListLeadsDto } from '../dto/list-leads.dto';
|
||||
import { UpdateLeadStatusDto } from '../dto/update-lead-status.dto';
|
||||
import { type LeadReadDto } from '../../domain/repositories/lead-read.dto';
|
||||
import { type LeadStatsData, type PaginatedResult } from '../../domain/repositories/lead.repository';
|
||||
import { type CreateLeadDto } from '../dto/create-lead.dto';
|
||||
import { type ListLeadsDto } from '../dto/list-leads.dto';
|
||||
import { type UpdateLeadStatusDto } from '../dto/update-lead-status.dto';
|
||||
|
||||
@ApiTags('leads')
|
||||
@ApiBearerAuth('JWT')
|
||||
|
||||
Reference in New Issue
Block a user