Skip to content

Commit abbabd9

Browse files
authored
Merge pull request #108 from Solux-WebBeing/fix/imminent
fix: ES date formating update:
2 parents ad2b9f3 + 3b188d2 commit abbabd9

File tree

1 file changed

+56
-23
lines changed

1 file changed

+56
-23
lines changed

โ€Žbackend/src/controllers/search.controller.jsโ€Ž

Lines changed: 56 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const { Client } = require('@elastic/elasticsearch');
22
const esClient = new Client({ node: process.env.ELASTICSEARCH_NODE || 'http://elasticsearch:9200' });
33
const pool = require('../../db');
44

5+
6+
57
// [Helper] ๋‚ ์งœ ํฌ๋งท ๋ณ€ํ™˜ (yyyy-MM-dd HH:mm:ss)
68
const toEsDate = (dateStr) => {
79
if (!dateStr) return null;
@@ -229,13 +231,32 @@ async function enrichDataWithMySQL(results, currentUserId = null) {
229231
/**
230232
* ์ •๋ ฌ ์Šคํฌ๋ฆฝํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ์„ฑ ํ—ฌํผ
231233
*/
234+
/*
232235
const getSortParams = () => {
233236
const now = new Date();
234237
return {
235238
now: now.getTime(),
236239
dayStart: new Date(now.setHours(0, 0, 0, 0)).getTime(),
237240
dayEnd: new Date(now.setHours(23, 59, 59, 999)).getTime()
238241
};
242+
};*/
243+
244+
const getSortParams = () => {
245+
const now = new Date();
246+
// ํ•œ๊ตญ ์‹œ๊ฐ„์€ UTC๋ณด๋‹ค 9์‹œ๊ฐ„ ๋น ๋ฆ„
247+
const kstOffset = 9 * 60 * 60 * 1000;
248+
249+
// 1. ํ˜„์žฌ ์‹œ๊ฐ„์„ KST ๊ธฐ์ค€์œผ๋กœ ๋ณ€ํ™˜
250+
const kstNow = new Date(now.getTime() + kstOffset);
251+
252+
// 2. KST ๊ธฐ์ค€ ์˜ค๋Š˜ 00:00:00๊ณผ 23:59:59์˜ ์‹œ์ ์„ UTC ์ˆซ์ž๋กœ ๊ณ„์‚ฐ
253+
const dayStart = new Date(kstNow.getFullYear(), kstNow.getMonth(), kstNow.getDate(), 0, 0, 0, 0).getTime() - kstOffset;
254+
const dayEnd = new Date(kstNow.getFullYear(), kstNow.getMonth(), kstNow.getDate(), 23, 59, 59, 999).getTime() - kstOffset;
255+
256+
return {
257+
dayStart: dayStart,
258+
dayEnd: dayEnd
259+
};
239260
};
240261

241262
/**
@@ -295,26 +316,32 @@ exports.searchPosts = async (req, res) => {
295316
index: 'boards',
296317
from, size,
297318
query: esQuery.bool.must.length > 0 || esQuery.bool.filter.length > 0 ? esQuery : { match_all: {} },
298-
sort: [
299-
{
300-
_script: {
301-
type: "number",
302-
script: {
303-
lang: "painless",
304-
source: `
305-
if (doc['end_date'].size() == 0) return 2;
306-
long end = doc['end_date'].value.toInstant().toEpochMilli();
307-
if (end >= params.dayStart && end <= params.dayEnd) return 0; // ์˜ค๋Š˜ ์ข…๋ฃŒ
308-
if (end > params.dayEnd) return 1; // ๋ฏธ๋ž˜ ์ข…๋ฃŒ
309-
return 3; // ๋งˆ๊ฐ๋จ
310-
`,
311-
params: getSortParams()
312-
},
313-
order: "asc"
314-
}
315-
},
316-
{ "created_at": { "order": "desc" } } // ๊ทธ ์™ธ ์ตœ์‹ ์ˆœ
317-
]
319+
// searchPosts์™€ getAllPosts์˜ sort ๋ถ€๋ถ„์„ ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”.
320+
sort: [
321+
{
322+
_script: {
323+
type: "number",
324+
script: {
325+
lang: "painless",
326+
source: `
327+
// 1. ๋งˆ๊ฐ์ผ ์—†์œผ๋ฉด ์ƒ์‹œ(2)
328+
if (doc['end_date'].size() == 0) return 2;
329+
330+
// 2. ์ €์žฅ๋œ ๋งˆ๊ฐ ์‹œ๊ฐ„์„ ์ ˆ๋Œ€์ ์ธ ์ˆซ์ž(๋ฐ€๋ฆฌ์ดˆ)๋กœ ์ถ”์ถœ
331+
long end = doc['end_date'].value.toInstant().toEpochMilli();
332+
333+
// 3. ์ˆซ์ž๋กœ ์ง์ ‘ ๋น„๊ต (ํƒ€์ž„์กด ์„ค์ • ๋ฌด๊ด€ํ•˜๊ฒŒ ์ •ํ™•ํ•จ)
334+
if (end >= params.dayStart && end <= params.dayEnd) return 0; // ์˜ค๋Š˜ ์ข…๋ฃŒ
335+
if (end > params.dayEnd) return 1; // ๋ฏธ๋ž˜ ์ข…๋ฃŒ
336+
return 3; // ๊ณผ๊ฑฐ ์ข…๋ฃŒ (๋งˆ๊ฐ๋จ)
337+
`,
338+
params: getSortParams()
339+
},
340+
order: "asc"
341+
}
342+
},
343+
{ "created_at": { "order": "desc" } }
344+
]
318345
});
319346

320347
const cardData = await enrichDataWithMySQL(response.hits.hits.map(hit => hit._source), req.user?.id);
@@ -339,18 +366,24 @@ exports.getAllPosts = async (req, res) => {
339366
index: 'boards',
340367
from, size,
341368
query: { match_all: {} },
369+
// searchPosts์™€ getAllPosts์˜ sort ๋ถ€๋ถ„์„ ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”.
342370
sort: [
343371
{
344372
_script: {
345373
type: "number",
346374
script: {
347375
lang: "painless",
348376
source: `
377+
// 1. ๋งˆ๊ฐ์ผ ์—†์œผ๋ฉด ์ƒ์‹œ(2)
349378
if (doc['end_date'].size() == 0) return 2;
379+
380+
// 2. ์ €์žฅ๋œ ๋งˆ๊ฐ ์‹œ๊ฐ„์„ ์ ˆ๋Œ€์ ์ธ ์ˆซ์ž(๋ฐ€๋ฆฌ์ดˆ)๋กœ ์ถ”์ถœ
350381
long end = doc['end_date'].value.toInstant().toEpochMilli();
351-
if (end >= params.dayStart && end <= params.dayEnd) return 0;
352-
if (end > params.dayEnd) return 1;
353-
return 3;
382+
383+
// 3. ์ˆซ์ž๋กœ ์ง์ ‘ ๋น„๊ต (ํƒ€์ž„์กด ์„ค์ • ๋ฌด๊ด€ํ•˜๊ฒŒ ์ •ํ™•ํ•จ)
384+
if (end >= params.dayStart && end <= params.dayEnd) return 0; // ์˜ค๋Š˜ ์ข…๋ฃŒ
385+
if (end > params.dayEnd) return 1; // ๋ฏธ๋ž˜ ์ข…๋ฃŒ
386+
return 3; // ๊ณผ๊ฑฐ ์ข…๋ฃŒ (๋งˆ๊ฐ๋จ)
354387
`,
355388
params: getSortParams()
356389
},

0 commit comments

Comments
ย (0)