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) ํ›„๊ธฐ

 

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