@@ -3,7 +3,7 @@ import logger from '@/configs/logger.config';
33import { DBError } from '@/exception' ;
44
55export class PostRepository {
6- constructor ( private pool : Pool ) { }
6+ constructor ( private pool : Pool ) { }
77
88 async findPostsByUserId ( userId : number , cursor ?: string , sort ?: string , isAsc ?: boolean , limit : number = 15 ) {
99 try {
@@ -162,28 +162,39 @@ export class PostRepository {
162162
163163 async findPostByPostId ( postId : number , start ?: string , end ?: string ) {
164164 try {
165- let query = `
166- SELECT
167- (pds.date AT TIME ZONE 'Asia/Seoul') AT TIME ZONE 'UTC' AS date,
168- pds.daily_view_count ,
169- pds.daily_like_count
170- FROM posts_postdailystatistics pds
171- WHERE pds.post_id = $1
172- ORDER BY pds.date ASC
165+ // 기본 쿼리 부분
166+ const baseQuery = `
167+ SELECT
168+ ( pds.date AT TIME ZONE 'Asia/Seoul') AT TIME ZONE 'UTC' AS date ,
169+ pds.daily_view_count,
170+ pds.daily_like_count
171+ FROM posts_postdailystatistics pds
172+ WHERE pds.post_id = $1
173173 ` ;
174174
175- const values : ( number | string ) [ ] = [ postId ] ;
175+ // 날짜 필터링 조건 구성
176+ const dateFilterQuery = ( start && end )
177+ ? `
178+ AND (pds.date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date >= ($2 AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date
179+ AND (pds.date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date <= ($3 AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date
180+ `
181+ : '' ;
176182
177- if ( start && end ) {
178- query += ` AND (pds.date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date >= ($2 AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date
179- AND (pds.date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date <= ($3 AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date` ;
180- values . push ( start , end ) ;
181- }
183+ // 정렬 조건 추가
184+ const orderByQuery = `ORDER BY pds.date ASC` ;
182185
183- const result = await this . pool . query ( query , values ) ;
186+ // 최종 쿼리 조합
187+ const fullQuery = [ baseQuery , dateFilterQuery , orderByQuery ] . join ( ' ' ) ;
188+
189+ // 파라미터 배열 구성
190+ const queryParams : Array < number | string > = [ postId ] ;
191+ if ( start && end ) queryParams . push ( start , end ) ;
192+
193+ // 쿼리 실행
194+ const result = await this . pool . query ( fullQuery , queryParams ) ;
184195 return result . rows ;
185196 } catch ( error ) {
186- logger . error ( 'Post Repo findPostByPostId error : ' , error ) ;
197+ logger . error ( 'Post Repo findPostByPostId error: ' , error ) ;
187198 throw new DBError ( '단건 post 조회 중 문제가 발생했습니다.' ) ;
188199 }
189200 }
0 commit comments