@@ -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 ์ค์ฐจ ์๋ ์ ๋ ์ซ์๊ฐ)
255270const 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