@@ -21,6 +21,7 @@ import { CoupleService } from '../couple/couple.service';
2121import { MemberEcoVerificationSummaryResponseDto } from './dto/member-eco-verification-summary-response.dto' ;
2222import { tz } from '../../common/utils/date-util' ;
2323import { Member } from '../member/entities/member.entity' ;
24+ import { EcoVerificationType } from './constant/eco-verification-type.enum' ;
2425
2526@Injectable ( )
2627export class EcoVerificationService {
@@ -76,25 +77,25 @@ export class EcoVerificationService {
7677 throw new BusinessException ( ErrorType . ECO_VERIFICATION_NOT_FOUND ) ;
7778 }
7879
79- // const existsToday = await this.memberEcoVerificationRepo
80- // .createQueryBuilder('mev')
81- // .where('mev.memberId = :memberId', { memberId })
82- // .andWhere('mev.ecoVerificationId = :ecoVerificationId', {
83- // ecoVerificationId: ecoVerificationId,
84- // })
85- // .andWhere('mev.status != :status', {
86- // status: EcoVerificationStatus.REJECTED,
87- // })
88- // .andWhere('DATE(mev.createdAt) = :today', {
89- // today: tz().format('YYYY-MM-DD'),
90- // })
91- // .getExists();
92- //
93- // if (existsToday) {
94- // throw new BusinessException(
95- // ErrorType.ALREADY_APPROVED_ECO_VERIFICATION_TODAY,
96- // );
97- // }
80+ const existsToday = await this . memberEcoVerificationRepo
81+ . createQueryBuilder ( 'mev' )
82+ . where ( 'mev.memberId = :memberId' , { memberId } )
83+ . andWhere ( 'mev.ecoVerificationId = :ecoVerificationId' , {
84+ ecoVerificationId : ecoVerificationId ,
85+ } )
86+ . andWhere ( 'mev.status != :status' , {
87+ status : EcoVerificationStatus . REJECTED ,
88+ } )
89+ . andWhere ( 'DATE(mev.createdAt) = :today' , {
90+ today : tz ( ) . format ( 'YYYY-MM-DD' ) ,
91+ } )
92+ . getExists ( ) ;
93+
94+ if ( existsToday ) {
95+ throw new BusinessException (
96+ ErrorType . ALREADY_APPROVED_ECO_VERIFICATION_TODAY ,
97+ ) ;
98+ }
9899
99100 const { isValid, reason } = await this . openaiService . verifyImageByType (
100101 imageUrl ,
@@ -269,63 +270,55 @@ export class EcoVerificationService {
269270 Logger . debug ( `Today >>> ${ tz ( ) . format ( ) } >>> ${ todayDate } ` ) ;
270271 const yesterdayDate = dayjs ( date ) . subtract ( 1 , 'day' ) . format ( 'YYYY-MM-DD' ) ;
271272
272- const memberEcoVerifications = await this . memberEcoVerificationRepo . find ( {
273- where : [
274- {
275- member : { id : me . id } ,
276- createdAt : Raw (
277- ( alias ) => `DATE(${ alias } ) IN ('${ yesterdayDate } ', '${ todayDate } ')` ,
278- ) ,
279- } ,
280- {
281- member : { id : lover . id } ,
282- createdAt : Raw (
283- ( alias ) => `DATE(${ alias } ) IN ('${ yesterdayDate } ', '${ todayDate } ')` ,
284- ) ,
285- } ,
286- ] ,
287- relations : [ 'ecoVerification' , 'member' ] ,
288- } ) ;
289-
290- type VerMap = Record < string , MemberEcoVerification [ ] > ;
291- const groupedByDateAndMember : VerMap = { } ;
292-
293- for ( const recMev of memberEcoVerifications ) {
294- const recDate = dayjs ( recMev . createdAt ) . format ( 'YYYY-MM-DD' ) ;
295- const key = `${ recDate } |${ recMev . member . id } ` ;
296- if ( ! groupedByDateAndMember [ key ] ) {
297- groupedByDateAndMember [ key ] = [ ] ;
298- }
299- groupedByDateAndMember [ key ] . push ( recMev ) ;
300- }
273+ const rawRecs = await this . memberEcoVerificationRepo
274+ . createQueryBuilder ( 'mev' )
275+ . innerJoinAndSelect ( 'mev.ecoVerification' , 'ev' )
276+ . innerJoinAndSelect ( 'mev.member' , 'm' )
277+ . where ( 'm.id IN (:...ids)' , { ids : [ me . id , lover . id ] } )
278+ . andWhere ( 'DATE(mev.createdAt) IN (:...dates)' , {
279+ dates : [ yesterdayDate , todayDate ] ,
280+ } )
281+ . andWhere ( 'ev.type != :eggType' , {
282+ eggType : EcoVerificationType . EASTER_EGG ,
283+ } )
284+ . getMany ( ) ;
285+
286+ const grouped = rawRecs . reduce < Record < string , MemberEcoVerification [ ] > > (
287+ ( acc , rec ) => {
288+ const d = dayjs ( rec . createdAt ) . format ( 'YYYY-MM-DD' ) ;
289+ const key = `${ d } |${ rec . member . id } ` ;
290+ ( acc [ key ] = acc [ key ] || [ ] ) . push ( rec ) ;
291+ return acc ;
292+ } ,
293+ { } ,
294+ ) ;
301295
302- const buildResultForDate = ( targetDate : string ) => {
303- const memberGroupedResult : MemberEcoVerificationGroupedDto [ ] =
304- members . map ( ( m ) => {
305- const key = `${ targetDate } |${ m . id } ` ;
306- const recs = groupedByDateAndMember [ key ] || [ ] ;
307- const items : MemberEcoVerificationDto [ ] = recs . map ( ( mev ) => ( {
296+ const build = ( targetDate : string ) => ( {
297+ date : targetDate ,
298+ members : members . map ( ( m ) => {
299+ const key = `${ targetDate } |${ m . id } ` ;
300+ const items =
301+ ( grouped [ key ] || [ ] ) . map ( ( mev ) => ( {
308302 memberEcoVerificationId : mev . id ,
309303 type : mev . ecoVerification . type ,
310304 ecoLovePoint : mev . ecoVerification . ecoLovePoint ,
311305 breakupBufferPoint : mev . ecoVerification . breakupBufferPoint ,
312306 linkUrl : mev . linkUrl ,
313307 status : mev . status ,
314308 imageUrl : mev . imageUrl ,
315- } ) ) ;
316- return {
317- isMe : m . id === memberId ,
318- memberId : m . id ,
319- nickname : m . id === memberId ? `${ m . nickname } (나)` : m . nickname ,
320- memberEcoVerifications : items ,
321- } ;
322- } ) ;
323- return { date : targetDate , members : memberGroupedResult } ;
324- } ;
309+ } ) ) || [ ] ;
310+ return {
311+ isMe : m . id === memberId ,
312+ memberId : m . id ,
313+ nickname : m . id === memberId ? `${ m . nickname } (나)` : m . nickname ,
314+ memberEcoVerifications : items ,
315+ } ;
316+ } ) ,
317+ } ) ;
325318
326319 return {
327- today : buildResultForDate ( todayDate ) ,
328- yesterday : buildResultForDate ( yesterdayDate ) ,
320+ today : build ( todayDate ) ,
321+ yesterday : build ( yesterdayDate ) ,
329322 } ;
330323 }
331324
0 commit comments