Skip to content

Commit df7ac3b

Browse files
authored
Merge pull request #111 from Solux-WebBeing/fix/imminent
๊บผ์ ธ๊บผ์ ธ!
2 parents 2642ff9 + 7f669f4 commit df7ac3b

File tree

1 file changed

+65
-52
lines changed

1 file changed

+65
-52
lines changed

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

Lines changed: 65 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,9 @@ async function enrichDataWithMySQL(results, currentUserId = null) {
215215
location: post.region ? `${post.region}${post.district ? ` > ${post.district}` : ""}` : "์˜จ๋ผ์ธ",
216216
region: post.region || "์˜จ๋ผ์ธ",
217217
district: post.district || "",
218-
dateDisplay: (post.start_date && post.end_date) ? `${format(post.start_date, post.is_start_time_set)} ~ ${format(post.end_date, post.is_end_time_set)}` : "์ƒ์‹œ ์ง„ํ–‰",
218+
ddateDisplay: (post.start_date && post.end_date)
219+
? `${formatForUI(post.start_date, post.is_start_time_set)} ~ ${formatForUI(post.end_date, post.is_end_time_set)}`
220+
: "์ƒ์‹œ ์ง„ํ–‰",
219221
start_date: post.start_date,
220222
end_date: post.end_date,
221223

@@ -252,17 +254,30 @@ const getSortParams = () => {
252254
* ์ •๋ ฌ ์Šคํฌ๋ฆฝํŠธ ํŒŒ๋ผ๋ฏธํ„ฐ ์ƒ์„ฑ ํ—ฌํผ
253255
* ์„œ๋ฒ„์˜ ๋กœ์ปฌ ํƒ€์ž„์กด ์„ค์ •์— ์ƒ๊ด€์—†์ด KST ๊ธฐ์ค€ ์˜ค๋Š˜ ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ์ ์„ UTC ์ˆซ์ž๋กœ ๊ณ„์‚ฐ
254256
*/
257+
// 1. UI์šฉ ๋‚ ์งœ ํฌ๋งท (000Z ์ œ๊ฑฐ ๋ฒ„์ „)
258+
const formatForUI = (dateStr, isTimeSet) => {
259+
if (!dateStr) return "";
260+
const d = new Date(dateStr);
261+
const pad = (n) => n.toString().padStart(2, '0');
262+
263+
const datePart = `${d.getFullYear()}. ${pad(d.getMonth() + 1)}. ${pad(d.getDate())}`;
264+
const timePart = isTimeSet ? ` ${pad(d.getHours())}:${pad(d.getMinutes())}` : '';
265+
266+
return `${datePart}${timePart}`;
267+
};
268+
269+
// 2. ์ •๋ ฌ ํŒŒ๋ผ๋ฏธํ„ฐ (KST ์˜ค์ฐจ ์—†๋Š” ์ ˆ๋Œ€ ์ˆซ์ž๊ฐ’)
255270
const getSortParams = () => {
256271
const now = new Date();
257272
const kstOffset = 9 * 60 * 60 * 1000;
258-
259-
// ํ•œ๊ตญ ์‹œ๊ฐ„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋Š˜ ๊ฒฝ๊ณ„๊ฐ’ ๊ณ„์‚ฐ
260273
const kstNow = new Date(now.getTime() + kstOffset);
274+
275+
// KST ๊ธฐ์ค€ ์˜ค๋Š˜ 00:00:00๊ณผ 23:59:59์˜ UTC ํƒ€์ž„์Šคํƒฌํ”„
261276
const dayStart = new Date(kstNow.getFullYear(), kstNow.getMonth(), kstNow.getDate(), 0, 0, 0, 0).getTime() - kstOffset;
262277
const dayEnd = new Date(kstNow.getFullYear(), kstNow.getMonth(), kstNow.getDate(), 23, 59, 59, 999).getTime() - kstOffset;
263278

264279
return {
265-
now: now.getTime(), // ํ˜„์žฌ ์‹œ๊ฐ ํƒ€์ž„์Šคํƒฌํ”„
280+
now: now.getTime(),
266281
dayStart: dayStart,
267282
dayEnd: dayEnd
268283
};
@@ -327,30 +342,29 @@ exports.searchPosts = async (req, res) => {
327342
query: esQuery.bool.must.length > 0 || esQuery.bool.filter.length > 0 ? esQuery : { match_all: {} },
328343
// searchPosts์™€ getAllPosts์˜ sort ๋ถ€๋ถ„์„ ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”.
329344
// searchPosts ๋ฐ getAllPosts์˜ sort ๋ถ€๋ถ„ ๊ณตํ†ต ์ˆ˜์ •
330-
sort: [
331-
{
332-
_script: {
333-
type: "number",
334-
script: {
335-
lang: "painless",
336-
source: `
337-
if (doc['end_date'].size() == 0) return 2; // ์ƒ์‹œ
338-
long end = doc['end_date'].value.toInstant().toEpochMilli();
339-
340-
// 1. ํ˜„์žฌ ์‹œ๊ฐ(now)์ด ๋งˆ๊ฐ ์‹œ๊ฐ„(end)์„ ์ง€๋‚ฌ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋งˆ๊ฐ ๊ทธ๋ฃน(3)์œผ๋กœ
341-
if (end < params.now) return 3;
342-
343-
// 2. ์•„์ง ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ค๋Š˜ ์ข…๋ฃŒ(0)์™€ ๋ฏธ๋ž˜ ์ข…๋ฃŒ(1) ๊ตฌ๋ถ„
344-
if (end >= params.dayStart && end <= params.dayEnd) return 0;
345-
return 1;
346-
`,
347-
params: getSortParams()
348-
},
349-
order: "asc"
350-
}
351-
},
352-
{ "created_at": { "order": "desc" } } // ๊ทธ๋ฃน ๋‚ด์—์„œ๋Š” ์ตœ์‹ ์ˆœ
353-
]
345+
sort: [
346+
{
347+
_script: {
348+
type: "number",
349+
script: {
350+
lang: "painless",
351+
source: `
352+
if (doc['end_date'].size() == 0) return 2; // ์ƒ์‹œ
353+
long end = doc['end_date'].value.toInstant().toEpochMilli();
354+
355+
// ํ˜„์žฌ ์‹œ๊ฐ(now)์ด ๋งˆ๊ฐ(end)๋ณด๋‹ค ํฌ๋ฉด ์ฆ‰์‹œ ๋งˆ๊ฐ ๊ทธ๋ฃน(3)์œผ๋กœ ์ด๋™
356+
if (end < params.now) return 3;
357+
358+
if (end >= params.dayStart && end <= params.dayEnd) return 0; // ์˜ค๋Š˜ ์ข…๋ฃŒ
359+
return 1; // ๋ฏธ๋ž˜ ์ข…๋ฃŒ
360+
`,
361+
params: getSortParams()
362+
},
363+
order: "asc"
364+
}
365+
},
366+
{ "created_at": { "order": "desc" } } // 2์ˆœ์œ„: ์ตœ์‹ ์ˆœ
367+
]
354368
});
355369

356370
const cardData = await enrichDataWithMySQL(response.hits.hits.map(hit => hit._source), req.user?.id);
@@ -377,30 +391,29 @@ exports.getAllPosts = async (req, res) => {
377391
query: { match_all: {} },
378392
// searchPosts์™€ getAllPosts์˜ sort ๋ถ€๋ถ„์„ ์•„๋ž˜ ๋‚ด์šฉ์œผ๋กœ ๊ต์ฒดํ•˜์„ธ์š”.
379393
// searchPosts ๋ฐ getAllPosts์˜ sort ๋ถ€๋ถ„ ๊ณตํ†ต ์ˆ˜์ •
380-
sort: [
381-
{
382-
_script: {
383-
type: "number",
384-
script: {
385-
lang: "painless",
386-
source: `
387-
if (doc['end_date'].size() == 0) return 2; // ์ƒ์‹œ
388-
long end = doc['end_date'].value.toInstant().toEpochMilli();
389-
390-
// 1. ํ˜„์žฌ ์‹œ๊ฐ(now)์ด ๋งˆ๊ฐ ์‹œ๊ฐ„(end)์„ ์ง€๋‚ฌ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋งˆ๊ฐ ๊ทธ๋ฃน(3)์œผ๋กœ
391-
if (end < params.now) return 3;
392-
393-
// 2. ์•„์ง ์ง€๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ค๋Š˜ ์ข…๋ฃŒ(0)์™€ ๋ฏธ๋ž˜ ์ข…๋ฃŒ(1) ๊ตฌ๋ถ„
394-
if (end >= params.dayStart && end <= params.dayEnd) return 0;
395-
return 1;
396-
`,
397-
params: getSortParams()
398-
},
399-
order: "asc"
400-
}
401-
},
402-
{ "created_at": { "order": "desc" } } // ๊ทธ๋ฃน ๋‚ด์—์„œ๋Š” ์ตœ์‹ ์ˆœ
403-
]
394+
sort: [
395+
{
396+
_script: {
397+
type: "number",
398+
script: {
399+
lang: "painless",
400+
source: `
401+
if (doc['end_date'].size() == 0) return 2; // ์ƒ์‹œ
402+
long end = doc['end_date'].value.toInstant().toEpochMilli();
403+
404+
// ํ˜„์žฌ ์‹œ๊ฐ(now)์ด ๋งˆ๊ฐ(end)๋ณด๋‹ค ํฌ๋ฉด ์ฆ‰์‹œ ๋งˆ๊ฐ ๊ทธ๋ฃน(3)์œผ๋กœ ์ด๋™
405+
if (end < params.now) return 3;
406+
407+
if (end >= params.dayStart && end <= params.dayEnd) return 0; // ์˜ค๋Š˜ ์ข…๋ฃŒ
408+
return 1; // ๋ฏธ๋ž˜ ์ข…๋ฃŒ
409+
`,
410+
params: getSortParams()
411+
},
412+
order: "asc"
413+
}
414+
},
415+
{ "created_at": { "order": "desc" } } // 2์ˆœ์œ„: ์ตœ์‹ ์ˆœ
416+
]
404417
});
405418

406419
const cardData = await enrichDataWithMySQL(response.hits.hits.map(hit => hit._source), req.user?.id);

0 commit comments

Comments
ย (0)