MapleStory Finger Point

๐Ÿ”˜ ํ”„๋กœ์ ํŠธ

[Project] ๋‚ ์งœ ๋ณ„ ์˜ˆ์•ฝ ๊ฑด์ˆ˜(Slot) ๊ด€๋ฆฌ (React Calendar)

HYEJU01 2025. 2. 7. 09:14
 

๋ชฉ์ฐจ

 

     


    1) ํŽ˜์ด์ง€ ๊ตฌ์ƒ

     

     

    1. ์ƒํ’ˆ๋ณ„ ->  ๋‚ ์งœ๋ณ„ ->  ์‹œ๊ฐ„๋ณ„ ->  ์˜ˆ์•ฝ ๊ฑด์ˆ˜(Slot)๋ฅผ ์ œํ•œํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค. (๋งˆ์น˜ ๋„ค์ด๋ฒ„ ์˜ˆ์•ฝ์ฒ˜๋Ÿผ!)
    (๋ณดํ†ต ์ฃผ๋ฌธ์ œ์ž‘ ์ผ€์ดํฌ, ๊ฝƒ์ง‘์€ ๋ฐฉ๋ฌธ ๋‚ ์งœ์™€ ์‹œ๊ฐ„๋„ ๋ฏธ๋ฆฌ ์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ ์‹ถ์—ˆ๋‹ค.)

    ๋‹ค๋ฅธ ์˜ˆ์•ฝ ํ”Œ๋žซํผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”์ง€ ์„ธ๋ถ€์ ์ธ ๋กœ์ง์€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ,
    ์ด ๊ฒฝ์šฐ ๋‚ ์งœ, ์‹œ๊ฐ„ ์ „๋ถ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๊ธฐ๋•Œ๋ฌธ์— ๋‚ ์งœ + ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ณ„ ์Šฌ๋กฏ๋“ค์„ ์ „๋ถ€ ๊ด€๋ฆฌํ•ด์•ผํ–ˆ๋‹ค. 
    ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๊ฒŒ ํœด๋ฌด์ผ์ด ๋ฐ”๋€Œ๋‹ค๋˜๊ฐ€ (์ง€์ •ํœด๋ฌด์™€ ๊ณ ์ •ํœด๋ฌด ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์„ ๊ตฌํ˜„ํ—€๋‹ค.)
    ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค๋„ ์Šฌ๋กฏ์— ์˜ํ–ฅ์„ ์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์ˆ˜์ •์ด๋‚˜ ์ด๋ž˜์ €๋ž˜ ๋„ˆ๋ฌด ๊ทœ๋ชจ๊ฐ€ ์ปค์ ธ์„œ ๊ฒฐ๊ตญ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค.


    2. (ํ™•์ •) ๋‚ ์งœ๋ณ„๋กœ ๋ฐ›์„ ์˜ˆ์•ฝ ๊ฑด์ˆ˜๋ฅผ ์ง€์ •ํ•˜์ž. โญ
    ๋Œ€์‹  ์‹œ๊ฐ„๋Œ€๋Š” ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค.. → ์ด ๊ฒฝ์šฐ ๋‚ ์งœ๋ณ„๋กœ ๊ตฌ๋ถ„ํ•ด๋„  ํŠน์ • ์‹œ๊ฐ„์— ์˜ˆ์•ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•  ์ˆ˜๊ฐ€ ์—†์ง€๋งŒ ์–ด์ฉ” ์ˆ˜ ์—†์Œ. (์ฆ‰, ํŠน์ • ์‹œ๊ฐ„๋Œ€๋ฅผ ๋ง‰์„ ์ˆ˜๋Š” ์—†๋‹ค..)

    ๊ฒฐ๋ก ์ ์œผ๋กœ, ๋‚ ์งœ๋ณ„๋กœ ์˜ˆ์•ฝ ๊ฑด์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ 
    (์„ ํƒํ•œ ๋‚ ์งœ์— ์ด๋ฏธ ๋“ค์–ด์˜จ ์˜ˆ์•ฝ๊ฑด == ์ง€์ •๋œ ์Šฌ๋กฏ ๊ฑด์ˆ˜) ์„ ๋น„๊ตํ•ด์„œ ์˜ˆ์•ฝ์ด ๊ฝ‰์ฐฌ ๋‚ ์งœ๋ฅผ disabled ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •ํ–ˆ๋‹ค.

     

     

     

     

    < ์˜ˆ์•ฝ ๊ฑด์ˆ˜ ๊ด€๋ฆฌ ํŽ˜์ด์ง€ >

     

     

     

     

     

     

    `๊ธฐ๊ฐ„๋ณ„` ๋˜๋Š” `์ผ๋ณ„`๋กœ ์˜ˆ์•ฝ ๊ฑด์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ฒŒ๋˜๋ฉด (ํ˜น์€ `์˜ˆ์•ฝ๋ง‰๊ธฐ` ๋ฒ„ํŠผ ๋”๋ธ”ํด๋ฆญ์œผ๋กœ ๋ฐ”๋กœ ๋ง‰๊ธฐ ๊ฐ€๋Šฅ)

     

     

     

     

     

    ์ด๋Ÿฐ์‹์œผ๋กœ ์ผ๋ณ„ ์˜ˆ์•ฝ slot ์ด ์ง€์ •๋œ ๊ฐœ์ˆ˜๋กœ ๋ณ€๊ฒฝ๋จ.

     

     

     

     


     

     

    (ํ˜„์žฌ ์˜ˆ์•ฝ๊ฑด์ˆ˜ / ์˜ˆ์•ฝ ๊ฐ€๋Šฅ๊ฑด์ˆ˜(slot)) ์ด (2/2) ๋กœ ์ฆ‰, ๊ฝ‰ ์ฐผ๊ธฐ๋•Œ๋ฌธ์—

    ์‚ฌ์šฉ์ž ํŽ˜์ด์ง€์—์„œ๋Š” ์˜ˆ์•ฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋‚ ์งœ๊ฐ€ Disabled ์ฒ˜๋ฆฌ๋œ๋‹ค.

     

     

     

    ๊ฒฐ๊ตญ ๋ฐฉ๋ฒ•์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ๋˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ์€ ์ค„์–ด๋“ค๊ฒŒ๋˜์—ˆ๋‹ค... ์ด ์ค‘ ๋ช‡๊ฐœ๋Š” ์•ˆ์“ฐ๋Š” ์ปฌ๋Ÿผ๋“ค..

     

     

     

     

     


    2) ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„

     

     

     

    โœ…์Šฌ๋กฏ์€ ์ƒํ’ˆ ์ถ”๊ฐ€์‹œ insert ๋จ & ์Šฌ๋กฏ ์ƒํƒœ๋Š” ์ฃผ๋ฌธ ๋“ฑ๋ก์‹œ +1

    @Override
    public void setSlotAll(adminReserveAdd dto) {
    
        LocalDate startDate = LocalDate.now();
        LocalDate endDate = LocalDate.of(2029, 12, 31);
    
        while (!startDate.isAfter(endDate)) {
          System.out.println(startDate);
          dto.setReservationSlotDate(startDate);
          adminReservationMapper.setSlotAll(dto);
          startDate = startDate.plusDays(1);
        }
    }

     

    ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋‚ ์งœ ์Šฌ๋กฏ์ด `now()`  ~  `2029.12.31` ๊นŒ์ง€ insert ๋œ๋‹ค.

     

     

     

     <update id="updateSlotStatus">
            UPDATE reservation_slot
            SET slot_status_count = slot_status_count + 1
            WHERE category_id = #{categoryId}
            AND reservation_slot_date = #{reservationDate}
            AND store_no = #{storeNo}
        </update>

     

     

    ์ฃผ๋ฌธ์ด ๋“ค์–ด๊ฐ€๋ฉด ์Šฌ๋กฏ ์ƒํƒœ `slot_status_count` + 1 ์นด์šดํŒ…

     

     

     

     

    โœ… ์ง€์ •๋œ ์Šฌ๋กฏ ๊ฑด์ˆ˜ & ์˜ˆ์•ฝ๊ฑด ๋น„๊ต

     

     

     

      <select id="getDateTime2" resultType="com.example.HiMade.user.dto.UserRSlotDTO">
            select * from reservation_slot where
            category_id = #{categoryId}
        </select>

     

    ํ•ด๋‹น ์ƒํ’ˆ์— ๋Œ€ํ•œ ์Šฌ๋กฏ ์ •๋ณด๋ฅผ ์ „๋ถ€ ๊ฐ€์ ธ์˜ด

    (๋‹ฌ๋ ฅ์— ๋ฟŒ๋ ค์•ผํ•ด์„œ ์–ด์ฉ”์ˆ˜์—†์ด ์ „๋ถ€ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋‹ค.. )

     

     

     

    `slot_count` ๋ž‘ `slot_status_count` ๋ฅผ ๋น„๊ต

     

     

     

     

     

     

     

     

    โœ… ์˜ˆ์•ฝ ๊ฐ€๋Šฅ ์‹œ๊ฐ„ ๋Œ€ ์ถœ๋ ฅ

     

     

     

    ์‹œ๊ฐ„ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๊ฒŒ ์˜์—…์‹œ๊ฐ„์— ๋งž๊ฒŒ ์„ธํŒ…๋˜๋„๋ก ํ–ˆ๋‹ค.

    ex) 11์‹œ๋ถ€ํ„ฐ `30๋ถ„ ๊ฐ„๊ฒฉ`์œผ๋กœ ์ถœ๋ ฅํ•ด๋‘๊ฒŒํ•จ.

     

     

     

     


    โœ… ์˜ˆ์•ฝ ๊ฐ€๋Šฅ์ผ์€ ์˜ค๋Š˜๋กœ๋ถ€ํ„ฐ 3๊ฐœ์›” ๋’ค ๊นŒ์ง€ ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ง€์ •

      // ๋‚ ์งœ ๋น„ํ™œ์„ฑํ™” 
      const  tileDisabled = ({ date }) => {
      
        const today = new Date();
        const threeMonthsLater = new Date();
        threeMonthsLater.setMonth(today.getMonth() + 3);
        
        return date < today || date > threeMonthsLater;
      };

     

     

     

     โœ… ์˜ˆ์•ฝ ๊ฑด์ˆ˜ ์ˆ˜์ • 

     

        <update id="updateSlotCount1" parameterType="com.example.HiMade.user.dto.UserRSlotDTO">
            update reservation_slot
            set slot_count = #{slotCount}
            where reservation_slot_date = #{reservationSlotDate} and  category_id = #{categoryId}
        </update>

     

     


    3) ํ›„๊ธฐ

     

    โœ… ์˜ˆ์•ฝ ๋‚ ์งœ๋ณ„ ์Šฌ๋กฏ ๊ด€๋ฆฌ ๊ตฌํ˜„ ๋ฐฉ์‹ ๋” ์•Œ์•„๋ณด๊ธฐ  (๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€๋„ ๋ชจ๋ฅธ๋‹ค)