diff --git a/boot/office/src/main/java/com/clip/office/content/ContentController.java b/boot/office/src/main/java/com/clip/office/content/ContentController.java index 1212a2b4..5baf2e0c 100644 --- a/boot/office/src/main/java/com/clip/office/content/ContentController.java +++ b/boot/office/src/main/java/com/clip/office/content/ContentController.java @@ -1,14 +1,44 @@ package com.clip.office.content; +import java.util.List; + import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import com.clip.matching.entity.OneThingMatching; +import com.clip.matching.entity.RandomMatching; +import com.clip.office.matching.controller.dto.CreateOneThingMatchingDto; +import com.clip.office.matching.controller.dto.CreateRandomMatchingDto; +import com.clip.office.matching.service.OneThingMatchingService; +import com.clip.office.matching.service.RandomMatchingService; + +import lombok.RequiredArgsConstructor; + @Controller -@RequestMapping("/") +@RequestMapping("/office/admin/home") +@RequiredArgsConstructor public class ContentController { - public String home() { - return "index"; + private final OneThingMatchingService onethingMatchingService; + private final RandomMatchingService randomMatchingService; + + @GetMapping("/oneThingMatching") + public String oneThingMatchingList(Model model) { + List oneThingMatchingList = onethingMatchingService.findAllOneThingMatchings(); + model.addAttribute("oneThingMatchings", oneThingMatchingList); + model.addAttribute("createOneThingMatchingDto", new CreateOneThingMatchingDto()); + model.addAttribute("isOnething", true); + return "fragments/content :: #dynamicContent"; + } + + @GetMapping("/randomMatching") + public String randomMatchingList(Model model) { + List randomMatchingList = randomMatchingService.findAllRandomMatchings(); + model.addAttribute("randomMatchings", randomMatchingList); + model.addAttribute("createRandomMatchingDto", new CreateRandomMatchingDto()); + model.addAttribute("isOnething", false); + return "fragments/content :: #dynamicContent"; } } diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/OneThingMatchingController.java b/boot/office/src/main/java/com/clip/office/matching/controller/OneThingMatchingController.java new file mode 100644 index 00000000..9e0469ce --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/controller/OneThingMatchingController.java @@ -0,0 +1,72 @@ +package com.clip.office.matching.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; + +import com.clip.office.matching.controller.dto.CreateOneThingMatchingDto; +import com.clip.office.matching.controller.dto.UpdateOneThingMatchingDto; +import com.clip.office.matching.service.OneThingMatchingService; + +import lombok.RequiredArgsConstructor; + +@Controller +@RequiredArgsConstructor +@RequestMapping("/office/admin/home/oneThingMatching") +public class OneThingMatchingController { + + private final OneThingMatchingService oneThingMatchingService; + + @GetMapping("/create") + public String createOneThingMatching(Model model) { + model.addAttribute("createOneThingMatchingDto", new CreateOneThingMatchingDto()); + return "/office/admin/home"; + } + + @PostMapping("/create") + public String createOneThingMatching( + @ModelAttribute CreateOneThingMatchingDto createOneThingMatchingDto, + RedirectAttributes redirectAttributes + ) { + oneThingMatchingService.createOneThingMatching(createOneThingMatchingDto); + redirectAttributes.addFlashAttribute("successMessage", "원띵매칭이 성공적으로 생성되었습니다."); + return "redirect:/office/admin/home"; + } + + @GetMapping("/update/{oneThingMatchingId}") + public String updateOneThingMatchingForm( + @PathVariable(value = "oneThingMatchingId") Long oneThingMatchingId, + Model model + ){ + UpdateOneThingMatchingDto updateDto = oneThingMatchingService.getUpdateOneThingMatchingDto(oneThingMatchingId); + model.addAttribute("updateoneThingMatchingDto", updateDto); + model.addAttribute("oneThingMatchingId", oneThingMatchingId); + return "/office/admin/home/oneThingMatching/edit"; + } + + @PostMapping("/update/{oneThingMatchingId}") + public String updateoneThingMatching( + @PathVariable(value = "oneThingMatchingId") Long oneThingMatchingId, + @ModelAttribute UpdateOneThingMatchingDto updateOneThingMatchingDto, + RedirectAttributes redirectAttributes + ){ + oneThingMatchingService.updateOneThingMatching(oneThingMatchingId, updateOneThingMatchingDto); + redirectAttributes.addFlashAttribute("successMessage", "원띵매칭이 성공적으로 수정되었습니다."); + return "redirect:/office/admin/home"; + } + + @PostMapping("/delete/{oneThingMatchingId}") + public String deleteoneThingMatching( + @PathVariable(value = "oneThingMatchingId") Long oneThingMatchingId, + RedirectAttributes redirectAttributes + ){ + oneThingMatchingService.deleteOneThingMatching(oneThingMatchingId); + redirectAttributes.addFlashAttribute("successMessage", "원띵 매칭이 성공적으로 삭제되었습니다."); + return "redirect:/office/admin/home"; + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/RandomMatchingController.java b/boot/office/src/main/java/com/clip/office/matching/controller/RandomMatchingController.java index 0b822257..3ecbd613 100644 --- a/boot/office/src/main/java/com/clip/office/matching/controller/RandomMatchingController.java +++ b/boot/office/src/main/java/com/clip/office/matching/controller/RandomMatchingController.java @@ -4,36 +4,64 @@ import com.clip.office.matching.controller.dto.UpdateRandomMatchingDto; import com.clip.office.matching.service.RandomMatchingService; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.support.RedirectAttributes; -@RestController +@Controller @RequiredArgsConstructor -@RequestMapping("/office/matching") +@RequestMapping("/office/admin/home/randomMatching") public class RandomMatchingController { private final RandomMatchingService randomMatchingService; + + @GetMapping("/create") + public String createRandomMatchingForm(Model model) { + model.addAttribute("createRandomMatchingDto", new CreateRandomMatchingDto()); + return "redirect:/office/admin/home"; + } + @PostMapping("/create") - public ResponseEntity createRandomMatching( - @RequestBody CreateRandomMatchingDto createRandomMatchingDto - ) { - return ResponseEntity.ok(randomMatchingService.createRandomMatching(createRandomMatchingDto)); + public String createRandomMatching( + @ModelAttribute CreateRandomMatchingDto createRandomMatchingDto, + RedirectAttributes redirectAttributes + ){ + randomMatchingService.createRandomMatching(createRandomMatchingDto); + redirectAttributes.addFlashAttribute("successMessage", "랜덤 매칭이 성공적으로 생성되었습니다."); + return "redirect:/office/admin/home"; + } + + @GetMapping("/update/{randomMatchingId}") + public String updateRandomMatchingForm( + @PathVariable(value = "randomMatchingId") Long randomMatchingId, + Model model + ){ + UpdateRandomMatchingDto updateDto = randomMatchingService.getUpdateRandomMatchingDto(randomMatchingId); + model.addAttribute("updateRandomMatchingDto", updateDto); + model.addAttribute("randomMatchingId", randomMatchingId); + return "/office/admin/home/randomMatching/edit"; } - @PutMapping("/{randomMatchingId}") - public ResponseEntity updateRandomMatching( - @PathVariable Long randomMatchingId, - @RequestBody UpdateRandomMatchingDto updateRandomMatchingDto - ) { - return ResponseEntity.ok(randomMatchingService.updateRandomMatching(randomMatchingId ,updateRandomMatchingDto)); + @PostMapping("/update/{randomMatchingId}") + public String updateRandomMatching( + @PathVariable(value = "randomMatchingId") Long randomMatchingId, + @ModelAttribute UpdateRandomMatchingDto updateRandomMatchingDto, + RedirectAttributes redirectAttributes + ){ + randomMatchingService.updateRandomMatching(randomMatchingId, updateRandomMatchingDto); + redirectAttributes.addFlashAttribute("successMessage", "랜덤 매칭이 성공적으로 수정되었습니다."); + return "redirect:/office/admin/home"; } - @DeleteMapping("/{randomMatchingId}") - public ResponseEntity deleteRandomMatching( - @PathVariable Long randomMatchingId - ) { + @PostMapping("/delete/{randomMatchingId}") + public String deleteRandomMatching( + @PathVariable(value = "randomMatchingId") Long randomMatchingId, + RedirectAttributes redirectAttributes + ){ randomMatchingService.deleteRandomMatching(randomMatchingId); - return ResponseEntity.noContent().build(); + redirectAttributes.addFlashAttribute("successMessage", "랜덤 매칭이 성공적으로 삭제되었습니다."); + return "redirect:/office/admin/home"; } } diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateOneThingMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateOneThingMatchingDto.java new file mode 100644 index 00000000..b398e677 --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateOneThingMatchingDto.java @@ -0,0 +1,36 @@ +package com.clip.office.matching.controller.dto; + +import com.clip.matching.entity.OneThingDistrict; +import com.clip.matching.entity.OneThingKeyword; +import com.clip.matching.entity.OneThingPrice; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@NoArgsConstructor +public class CreateOneThingMatchingDto { + + private OneThingDistrict oneThingDistrict; + private OneThingKeyword oneThingKeyword; + private String location; + private String restaurantName; + private LocalDateTime meetingTime; + private OneThingPrice oneThingPrice; + + @Builder + public CreateOneThingMatchingDto(OneThingDistrict oneThingDistrict, OneThingKeyword oneThingKeyword, + String location, + String restaurantName, LocalDateTime meetingTime, OneThingPrice oneThingPrice) { + this.oneThingDistrict = oneThingDistrict; + this.oneThingKeyword = oneThingKeyword; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + this.oneThingPrice = oneThingPrice; + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateRandomMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateRandomMatchingDto.java index 4476ea81..3d09fc02 100644 --- a/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateRandomMatchingDto.java +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/CreateRandomMatchingDto.java @@ -4,10 +4,12 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import java.time.LocalDateTime; @Getter +@Setter @NoArgsConstructor public class CreateRandomMatchingDto { @@ -23,4 +25,4 @@ public CreateRandomMatchingDto(RandomDistrict randomDistrict,String location, St this.restaurantName = restaurantName; this.meetingTime = meetingTime; } -} \ No newline at end of file +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/OneThingMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/OneThingMatchingDto.java new file mode 100644 index 00000000..d29b6a23 --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/OneThingMatchingDto.java @@ -0,0 +1,33 @@ +package com.clip.office.matching.controller.dto; + +import com.clip.matching.entity.OneThingDistrict; +import com.clip.matching.entity.OneThingKeyword; +import com.clip.matching.entity.OneThingPrice; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Getter +@NoArgsConstructor +public class OneThingMatchingDto { + + private OneThingDistrict oneThingDistrict; + private OneThingKeyword oneThingKeyword; + private String location; + private String restaurantName; + private LocalDateTime meetingTime; + private OneThingPrice oneThingPrice; + + @Builder + public OneThingMatchingDto(OneThingDistrict oneThingDistrict, OneThingKeyword oneThingKeyword, String location, + String restaurantName, LocalDateTime meetingTime, OneThingPrice oneThingPrice) { + this.oneThingDistrict = oneThingDistrict; + this.oneThingKeyword = oneThingKeyword; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + this.oneThingPrice = oneThingPrice; + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/RandomMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/RandomMatchingDto.java new file mode 100644 index 00000000..9b0a4bc8 --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/RandomMatchingDto.java @@ -0,0 +1,26 @@ +package com.clip.office.matching.controller.dto; + +import com.clip.matching.entity.RandomDistrict; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Getter +@NoArgsConstructor +public class RandomMatchingDto { + + private RandomDistrict randomDistrict; + private String location; + private String restaurantName; + private LocalDateTime meetingTime; + + @Builder + public RandomMatchingDto(RandomDistrict randomDistrict, String location, String restaurantName, LocalDateTime meetingTime) { + this.randomDistrict = randomDistrict; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateOneThingMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateOneThingMatchingDto.java new file mode 100644 index 00000000..1844986c --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateOneThingMatchingDto.java @@ -0,0 +1,30 @@ +package com.clip.office.matching.controller.dto; + +import com.clip.matching.entity.OneThingDistrict; +import com.clip.matching.entity.OneThingPrice; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@NoArgsConstructor +public class UpdateOneThingMatchingDto { + private OneThingDistrict oneThingDistrict; + private String location; + private String restaurantName; + private LocalDateTime meetingTime; + private OneThingPrice oneThingPrice; + + @Builder + public UpdateOneThingMatchingDto(OneThingDistrict oneThingDistrict, String location, String restaurantName, LocalDateTime meetingTime, OneThingPrice oneThingPrice) { + this.oneThingDistrict = oneThingDistrict; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + this.oneThingPrice = oneThingPrice; + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateRandomMatchingDto.java b/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateRandomMatchingDto.java index ce49dd74..37a3c07f 100644 --- a/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateRandomMatchingDto.java +++ b/boot/office/src/main/java/com/clip/office/matching/controller/dto/UpdateRandomMatchingDto.java @@ -4,10 +4,12 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; import java.time.LocalDateTime; @Getter +@Setter @NoArgsConstructor public class UpdateRandomMatchingDto { @@ -23,4 +25,4 @@ public UpdateRandomMatchingDto(RandomDistrict randomDistrict,String location, St this.restaurantName = restaurantName; this.meetingTime = meetingTime; } -} \ No newline at end of file +} diff --git a/boot/office/src/main/java/com/clip/office/matching/service/OneThingMatchingService.java b/boot/office/src/main/java/com/clip/office/matching/service/OneThingMatchingService.java new file mode 100644 index 00000000..86560dba --- /dev/null +++ b/boot/office/src/main/java/com/clip/office/matching/service/OneThingMatchingService.java @@ -0,0 +1,72 @@ +package com.clip.office.matching.service; + +import java.util.List; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.clip.matching.entity.OneThingMatching; +import com.clip.matching.service.MatchingService; +import com.clip.matching.service.OneThingMatchingDataService; +import com.clip.office.matching.controller.dto.CreateOneThingMatchingDto; +import com.clip.office.matching.controller.dto.UpdateOneThingMatchingDto; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class OneThingMatchingService { + + private final OneThingMatchingDataService oneThingMatchingDataService; + private final MatchingService matchingService; + + @Transactional(readOnly = true) + public List findAllOneThingMatchings() { + return oneThingMatchingDataService.findAllOneThingMatchings(); + } + + @Transactional + public void createOneThingMatching(CreateOneThingMatchingDto createOneThingMatchingDto) { + + OneThingMatching oneThingMatching = OneThingMatching.builder() + .oneThingDistrict(createOneThingMatchingDto.getOneThingDistrict()) + .location(createOneThingMatchingDto.getLocation()) + .restaurantName(createOneThingMatchingDto.getRestaurantName()) + .meetingTime(createOneThingMatchingDto.getMeetingTime()) + .oneThingPrice(createOneThingMatchingDto.getOneThingPrice()) + .build(); + + oneThingMatchingDataService.save(oneThingMatching); + } + + @Transactional + public void updateOneThingMatching(Long oneThingMatchingId, UpdateOneThingMatchingDto updateOneThingMatchingDto) { + OneThingMatching oneThingMatching = matchingService.findOneThingMatching(oneThingMatchingId); + + oneThingMatching.update( + updateOneThingMatchingDto.getOneThingDistrict(), + updateOneThingMatchingDto.getLocation(), + updateOneThingMatchingDto.getRestaurantName(), + updateOneThingMatchingDto.getMeetingTime(), + updateOneThingMatchingDto.getOneThingPrice()); + + oneThingMatchingDataService.save(oneThingMatching); + } + + @Transactional(readOnly = true) + public UpdateOneThingMatchingDto getUpdateOneThingMatchingDto(Long oneThingMatchingId) { + OneThingMatching oneThingMatching = matchingService.findOneThingMatching(oneThingMatchingId); + + return UpdateOneThingMatchingDto.builder() + .oneThingDistrict(oneThingMatching.getOneThingDistrict()) + .location(oneThingMatching.getLocation()) + .restaurantName(oneThingMatching.getRestaurantName()) + .meetingTime(oneThingMatching.getMeetingTime()) + .oneThingPrice(oneThingMatching.getOneThingPrice()) + .build(); + } + + public void deleteOneThingMatching(Long oneThingMatchingId) { + oneThingMatchingDataService.delete(oneThingMatchingId); + } +} diff --git a/boot/office/src/main/java/com/clip/office/matching/service/RandomMatchingService.java b/boot/office/src/main/java/com/clip/office/matching/service/RandomMatchingService.java index e3ce8272..0b63983a 100644 --- a/boot/office/src/main/java/com/clip/office/matching/service/RandomMatchingService.java +++ b/boot/office/src/main/java/com/clip/office/matching/service/RandomMatchingService.java @@ -9,6 +9,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor public class RandomMatchingService { @@ -17,8 +19,13 @@ public class RandomMatchingService { private final MatchingService matchingService; + @Transactional(readOnly = true) + public List findAllRandomMatchings() { + return randomMatchingDataService.findAllRandomMatchings(); + } + @Transactional - public CreateRandomMatchingDto createRandomMatching(CreateRandomMatchingDto createRandomMatchingDto) { + public void createRandomMatching(CreateRandomMatchingDto createRandomMatchingDto) { RandomMatching randomMatching = RandomMatching.builder() .randomDistrict(createRandomMatchingDto.getRandomDistrict()) @@ -28,17 +35,10 @@ public CreateRandomMatchingDto createRandomMatching(CreateRandomMatchingDto crea .build(); randomMatchingDataService.save(randomMatching); - - return CreateRandomMatchingDto.builder() - .randomDistrict(randomMatching.getRandomDistrict()) - .location(createRandomMatchingDto.getLocation()) - .restaurantName(createRandomMatchingDto.getRestaurantName()) - .meetingTime(createRandomMatchingDto.getMeetingTime()) - .build(); } @Transactional - public UpdateRandomMatchingDto updateRandomMatching(Long randomMatchingId,UpdateRandomMatchingDto updateRandomMatchingDto) { + public void updateRandomMatching(Long randomMatchingId, UpdateRandomMatchingDto updateRandomMatchingDto) { RandomMatching randomMatching = matchingService.findRandomMatching(randomMatchingId); randomMatching.update( @@ -48,12 +48,17 @@ public UpdateRandomMatchingDto updateRandomMatching(Long randomMatchingId,Update updateRandomMatchingDto.getMeetingTime()); randomMatchingDataService.save(randomMatching); + } + + @Transactional(readOnly = true) + public UpdateRandomMatchingDto getUpdateRandomMatchingDto(Long randomMatchingId) { + RandomMatching randomMatching = matchingService.findRandomMatching(randomMatchingId); return UpdateRandomMatchingDto.builder() .randomDistrict(randomMatching.getRandomDistrict()) - .location(updateRandomMatchingDto.getLocation()) - .restaurantName(updateRandomMatchingDto.getRestaurantName()) - .meetingTime(updateRandomMatchingDto.getMeetingTime()) + .location(randomMatching.getLocation()) + .restaurantName(randomMatching.getRestaurantName()) + .meetingTime(randomMatching.getMeetingTime()) .build(); } diff --git a/boot/office/src/main/resources/static/js/matching.js b/boot/office/src/main/resources/static/js/matching.js deleted file mode 100644 index 07dc70a0..00000000 --- a/boot/office/src/main/resources/static/js/matching.js +++ /dev/null @@ -1,146 +0,0 @@ -document.addEventListener("DOMContentLoaded", function () { - const form = document.getElementById("matchingForm"); - const buttons = document.querySelectorAll("#tabButtons .btn"); - const tbody = document.getElementById("matchingTableBody"); - - const dummyData = { - "원띵모임": [ - {nickname: "승범", phone: "010-1111-1111",region: "강남", job: "개발자", status: "싱글", diet: "상관없음", lang: "영어", match: "BEFORE"}, - {nickname: "혜민", phone: "010-2222-2222", region: "홍대", job: "기획자", status: "연애중", diet: "채식", lang: "일본어", match: "DONE"} - ], - "랜덤모임": [ - {nickname: "영희", phone: "010-4444-4444", purpose: "랜덤", job: "디자이너", status: "기혼", diet: "채식", lang: "중국어", region: "성수", match: "DONE"} - ] - }; - - function renderTable(type) { - tbody.innerHTML = ""; - const data = dummyData[type] || []; - data.forEach((item, idx) => { - const row = ` - - ${idx + 1} - ${item.nickname} - ${item.phone} - ${item.region} - ${item.job} - ${item.status} - ${item.diet} - ${item.lang} - - - - `; - tbody.insertAdjacentHTML("beforeend", row); - }); - } - - function updateModal(type) { - const modalTitle = document.getElementById("createMatchingModalLabel"); - const formBody = document.querySelector("#matchingForm .modal-body"); - const createBtn = document.querySelector("[data-bs-target='#createMatchingModal']"); - - // 버튼 텍스트 변경 - if (type === "랜덤모임") { - createBtn.textContent = "랜덤 모임 생성"; - modalTitle.textContent = "랜덤 모임 생성"; - - formBody.innerHTML = ` -
- - -
-
- - -
-
- - -
-
- - -
- `; - } else { - createBtn.textContent = "모임 생성"; - modalTitle.textContent = "모임 생성"; - - formBody.innerHTML = ` -
- - -
-
- - -
-
- - -
- `; - } - } - - // 초기 상태 - const defaultType = "원띵모임"; - renderTable(defaultType); - updateModal(defaultType); - - // 탭 클릭 이벤트 - buttons.forEach(btn => { - btn.addEventListener("click", function () { - buttons.forEach(b => b.classList.remove("active")); - this.classList.add("active"); - const type = this.textContent.trim(); - renderTable(type); - updateModal(type); - }); - }); - - // 모임 생성 폼 전송 - if (form) { - form.addEventListener("submit", function (e) { - e.preventDefault(); - - // 폼 데이터 수집 (랜덤모임/일반모임 구분 가능) - const formData = new FormData(form); - const jsonData = {}; - formData.forEach((value, key) => { - jsonData[key] = value; - }); - - console.log("보내는 데이터:", jsonData); - - fetch("/office/matching/create", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - credentials: "include", - body: JSON.stringify(jsonData) - }) - .then(response => { - if (!response.ok) throw new Error("요청 실패"); - return response.json(); - }) - .then(result => { - alert("모임 생성 완료!"); - const modal = bootstrap.Modal.getInstance(document.getElementById("createMatchingModal")); - modal.hide(); - location.reload(); - }) - .catch(error => { - alert("에러 발생: " + error.message); - }); - }); - } -}); diff --git a/boot/office/src/main/resources/templates/fragments/content.html b/boot/office/src/main/resources/templates/fragments/content.html index 2f59bfdd..306217fe 100644 --- a/boot/office/src/main/resources/templates/fragments/content.html +++ b/boot/office/src/main/resources/templates/fragments/content.html @@ -1,86 +1,230 @@ -
- -
- - +
+
+
+ + +
+
-
- +
+ +
+ + + + + +
- -
- - +
+ +
+ - - - - - - - - - + + + + + + + + + + + + + + + + + + + + +
No닉네임전화번호지역날짜주제식단선호언어매칭No지역장소식당명모임 시간비고
+ +
+ +
+
등록된 원띵모임이 없습니다.
+ + + + + + + + + + + - + + + + + + + + + + + +
No지역장소식당명미팅 시간비고
+ +
+ +
+
등록된 랜덤 매칭이 없습니다.
- - - - diff --git a/boot/office/src/main/resources/templates/layout/home.html b/boot/office/src/main/resources/templates/layout/home.html index 74ef2540..45b6fc32 100644 --- a/boot/office/src/main/resources/templates/layout/home.html +++ b/boot/office/src/main/resources/templates/layout/home.html @@ -20,13 +20,99 @@
-
- +
+ + +
+
+ + + + + + + diff --git a/boot/office/src/test/java/com/clip/office/matching/service/RandomMatchingServiceTest.java b/boot/office/src/test/java/com/clip/office/matching/service/RandomMatchingServiceTest.java index dd3ab9f2..1444dc98 100644 --- a/boot/office/src/test/java/com/clip/office/matching/service/RandomMatchingServiceTest.java +++ b/boot/office/src/test/java/com/clip/office/matching/service/RandomMatchingServiceTest.java @@ -18,11 +18,12 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoBean; +import static org.assertj.core.api.Assertions.assertThat; import java.time.LocalDateTime; +import java.util.List; import java.util.Optional; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @ContextConfiguration(classes = OfficeApplication.class) @SpringBootTest @@ -75,39 +76,29 @@ void createRandomMatching() { .build(); // when - CreateRandomMatchingDto savedTestDto = randomMatchingService.createRandomMatching(createRandomMatchingDto); + randomMatchingService.createRandomMatching(createRandomMatchingDto); // then - Optional savedTestMatching = randomMatchingRepository.findAll().stream().findFirst(); - assertThat(savedTestMatching).isPresent(); - - RandomMatching randomMatching = savedTestMatching.get(); - assertThat(randomMatching.getId()).isNotNull(); - assertThat(randomMatching).extracting( - RandomMatching::getRandomDistrict, - RandomMatching::getLocation, - RandomMatching::getRestaurantName, - RandomMatching::getMeetingTime - ).containsExactly( - RandomDistrict.GANGNAM, - "서울특별시 강남구 강남대로 421", - "쉐이크쉑버거", - LocalDateTime.of(2025, 3, 20, 22, 45, 0) - ); - - assertThat(savedTestDto).extracting( - CreateRandomMatchingDto::getRandomDistrict, - CreateRandomMatchingDto::getLocation, - CreateRandomMatchingDto::getRestaurantName, - CreateRandomMatchingDto::getMeetingTime - ).containsExactly( - RandomDistrict.GANGNAM, - "서울특별시 강남구 강남대로 421", - "쉐이크쉑버거", - LocalDateTime.of(2025, 3, 20, 22, 45, 0) - ); + List all = randomMatchingRepository.findAll(); + assertThat(all).hasSize(1); // 저장된 데이터가 정확히 1개인지 확인 (createRandomMatchingDto와 동일한 데이터) + + RandomMatching saved = all.get(0); + assertThat(saved) + .extracting( + RandomMatching::getRandomDistrict, + RandomMatching::getLocation, + RandomMatching::getRestaurantName, + RandomMatching::getMeetingTime + ) + .containsExactly( + RandomDistrict.GANGNAM, + "서울특별시 강남구 강남대로 421", + "쉐이크쉑버거", + LocalDateTime.of(2025, 3, 20, 22, 45, 0) + ); } + @DisplayName("모임을 수정할 수 있다.") @Test void updateRandomMatching() { diff --git a/data/core-data/src/main/java/com/clip/matching/entity/OneThingDistrict.java b/data/core-data/src/main/java/com/clip/matching/entity/OneThingDistrict.java new file mode 100644 index 00000000..aef63786 --- /dev/null +++ b/data/core-data/src/main/java/com/clip/matching/entity/OneThingDistrict.java @@ -0,0 +1,14 @@ +package com.clip.matching.entity; + +public enum OneThingDistrict { + /* + figma 보고 임의로 넣었습니다 + */ + GANGNAM, + YOUNGSAN_ITAEWON, + GUNDAE_SEONGSU, + MOONREA_YEONGDEUNGPO, + SADANG, + MAGOK, + HONGDAE_HAPJEONG, +} diff --git a/data/core-data/src/main/java/com/clip/matching/entity/OneThingKeyword.java b/data/core-data/src/main/java/com/clip/matching/entity/OneThingKeyword.java new file mode 100644 index 00000000..3c6ee2aa --- /dev/null +++ b/data/core-data/src/main/java/com/clip/matching/entity/OneThingKeyword.java @@ -0,0 +1,29 @@ +package com.clip.matching.entity; + +public enum OneThingKeyword { + /* + OneThing 의 키워드를 (figma 보고 임의로 넣었습니다)적어주세요 + */ + BEAUTY, + JOB, + POLITICS, + TRAVEL, + BOOK, + MOVIE, + MUSIC, + FOOD, + FASHION, + ART, + PET, + SPORTS, + GAME, + HOBBY, + STUDY, + COIN, + PICTURE, + VOLUNTEER_WORK, + PROPERTY, + RELATIONSHIP, + GRAD_SCHOOL, +} + diff --git a/data/core-data/src/main/java/com/clip/matching/entity/OneThingMatching.java b/data/core-data/src/main/java/com/clip/matching/entity/OneThingMatching.java index d01f49f8..11d9394f 100644 --- a/data/core-data/src/main/java/com/clip/matching/entity/OneThingMatching.java +++ b/data/core-data/src/main/java/com/clip/matching/entity/OneThingMatching.java @@ -1,12 +1,19 @@ package com.clip.matching.entity; +import java.time.LocalDateTime; + import com.clip.common.entity.BaseEntity; -import jakarta.persistence.*; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; -import org.springframework.format.annotation.DateTimeFormat; - -import java.time.LocalDateTime; @Getter @Entity @@ -22,9 +29,42 @@ public class OneThingMatching extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column + @Enumerated(EnumType.STRING) + private OneThingDistrict oneThingDistrict; + + @Column + @Enumerated(EnumType.STRING) + private OneThingKeyword oneThingKeyword; + @Column private String location; + @Column + private String restaurantName; + @Column private LocalDateTime meetingTime; + + @Column + @Enumerated(EnumType.STRING) + private OneThingPrice oneThingPrice; + + @Builder + public OneThingMatching(OneThingDistrict oneThingDistrict, OneThingKeyword oneThingKeyword, String location, String restaurantName, LocalDateTime meetingTime, OneThingPrice oneThingPrice) { + this.oneThingDistrict = oneThingDistrict; + this.oneThingKeyword = oneThingKeyword; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + this.oneThingPrice = oneThingPrice; + } + + public void update(OneThingDistrict oneThingDistrict, String location, String restaurantName, LocalDateTime meetingTime, OneThingPrice oneThingPrice) { + this.oneThingDistrict = oneThingDistrict; + this.location = location; + this.restaurantName = restaurantName; + this.meetingTime = meetingTime; + this.oneThingPrice = oneThingPrice; + } } diff --git a/data/core-data/src/main/java/com/clip/matching/entity/OneThingPrice.java b/data/core-data/src/main/java/com/clip/matching/entity/OneThingPrice.java new file mode 100644 index 00000000..e5bd8c09 --- /dev/null +++ b/data/core-data/src/main/java/com/clip/matching/entity/OneThingPrice.java @@ -0,0 +1,7 @@ +package com.clip.matching.entity; + +public enum OneThingPrice { + LOW, + MEDIUM, + HIGH, +} diff --git a/data/core-data/src/main/java/com/clip/matching/entity/UserOneThingMatching.java b/data/core-data/src/main/java/com/clip/matching/entity/UserOneThingMatching.java index 9ec1dad3..f62d0ca3 100644 --- a/data/core-data/src/main/java/com/clip/matching/entity/UserOneThingMatching.java +++ b/data/core-data/src/main/java/com/clip/matching/entity/UserOneThingMatching.java @@ -28,4 +28,7 @@ public class UserOneThingMatching extends BaseEntity { @JoinColumn(name = "onething_matching_id") private OneThingMatching oneThingMatching; + @Column + private String MyOneThingContent; + } diff --git a/data/core-data/src/main/java/com/clip/matching/repository/OneThingMatchingRepository.java b/data/core-data/src/main/java/com/clip/matching/repository/OneThingMatchingRepository.java index b88c8aa2..68de1647 100644 --- a/data/core-data/src/main/java/com/clip/matching/repository/OneThingMatchingRepository.java +++ b/data/core-data/src/main/java/com/clip/matching/repository/OneThingMatchingRepository.java @@ -2,6 +2,14 @@ import com.clip.matching.entity.OneThingMatching; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import org.springframework.transaction.annotation.Transactional; public interface OneThingMatchingRepository extends JpaRepository { + @Transactional + @Modifying(clearAutomatically = true, flushAutomatically = true) + @Query("DELETE FROM OneThingMatching rm WHERE rm.id = :oneThingMatchingId") + void deleteOneThingMatching(@Param("oneThingMatchingId")Long oneThingMatchingId); } diff --git a/data/core-data/src/main/java/com/clip/matching/service/OneThingMatchingDataService.java b/data/core-data/src/main/java/com/clip/matching/service/OneThingMatchingDataService.java new file mode 100644 index 00000000..bf73e89a --- /dev/null +++ b/data/core-data/src/main/java/com/clip/matching/service/OneThingMatchingDataService.java @@ -0,0 +1,26 @@ +package com.clip.matching.service; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.clip.matching.entity.OneThingMatching; +import com.clip.matching.repository.OneThingMatchingRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class OneThingMatchingDataService { + + private final OneThingMatchingRepository oneThingMatchingRepository; + + public OneThingMatching save(OneThingMatching oneThingMatching) { + return oneThingMatchingRepository.save(oneThingMatching); + } + + public List findAllOneThingMatchings() {return oneThingMatchingRepository.findAll();} + public void delete(Long oneThingMatchingId) { + oneThingMatchingRepository.deleteOneThingMatching(oneThingMatchingId); + } +} diff --git a/data/core-data/src/main/java/com/clip/matching/service/RandomMatchingDataService.java b/data/core-data/src/main/java/com/clip/matching/service/RandomMatchingDataService.java index 6171cee4..e78f423f 100644 --- a/data/core-data/src/main/java/com/clip/matching/service/RandomMatchingDataService.java +++ b/data/core-data/src/main/java/com/clip/matching/service/RandomMatchingDataService.java @@ -5,6 +5,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + @Service @RequiredArgsConstructor public class RandomMatchingDataService { @@ -15,6 +17,8 @@ public RandomMatching save(RandomMatching randomMatching) { return randomMatchingRepository.save(randomMatching); } + public List findAllRandomMatchings() {return randomMatchingRepository.findAll();} + public void delete(Long randomMatchingId) { randomMatchingRepository.deleteRandomMatching(randomMatchingId); }