Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
2a8be2c
fix: 오타수정
parkhs21 Mar 1, 2025
fa2ce91
refactor: 각각의 년월일에서 LocalDate 형태로 변경
parkhs21 Mar 1, 2025
7b7500f
refactor: entity 빌더패턴 제거
parkhs21 Mar 1, 2025
1639886
refactor: DTO에서의 builder 패턴 제거
parkhs21 Mar 1, 2025
83a61a5
refactor: vaccination entity & member 연관관계 제거(pet은 존재)
parkhs21 Mar 4, 2025
b532571
feat: create vaccination v2 작성
parkhs21 Mar 4, 2025
b5ec7cd
feat: delete vaccination v2 작성
parkhs21 Mar 4, 2025
059dc77
feat: put vaccination v2 작성
parkhs21 Mar 4, 2025
5e99212
feat: get vaccinations v2 작성
parkhs21 Mar 4, 2025
a08b320
rename: dto 파일명 컨벤션 적용
parkhs21 Mar 4, 2025
3074e83
test: v2 api 테스트 적용
parkhs21 Mar 4, 2025
d3341a1
refactor: error message 변경
parkhs21 Mar 4, 2025
570ff58
feat: read only transactional 적용
parkhs21 Mar 4, 2025
6755d20
refactor: 불필요 native query 제거
parkhs21 Mar 5, 2025
9d1b15c
Merge pull request #217 from KAU-SMART-PETS/refactor/#216_vaccination…
2dhhh Mar 10, 2025
efc9328
Merge branch 'refactor/#215_vaccination' into feat/#218_vaccination_v2
parkhs21 Mar 10, 2025
522f719
Merge pull request #219 from KAU-SMART-PETS/feat/#218_vaccination_v2
2dhhh Mar 10, 2025
7cd744e
Merge branch 'develop' into refactor/#215_vaccination
parkhs21 Mar 12, 2025
525f7d6
rename: v2 폴더 구조에 따른 이동
parkhs21 Mar 12, 2025
5c8499c
refactor: @Query 삭제에 따른, @Param 삭제
parkhs21 Mar 22, 2025
ad1f8ec
refactor: @Query 삭제에 따른, @Param 삭제
parkhs21 Mar 22, 2025
10a592a
Merge remote-tracking branch 'origin/refactor/#215_vaccination' into …
parkhs21 Mar 22, 2025
70dbed7
feat: v1용 deprecated 선언
parkhs21 Mar 22, 2025
512e31e
fix: pet에 대해 member의 권한 여부 확인(Controller 수정)
parkhs21 Apr 17, 2025
2e9f2e3
fix: PetNotFoundExceptionV2 미반영 내용 적용
parkhs21 Apr 30, 2025
6107a6a
fix: getById @NonNull 적용
parkhs21 Apr 30, 2025
5ecc46e
fix: VaccinationServiceV2에서 LoginInfo로 Pet 정보 미확인 내용 정정
parkhs21 Apr 30, 2025
392a4ea
fix: PetRepository의 getByIdAndMemberAndDeletedAtIsNull 이름 변경에 따른 PetS…
parkhs21 Apr 30, 2025
6a7272e
test: VaccinationControllerV2 관련 테스트 수정
parkhs21 Apr 30, 2025
c8b94a1
Merge branch 'develop' into refactor/#215_vaccination
parkhs21 Apr 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.v1.member.exception.MemberNotFoundException;
import java.util.Optional;
import lombok.NonNull;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
Expand All @@ -13,7 +15,7 @@ public interface MemberRepository extends JpaRepository<Member, Long> {

Optional<Member> findByPlatformId(String platformId);

default Member getById(long id){
default @NonNull Member getById(@NonNull Long id) {
return findById(id).orElseThrow(MemberNotFoundException::new);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.entity.pet.Pet;
import com.kau.capstone.v1.pet.exception.PetAndMemberNotMatchedException;
import com.kau.capstone.v2.pet.exception.PetNotFoundExceptionV2;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -16,10 +16,11 @@ public interface PetRepository extends JpaRepository<Pet, Long> {
List<Pet> findByMember(@Param("member") Member member);

@Query("SELECT p FROM Pet p WHERE p.id = :id AND p.deletedAt IS NULL AND p.member = :member")
Optional<Pet> findByIdAndDeletedAtIsNullAndMember(@Param("id") Long id, @Param("member") Member member);
Optional<Pet> findByIdAndMemberAndDeletedAtIsNull(@Param("id") Long id, @Param("member") Member member);

default Pet getByIdAndDeletedAtIsNullAndMember(Long id, Member member) {
return findByIdAndDeletedAtIsNullAndMember(id, member).orElseThrow(
PetAndMemberNotMatchedException::new);
default Pet getByIdAndMemberAndDeletedAtIsNull(Long id, Member member) {
return findByIdAndMemberAndDeletedAtIsNull(id, member).orElseThrow(
PetNotFoundExceptionV2::new
);
}
}
61 changes: 39 additions & 22 deletions src/main/java/com/kau/capstone/entity/vaccination/Vaccination.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
package com.kau.capstone.entity.vaccination;

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.entity.pet.Pet;
import com.kau.capstone.v1.vaccination.dto.CreateVaccinationRequest;
import com.kau.capstone.v2.vaccination.dto.CreateVaccinationReqV2;
import com.kau.capstone.v1.vaccination.dto.PutVaccinationRequest;
import com.kau.capstone.v2.vaccination.dto.PutVaccinationReqV2;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;

import java.time.LocalDate;

@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Vaccination {

Expand All @@ -27,32 +28,48 @@ public class Vaccination {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
@Comment("사용자 연결")
@JoinColumn(name = "member_id")
private Member member;

@ManyToOne
@Comment("반려동물 연결")
@JoinColumn(name = "pet_id")
private Pet pet;

@Comment("예바접종 이름")
@Comment("예방접종 이름")
private String name;

@Comment("연도")
private Integer timeYear;
@Comment("접종시기")
private LocalDate vaccinatedAt;

@Comment("월")
private Integer timeMonth;
private Vaccination(Pet pet, String name, LocalDate vaccinatedAt) {
this.pet = pet;
this.name = name;
this.vaccinatedAt = vaccinatedAt;
}

@Comment("일")
private Integer timeDay;
@Deprecated
public static Vaccination of(Pet pet, CreateVaccinationRequest request) {
return new Vaccination(
pet,
request.name(),
LocalDate.of(request.year(), request.month(), request.day())
);
}

public void modify(String name, Integer year, Integer month, Integer day) {
this.name = name;
this.timeYear = year;
this.timeMonth = month;
this.timeDay = day;
public static Vaccination of(Pet pet, CreateVaccinationReqV2 request) {
return new Vaccination(
pet,
request.name(),
request.vaccinatedAt()
);
}

@Deprecated
public void modify(PutVaccinationRequest request) {
this.name = request.name();
this.vaccinatedAt = LocalDate.of(request.year(), request.month(), request.day());
}

public void modify(PutVaccinationReqV2 request) {
this.name = request.name();
this.vaccinatedAt = request.vaccinatedAt();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@

import com.kau.capstone.entity.pet.Pet;
import com.kau.capstone.entity.vaccination.Vaccination;
import com.kau.capstone.v2.vaccination.exception.VaccinationNotFoundExceptionV2;
import lombok.NonNull;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface VaccinationRepository extends JpaRepository<Vaccination, Long> {

@Query("SELECT v FROM Vaccination v WHERE v.pet = :pet ORDER BY v.timeYear DESC, v.timeMonth DESC, v.timeDay DESC")
List<Vaccination> findAllByMemberAndPet(@Param("pet") Pet pet);
List<Vaccination> findAllByPetOrderByVaccinatedAtDesc(Pet pet);

default @NonNull Vaccination getById(@NonNull Long id) {
return findById(id).orElseThrow(VaccinationNotFoundExceptionV2::new);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@NotNull을 사용하는 이유가 따로 있나요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

interface 구현에 따라서, validation 적용

}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

build() 빼도 될 것 같습니다

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

v1은 수정하지 않았습니다.

Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public class VaccinationController implements VaccinationApi {
public ResponseEntity<Void> createVaccinationInfoForPet(@LoginUser LoginInfo loginInfo,
@PathVariable Long petId,
@RequestBody CreateVaccinationRequest request) {
vaccinationService.createVaccinationInfo(loginInfo.memberId(), petId, request);
vaccinationService.createVaccinationInfo(petId, request);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

왜 제대로된 LoginInfo인지 확인은 안해주나요,,

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영했어요


return ResponseEntity.status(HttpStatus.CREATED).build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.kau.capstone.v1.vaccination.dto;

import com.kau.capstone.entity.vaccination.Vaccination;
import lombok.Builder;

@Builder
public record OneVaccinationResponse(
Long id,
String name,
Expand All @@ -13,12 +11,12 @@ public record OneVaccinationResponse(
) {

public static OneVaccinationResponse toResponse(Vaccination vaccination) {
return OneVaccinationResponse.builder()
.id(vaccination.getId())
.name(vaccination.getName())
.year(vaccination.getTimeYear())
.month(vaccination.getTimeMonth())
.day(vaccination.getTimeDay())
.build();
return new OneVaccinationResponse(
vaccination.getId(),
vaccination.getName(),
vaccination.getVaccinatedAt().getYear(),
vaccination.getVaccinatedAt().getMonthValue(),
vaccination.getVaccinatedAt().getDayOfMonth()
);
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
package com.kau.capstone.v1.vaccination.dto;

import com.kau.capstone.entity.pet.Pet;
import lombok.Builder;

@Builder
public record PetVaccinationResponse(
String name
) {

public static PetVaccinationResponse toResponse(Pet pet) {
return PetVaccinationResponse.builder()
.name(pet.getName())
.build();
return new PetVaccinationResponse(pet.getName());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@

import com.kau.capstone.entity.pet.Pet;
import com.kau.capstone.entity.vaccination.Vaccination;
import lombok.Builder;

import java.util.List;

@Builder
public record VaccinationsResponse(
PetVaccinationResponse pet,
List<OneVaccinationResponse> vaccination
Expand All @@ -18,9 +16,6 @@ public static VaccinationsResponse toResponse(Pet pet, List<Vaccination> vaccina
.map(OneVaccinationResponse::toResponse)
.toList();

return VaccinationsResponse.builder()
.pet(petResponse)
.vaccination(vaccinationResponses)
.build();
return new VaccinationsResponse(petResponse, vaccinationResponses);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.kau.capstone.v1.vaccination.service;

import com.kau.capstone.entity.member.Member;
import com.kau.capstone.entity.member.repository.MemberRepository;
import com.kau.capstone.entity.pet.Pet;
import com.kau.capstone.v1.pet.exception.PetNotFoundException;
Expand Down Expand Up @@ -32,33 +31,24 @@ public VaccinationsResponse getVaccinationInfo(Long petId) {
Pet pet = petRepository.findById(petId)
.orElseThrow(() -> new PetNotFoundException());

List<Vaccination> vaccinations = vaccinationRepository.findAllByMemberAndPet(pet);
List<Vaccination> vaccinations = vaccinationRepository.findAllByPetOrderByVaccinatedAtDesc(pet);

return VaccinationsResponse.toResponse(pet, vaccinations);
}

public void createVaccinationInfo(Long memberId, Long petId, CreateVaccinationRequest request) {
Member member = memberRepository.getById(memberId);

public void createVaccinationInfo(Long petId, CreateVaccinationRequest request) {
Pet pet = petRepository.findById(petId)
.orElseThrow(() -> new PetNotFoundException());

Vaccination vaccination = Vaccination.builder()
.member(member)
.pet(pet)
.name(request.name())
.timeYear(request.year())
.timeMonth(request.month())
.timeDay(request.day())
.build();
Vaccination vaccination = Vaccination.of(pet, request);
vaccinationRepository.save(vaccination);
}

public void putVaccinationInfo(Long vaccinationId, PutVaccinationRequest request) {
Vaccination vaccination = vaccinationRepository.findById(vaccinationId)
.orElseThrow(() -> new VaccinationNotFoundException(VACCINATION_NOT_FOUND));

vaccination.modify(request.name(), request.year(), request.month(), request.day());
vaccination.modify(request);
}

public void deleteVaccinationInfo(Long vaccinationId) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
import com.kau.capstone._core.exception.ApiException;
import org.springframework.http.HttpStatus;

public class PetNotFoundException extends ApiException {
public class PetNotFoundExceptionV2 extends ApiException {

private static final String message = "반려동물 정보를 찾을 수 없습니다.";

public PetNotFoundException() {
public PetNotFoundExceptionV2() {
super(HttpStatus.BAD_REQUEST, message);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public void createPetInfo(LoginInfo loginInfo, PetRegistReqV2 petRegistReqV2) {
@Transactional(readOnly = true)
public PetResV2 getPetInfo(LoginInfo loginInfo, Long petId) {
Member member = memberRepository.getById(loginInfo.memberId());
Pet pet = petRepository.getByIdAndDeletedAtIsNullAndMember(petId, member);
Pet pet = petRepository.getByIdAndMemberAndDeletedAtIsNull(petId, member);
return PetResV2.toResponse(pet);
}

Expand All @@ -54,15 +54,15 @@ public OwnedPetsResV2 getPetsInfo(LoginInfo loginInfo) {
@Transactional
public void updatePetInfo(LoginInfo loginInfo, Long petId, PetReqV2 petRequest) {
Member member = memberRepository.getById(loginInfo.memberId());
Pet pet = petRepository.getByIdAndDeletedAtIsNullAndMember(petId, member);
Pet pet = petRepository.getByIdAndMemberAndDeletedAtIsNull(petId, member);
pet.updatePetV2(petRequest);
petRepository.save(pet);
}

@Transactional
public void updatePetImage(LoginInfo loginInfo, Long petId, MultipartFile image) {
Member member = memberRepository.getById(loginInfo.memberId());
Pet pet = petRepository.getByIdAndDeletedAtIsNullAndMember(petId, member);
Pet pet = petRepository.getByIdAndMemberAndDeletedAtIsNull(petId, member);
String dirName = petId + "/profile";
String url = fileService.uploadImage(image, dirName);
pet.updateImageUrl(url);
Expand All @@ -72,7 +72,7 @@ public void updatePetImage(LoginInfo loginInfo, Long petId, MultipartFile image)
@Transactional
public void deletePet(LoginInfo loginInfo, Long petId) {
Member member = memberRepository.getById(loginInfo.memberId());
Pet pet = petRepository.getByIdAndDeletedAtIsNullAndMember(petId, member);
Pet pet = petRepository.getByIdAndMemberAndDeletedAtIsNull(petId, member);
pet.deletePet();
petRepository.save(pet);
}
Expand Down
Loading
Loading