diff --git a/src/main/java/org/example/qpin/domain/parking/entity/Parking.java b/src/main/java/org/example/qpin/domain/parking/entity/Parking.java index c6fd300..ac51005 100644 --- a/src/main/java/org/example/qpin/domain/parking/entity/Parking.java +++ b/src/main/java/org/example/qpin/domain/parking/entity/Parking.java @@ -1,10 +1,8 @@ package org.example.qpin.domain.parking.entity; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import lombok.*; +import org.example.qpin.domain.member.entity.Member; import org.example.qpin.global.common.BaseEntity; @Entity @@ -19,4 +17,11 @@ public class Parking extends BaseEntity { private Long parkingAreaId; private String type; + + @Column(name = "is_parking") + private boolean isParking; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "member_id") + private Member member; } \ No newline at end of file diff --git a/src/main/java/org/example/qpin/domain/parking/service/ParkingService.java b/src/main/java/org/example/qpin/domain/parking/service/ParkingService.java index ca3b134..12c80b9 100644 --- a/src/main/java/org/example/qpin/domain/parking/service/ParkingService.java +++ b/src/main/java/org/example/qpin/domain/parking/service/ParkingService.java @@ -185,7 +185,7 @@ public Long deleteParking(Long memberId, Long parkingAreaId) { Member member = findMemberById(memberId); // 주차 정보가 존재하는지 확인 - Parking parkingToDelete = parkingRepository.findParkingByParkingAreaIdAndMember(parkingAreaId, memberId) + Parking parkingToDelete = parkingRepository.findParkingByParkingAreaIdAndMember_MemberId(parkingAreaId, memberId) .orElseThrow(() -> new BadRequestException(ExceptionCode.NOT_FOUND_PARKING)); // 주차 삭제 @@ -209,7 +209,7 @@ public ParkingInfoResDto getParkingInfo(Long memberId) { } // 멤버가 주차 중인 주차장 정보를 가져옴 - Parking parking = parkingRepository.findParkingByMemberIdAndIsParkingTrue(memberId) + Parking parking = parkingRepository.findByMember_MemberIdAndIsParkingTrue(memberId) .orElseThrow(() -> new BadRequestException(ExceptionCode.NOT_FOUND_PARKING)); // 주차 시작 시간 및 기타 정보를 가져옴 diff --git a/src/main/java/org/example/qpin/domain/qr/controller/QrController.java b/src/main/java/org/example/qpin/domain/qr/controller/QrController.java index e91975e..0a4a201 100644 --- a/src/main/java/org/example/qpin/domain/qr/controller/QrController.java +++ b/src/main/java/org/example/qpin/domain/qr/controller/QrController.java @@ -21,36 +21,28 @@ @RestController @RequiredArgsConstructor public class QrController { - private final SafePhoneNumberService safePhoneNumberService; private final QrService qrService; @PostMapping("/qr/create") @Operation(summary = "QR코드 생성", description = "QR코드 생성") ResponseEntity createQr(@RequestBody CreateQrRequestDto request) throws WriterException, IOException { - - SafePhoneNumber safePhoneNumber = safePhoneNumberService.findByPhoneNum(request.getPhoneNum()); - Qr qr = qrService.createQr(safePhoneNumber,request); - +// SafePhoneNumber safePhoneNumber = safePhoneNumberService.findByPhoneNum(request.getPhoneNum()); + qrService.createQr(request); return ResponseEntity.status(HttpStatus.OK).body("QR 생성 완료"); } @GetMapping("/qr/{qrId}") @Operation(summary = "QR코드를 핸드폰으로 찍었을때", description = "QR코드를 실제로 핸드폰으로 찍었을 때 연결되는 웹페이지") ResponseEntitycaptureQrcode(@PathVariable("qrId") Long qrId){ - Qr qr = qrService.findById(qrId); - QrResponseDto response = new QrResponseDto(qr.getSafePhoneNumber().getSafePhoneNumber(),qr.getMemo()); - return ResponseEntity.status(HttpStatus.OK).body(response); - } @GetMapping("/qr/select/{qrId}") @Operation(summary = "QR코드 단건 조회", description = "QR코드 단건 조회") ResponseEntity checkQr(@PathVariable("qrId")Long qrId){ - CheckQrDto response = qrService.toCheckQrDto(qrId); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -58,7 +50,6 @@ ResponseEntity checkQr(@PathVariable("qrId")Long qrId){ @GetMapping("/qr/selectList/{memberId}") @Operation(summary = "QR코드 리스트 조회", description = "멤버의 모든 QR코드 조회") ResponseEntity> checkQrList(@PathVariable("memberId")Long memberId){ - List response = qrService.toCheckQrDtoList(memberId); return ResponseEntity.status(HttpStatus.OK).body(response); } @@ -66,20 +57,21 @@ ResponseEntity> checkQrList(@PathVariable("memberId")Long membe @DeleteMapping("/qr/remove/{qrId}") @Operation(summary = "QR코드 삭제", description = "QR코드 삭제") ResponseEntity removeQr(@PathVariable("qrId") Long qrId){ - qrService.removeQr(qrId); return ResponseEntity.status(HttpStatus.OK).body("QR코드 삭제 완료"); } - + + @DeleteMapping("/qr/remove") + @Operation(summary = "QR코드 일괄 삭제", description = "QR코드 여러 개를 삭제") + ResponseEntity removeQrs(@RequestBody List qrIds){ + qrService.removeQrs(qrIds); + return ResponseEntity.status(HttpStatus.OK).body("QR코드 일괄 삭제 완료"); + } + @PutMapping("qr/modify/{qrId}") @Operation(summary = "QR코드 수정", description = "QR코드 수정") ResponseEntity modifyQr(@PathVariable("qrId") Long qrId,@RequestBody ModifyQrRequestDto request){ - - qrService.modifyQr(qrId,request); return ResponseEntity.status(HttpStatus.OK).body("QR코드 수정 완료"); } - - - } diff --git a/src/main/java/org/example/qpin/domain/qr/dto/request/CreateQrRequestDto.java b/src/main/java/org/example/qpin/domain/qr/dto/request/CreateQrRequestDto.java index e8bfb31..15f0a2b 100644 --- a/src/main/java/org/example/qpin/domain/qr/dto/request/CreateQrRequestDto.java +++ b/src/main/java/org/example/qpin/domain/qr/dto/request/CreateQrRequestDto.java @@ -5,10 +5,13 @@ import lombok.Getter; import org.example.qpin.domain.qr.entity.MyColor; import org.example.qpin.domain.qr.entity.Sticker; +import org.example.qpin.domain.safephonenumber.entity.SafePhoneNumber; @Builder @Getter public class CreateQrRequestDto { + private Long memberId; // 임시 + private String safePhoneNum; private String phoneNum; @@ -19,7 +22,7 @@ public class CreateQrRequestDto { private Sticker sticker; - private int gradation; + private String gradation; - private Long memberId; // 임시 + private String backgroundPicture; } diff --git a/src/main/java/org/example/qpin/domain/qr/dto/request/ModifyQrRequestDto.java b/src/main/java/org/example/qpin/domain/qr/dto/request/ModifyQrRequestDto.java index 19f3e0a..290d06f 100644 --- a/src/main/java/org/example/qpin/domain/qr/dto/request/ModifyQrRequestDto.java +++ b/src/main/java/org/example/qpin/domain/qr/dto/request/ModifyQrRequestDto.java @@ -19,5 +19,7 @@ public class ModifyQrRequestDto { private Sticker sticker; - private int gradation; + private String gradation; + + private String backGroundImage; } diff --git a/src/main/java/org/example/qpin/domain/qr/dto/response/CheckQrDto.java b/src/main/java/org/example/qpin/domain/qr/dto/response/CheckQrDto.java index f54d06b..6e358dc 100644 --- a/src/main/java/org/example/qpin/domain/qr/dto/response/CheckQrDto.java +++ b/src/main/java/org/example/qpin/domain/qr/dto/response/CheckQrDto.java @@ -11,6 +11,7 @@ @AllArgsConstructor @NoArgsConstructor public class CheckQrDto { + private Long qrId; private String safePhoneNumber; @@ -20,8 +21,9 @@ public class CheckQrDto { private Sticker sticker; - private int gradation; //추후 검토 필요 + private String gradation; //추후 검토 필요 private byte[] qrImage; + private String background_picture; } diff --git a/src/main/java/org/example/qpin/domain/qr/entity/Qr.java b/src/main/java/org/example/qpin/domain/qr/entity/Qr.java index 0aa188d..f4333f7 100644 --- a/src/main/java/org/example/qpin/domain/qr/entity/Qr.java +++ b/src/main/java/org/example/qpin/domain/qr/entity/Qr.java @@ -33,10 +33,10 @@ public class Qr extends BaseEntity { private Sticker sticker; @Column - private int gradation; //추후 검토 필요 + private String gradation; //추후 검토 필요 @Column - private String background_picture; + private String backgroundPicture; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="safe_phone_number_id") @@ -50,13 +50,14 @@ public class Qr extends BaseEntity { @Comment("QR 이미지") private byte[] qrImage; - public Qr(Member member,String memo,MyColor myColor, Sticker sticker, int gradation, SafePhoneNumber safePhoneNumber){ + public Qr(Member member,String memo,MyColor myColor, Sticker sticker, String gradation, String backgroundPicture, SafePhoneNumber safePhoneNumber){ this.member = member; this.memo = memo; this.myColor = myColor; this.sticker = sticker; this.gradation = gradation; this.safePhoneNumber = safePhoneNumber; + this.backgroundPicture = backgroundPicture; } public void setQrUrl(String qrUrl){ @@ -67,12 +68,13 @@ public void setQrImage(byte[] qrImage) { this.qrImage = qrImage; } - public void modifyQr(String memo,MyColor myColor, Sticker sticker, int gradation, - SafePhoneNumber safePhoneNumber){ + public void modifyQr(String memo,MyColor myColor, Sticker sticker, String gradation, + String backgroundPicture, SafePhoneNumber safePhoneNumber){ this.memo = memo; this.myColor = myColor; this.sticker = sticker; this.gradation = gradation; this.safePhoneNumber = safePhoneNumber; + this.backgroundPicture = backgroundPicture; } } diff --git a/src/main/java/org/example/qpin/domain/qr/service/QrService.java b/src/main/java/org/example/qpin/domain/qr/service/QrService.java index 58e4325..f1d79b4 100644 --- a/src/main/java/org/example/qpin/domain/qr/service/QrService.java +++ b/src/main/java/org/example/qpin/domain/qr/service/QrService.java @@ -40,12 +40,17 @@ public class QrService { private final SafePhoneNumberRepository safePhoneNumberRepository; @Transactional - public Qr createQr(SafePhoneNumber safePhoneNumber, CreateQrRequestDto request) throws WriterException, IOException{ - + public Qr createQr(CreateQrRequestDto request) throws WriterException, IOException{ + // 유저 유효성 검사 Member member = memberRepository.findById(request.getMemberId()).orElseThrow(() -> new BadRequestException(NOT_FOUND_MEMBER_ID)); + SafePhoneNumber safePhoneNumber = safePhoneNumberRepository.findByPhoneNum(request.getPhoneNum()); + if (safePhoneNumber == null) { + safePhoneNumber = safePhoneNumberRepository.save(new SafePhoneNumber(request.getSafePhoneNum(), request.getPhoneNum())); + } + // QR 엔터티 생성 및 저장 Qr qr = new Qr(member, request.getMemo(), request.getMyColor(), request.getSticker(), - request.getGradation(), safePhoneNumber); + request.getGradation(), request.getBackgroundPicture() ,safePhoneNumber); qrRepository.save(qr); String qrUrl = "http://localhost:8080/qr/"+ qr.getQrId(); @@ -54,7 +59,6 @@ public Qr createQr(SafePhoneNumber safePhoneNumber, CreateQrRequestDto request) byte[] qrImage = generateQRCodeImage(qrUrl); qr.setQrImage(qrImage); - qrRepository.save(qr); return qr; } @@ -93,9 +97,20 @@ public byte[] generateQRCodeImage(String qrUrl) throws WriterException, IOExcept @Transactional public CheckQrDto toCheckQrDto(Long qrId) { - Qr qr = qrRepository.findById(qrId).orElseThrow(); - CheckQrDto checkQrDto = new CheckQrDto(qr.getSafePhoneNumber().getSafePhoneNumber(),qr.getMemo(), - qr.getMyColor(),qr.getSticker(),qr.getGradation(),qr.getQrImage()); + Qr qr = qrRepository.findById(qrId) + .orElseThrow(() -> new IllegalArgumentException("해당 QR 코드가 존재하지 않습니다. qrId = " + qrId)); + SafePhoneNumber safePhoneNumber = qr.getSafePhoneNumber(); + String safePhoneNum = (safePhoneNumber != null) ? safePhoneNumber.getSafePhoneNumber() : null; + + CheckQrDto checkQrDto = new CheckQrDto( + qr.getQrId(), + safePhoneNum, + qr.getMemo(), + qr.getMyColor(), + qr.getSticker(), + qr.getGradation(), + qr.getQrImage(), + qr.getBackgroundPicture()); return checkQrDto; } @@ -113,12 +128,14 @@ public List toCheckQrDtoList(Long memberId) { List qrList = qrRepository.findAllByMember(member); List checkQrDtoList = qrList.stream() .map(qr -> new CheckQrDto( + qr.getQrId(), qr.getSafePhoneNumber().getSafePhoneNumber(), qr.getMemo(), qr.getMyColor(), qr.getSticker(), qr.getGradation(), - qr.getQrImage() + qr.getQrImage(), + qr.getBackgroundPicture() )) .collect(Collectors.toList()); @@ -129,12 +146,19 @@ public void removeQr(Long qrId) { qrRepository.deleteById(qrId); } + public void removeQrs(List qrIds) { + for (Long qrId : qrIds){ + qrRepository.deleteById(qrId); + } + } + + public void modifyQr(Long qrId, ModifyQrRequestDto request) { SafePhoneNumber safePhoneNumber = safePhoneNumberRepository.findByPhoneNum(request.getPhoneNum()); Qr qr = qrRepository.findById(qrId).orElseThrow(); qr.modifyQr(request.getMemo(), request.getMyColor(), request.getSticker(), - request.getGradation(), safePhoneNumber); + request.getGradation(), request.getBackGroundImage(), safePhoneNumber); qrRepository.save(qr); } diff --git a/src/main/java/org/example/qpin/domain/safephonenumber/entity/SafePhoneNumber.java b/src/main/java/org/example/qpin/domain/safephonenumber/entity/SafePhoneNumber.java index d3d62bf..c426dc7 100644 --- a/src/main/java/org/example/qpin/domain/safephonenumber/entity/SafePhoneNumber.java +++ b/src/main/java/org/example/qpin/domain/safephonenumber/entity/SafePhoneNumber.java @@ -30,4 +30,8 @@ public class SafePhoneNumber extends BaseEntity { @JoinColumn(name = "member_id") private Member member; + public SafePhoneNumber(String safePhoneNumber, String phoneNum) { + this.safePhoneNumber = safePhoneNumber; + this.phoneNum = phoneNum; + } } diff --git a/src/main/java/org/example/qpin/domain/safephonenumber/service/SafePhoneNumberService.java b/src/main/java/org/example/qpin/domain/safephonenumber/service/SafePhoneNumberService.java index 3551051..611a27f 100644 --- a/src/main/java/org/example/qpin/domain/safephonenumber/service/SafePhoneNumberService.java +++ b/src/main/java/org/example/qpin/domain/safephonenumber/service/SafePhoneNumberService.java @@ -16,4 +16,11 @@ public class SafePhoneNumberService { public SafePhoneNumber findByPhoneNum(String phoneNum) { return safePhoneNumberRepository.findByPhoneNum(phoneNum); } + + public SafePhoneNumber create(String phoneNum) { + SafePhoneNumber newSafePhoneNumber = SafePhoneNumber.builder() + .safePhoneNumber(phoneNum) + .build(); + return safePhoneNumberRepository.save(newSafePhoneNumber); + } } diff --git a/src/main/java/org/example/qpin/domain/scrap/service/ScrapService.java b/src/main/java/org/example/qpin/domain/scrap/service/ScrapService.java index a6c459d..3070eb9 100644 --- a/src/main/java/org/example/qpin/domain/scrap/service/ScrapService.java +++ b/src/main/java/org/example/qpin/domain/scrap/service/ScrapService.java @@ -48,8 +48,9 @@ public Long postScrap(Long memberId, Long parkId) { } public List getScrapList(Long memberId) { - findMemberById(memberId); - List scrapList = scrapRepository.findAllByMember(memberId); + Member member = memberRepository.findById(memberId) + .orElseThrow(() -> new RuntimeException("회원 없음")); + List scrapList = scrapRepository.findAllByMember(member); return scrapList.stream() .map(scrap -> ScrapResponseDto.builder() diff --git a/src/main/java/org/example/qpin/global/common/repository/ParkingRepository.java b/src/main/java/org/example/qpin/global/common/repository/ParkingRepository.java index b3f4603..c395cd8 100644 --- a/src/main/java/org/example/qpin/global/common/repository/ParkingRepository.java +++ b/src/main/java/org/example/qpin/global/common/repository/ParkingRepository.java @@ -7,7 +7,7 @@ public interface ParkingRepository extends JpaRepository { - Optional findParkingByParkingAreaIdAndMember(Long parkingAreaId, Long memberId); - Optional findParkingByMemberIdAndIsParkingTrue(Long memberId); + Optional findParkingByParkingAreaIdAndMember_MemberId(Long parkingAreaId, Long memberId); + Optional findByMember_MemberIdAndIsParkingTrue(Long memberId); Optional findByParkingAreaId(Long parkingAreaId); } \ No newline at end of file diff --git a/src/main/java/org/example/qpin/global/common/repository/ScrapRepository.java b/src/main/java/org/example/qpin/global/common/repository/ScrapRepository.java index 044bbc3..8396449 100644 --- a/src/main/java/org/example/qpin/global/common/repository/ScrapRepository.java +++ b/src/main/java/org/example/qpin/global/common/repository/ScrapRepository.java @@ -1,5 +1,6 @@ package org.example.qpin.global.common.repository; +import org.example.qpin.domain.member.entity.Member; import org.example.qpin.domain.scrap.entity.Scrap; import org.springframework.data.jpa.repository.JpaRepository; @@ -8,6 +9,6 @@ public interface ScrapRepository extends JpaRepository { - Optional findScrapByParkIdAndMember(Long parkId, Long member); - List findAllByMember(Long member); + Optional findByParking_ParkingAreaIdAndMember_MemberId(Long parkingId, Long memberId); + List findAllByMember(Member member); }