1- import { AuctionJobQueue } from '@app/resources/types' ;
21import { TIME_MS } from '@app/resources/constants' ;
32import {
43 IRabbitMQMessageBase ,
54 RabbitMQMessageDto ,
65} from '@app/resources/dto/queue' ;
6+ import { RegionIdOrName } from '@alexzedim/blizzapi' ;
7+
8+ /**
9+ * Base interface for creating auction message entries
10+ */
11+ export interface IAuctionMessageBase {
12+ connectedRealmId : number ;
13+ auctionsTimestamp ?: number ;
14+ commoditiesTimestamp ?: number ;
15+ isAssetClassIndex ?: boolean ;
16+ region ?: RegionIdOrName ;
17+ clientId ?: string ;
18+ clientSecret ?: string ;
19+ accessToken ?: string ;
20+ }
721
822/**
923 * Auction Message DTO for RabbitMQ
1024 *
1125 * Wraps AuctionJobQueue with RabbitMQ-specific metadata and routing.
1226 * Used for auction data synchronization from Blizzard API.
1327 */
14- export class AuctionMessageDto extends RabbitMQMessageDto < AuctionJobQueue > {
15- readonly payload : AuctionJobQueue ;
28+ export class AuctionMessageDto extends RabbitMQMessageDto < IAuctionMessageBase > {
29+ readonly connectedRealmId : number ;
30+ readonly auctionsTimestamp ?: number ;
31+ readonly commoditiesTimestamp ?: number ;
32+ readonly isAssetClassIndex ?: boolean ;
33+ readonly region ?: RegionIdOrName ;
34+ readonly clientId ?: string ;
35+ readonly clientSecret ?: string ;
36+ readonly accessToken ?: string ;
37+
38+ private static isRabbitMQMessageBase < T > (
39+ params : any ,
40+ ) : params is IRabbitMQMessageBase < T > {
41+ return ! ! params && typeof params === 'object' && 'data' in ( params as any ) ;
42+ }
43+
44+ private static isAuctionCreateParams (
45+ params : any ,
46+ ) : params is Omit < Partial < AuctionMessageDto > , 'connectedRealmId' > &
47+ Pick < IAuctionMessageBase , 'connectedRealmId' > {
48+ return (
49+ ! ! params && typeof params === 'object' && 'connectedRealmId' in params
50+ ) ;
51+ }
1652
1753 constructor ( params : any ) {
18- const auctionData = params . data || params . payload || params ;
54+ const auctionData = params . data || params ;
1955
2056 super ( {
2157 messageId : params . id || `auction-${ auctionData . connectedRealmId } ` ,
@@ -28,44 +64,36 @@ export class AuctionMessageDto extends RabbitMQMessageDto<AuctionJobQueue> {
2864 metadata : params . metadata ,
2965 } ) ;
3066
31- this . payload = auctionData ;
67+ Object . assign ( this , auctionData ) ;
3268 }
3369
3470 /**
3571 * Create from auction data with RabbitMQ routing
3672 */
3773 static create < T > ( params : IRabbitMQMessageBase < T > ) : RabbitMQMessageDto < T > ;
38- static create ( params : {
39- data : AuctionJobQueue ;
40- priority ?: number ;
41- source ?: string ;
42- routingKey ?: string ;
43- expiration ?: number ;
44- } ) : AuctionMessageDto ;
74+ static create (
75+ params : Omit < Partial < AuctionMessageDto > , 'connectedRealmId' > &
76+ Pick < IAuctionMessageBase , 'connectedRealmId' > ,
77+ ) : AuctionMessageDto ;
4578 static create (
4679 params :
47- | IRabbitMQMessageBase < AuctionJobQueue >
48- | {
49- data : AuctionJobQueue ;
50- priority ?: number ;
51- source ?: string ;
52- routingKey ?: string ;
53- expiration ?: number ;
54- } ,
55- ) : RabbitMQMessageDto < AuctionJobQueue > | AuctionMessageDto {
56- if (
57- 'id' in ( params as any ) ||
58- 'persistent' in ( params as any ) ||
59- 'metadata' in ( params as any )
60- ) {
61- return RabbitMQMessageDto . create (
62- params as IRabbitMQMessageBase < AuctionJobQueue > ,
80+ | IRabbitMQMessageBase < IAuctionMessageBase >
81+ | ( Omit < Partial < AuctionMessageDto > , 'connectedRealmId' > &
82+ Pick < IAuctionMessageBase , 'connectedRealmId' > ) ,
83+ ) : RabbitMQMessageDto < IAuctionMessageBase > | AuctionMessageDto {
84+ if ( AuctionMessageDto . isRabbitMQMessageBase ( params ) ) {
85+ return RabbitMQMessageDto . create ( params ) ;
86+ }
87+
88+ if ( ! AuctionMessageDto . isAuctionCreateParams ( params ) ) {
89+ throw new Error (
90+ 'AuctionMessageDto.create expected auction params with connectedRealmId.' ,
6391 ) ;
6492 }
6593
6694 return new AuctionMessageDto ( {
67- id : `auction-${ params . data . connectedRealmId } ` ,
68- data : params . data ,
95+ id : `auction-${ params . connectedRealmId } ` ,
96+ data : params ,
6997 priority : params . priority ?? 5 ,
7098 source : params . source ?? 'dma' ,
7199 routingKey : params . routingKey ?? 'dma.auctions.normal' ,
0 commit comments