@@ -5,13 +5,7 @@ import { DBError } from '../exception';
5
5
export class PostRepository {
6
6
constructor ( private pool : Pool ) { }
7
7
8
- async findPostsByUserId (
9
- userId : number ,
10
- cursor ?: string ,
11
- sort ?: string ,
12
- isAsc ?: boolean ,
13
- limit : number = 15
14
- ) {
8
+ async findPostsByUserId ( userId : number , cursor ?: string , sort ?: string , isAsc ?: boolean , limit : number = 15 ) {
15
9
try {
16
10
// 1) 정렬 컬럼 매핑
17
11
let sortCol = 'p.released_at' ;
@@ -72,12 +66,12 @@ export class PostRepository {
72
66
daily_like_count,
73
67
date
74
68
FROM posts_postdailystatistics
75
- WHERE date::date = NOW()::date
69
+ WHERE ( date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC') ::date = ( NOW() AT TIME ZONE 'UTC' )::date
76
70
) pds ON p.id = pds.post_id
77
71
LEFT JOIN (
78
72
SELECT post_id, daily_view_count, daily_like_count, date
79
73
FROM posts_postdailystatistics
80
- WHERE date::date = (NOW() - INTERVAL '1 day')::date
74
+ WHERE ( date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC') ::date = (NOW() AT TIME ZONE 'UTC' - INTERVAL '1 day')::date
81
75
) yesterday_stats ON p.id = yesterday_stats.post_id
82
76
WHERE p.user_id = $1
83
77
AND (pds.post_id IS NOT NULL OR yesterday_stats.post_id IS NOT NULL)
@@ -133,7 +127,6 @@ export class PostRepository {
133
127
}
134
128
135
129
async getYesterdayAndTodayViewLikeStats ( userId : number ) {
136
-
137
130
// pds.updated_at 은 FE 화면을 위해 억지로 9h 시간 더한 값임 주의
138
131
try {
139
132
const query = `
@@ -147,12 +140,12 @@ export class PostRepository {
147
140
LEFT JOIN (
148
141
SELECT post_id, daily_view_count, daily_like_count, updated_at
149
142
FROM posts_postdailystatistics
150
- WHERE date::date = NOW()::date
143
+ WHERE ( date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC') ::date = ( NOW() AT TIME ZONE 'UTC' )::date
151
144
) pds ON p.id = pds.post_id
152
145
LEFT JOIN (
153
146
SELECT post_id, daily_view_count, daily_like_count
154
147
FROM posts_postdailystatistics
155
- WHERE date::date = (NOW() - INTERVAL '1 day')::date
148
+ WHERE ( date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC') ::date = (NOW() AT TIME ZONE 'UTC' - INTERVAL '1 day')::date
156
149
) yesterday_stats ON p.id = yesterday_stats.post_id
157
150
WHERE p.user_id = $1
158
151
` ;
@@ -165,4 +158,31 @@ export class PostRepository {
165
158
throw new DBError ( '전체 post 통계 조회 중 문제가 발생했습니다.' ) ;
166
159
}
167
160
}
161
+
162
+ async findPostByPostId ( postId : number , start ?: string , end ?: string ) {
163
+ try {
164
+ let query = `
165
+ SELECT
166
+ (pds.date AT TIME ZONE 'Asia/Seoul') AT TIME ZONE 'UTC' AS date,
167
+ pds.daily_view_count,
168
+ pds.daily_like_count
169
+ FROM posts_postdailystatistics pds
170
+ WHERE pds.post_id = $1
171
+ ` ;
172
+
173
+ const values : ( number | string ) [ ] = [ postId ] ;
174
+
175
+ if ( start && end ) {
176
+ 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
177
+ AND (pds.date AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date <= ($3 AT TIME ZONE 'Asia/Seoul' AT TIME ZONE 'UTC')::date` ;
178
+ values . push ( start , end ) ;
179
+ }
180
+
181
+ const result = await this . pool . query ( query , values ) ;
182
+ return result . rows ;
183
+ } catch ( error ) {
184
+ logger . error ( 'Post Repo findPostByPostId error : ' , error ) ;
185
+ throw new DBError ( '단건 post 조회 중 문제가 발생했습니다.' ) ;
186
+ }
187
+ }
168
188
}
0 commit comments