Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -3,9 +3,11 @@
import com.mycom.backenddaengplace.auth.dto.CustomOAuth2User;
import com.mycom.backenddaengplace.common.dto.ApiResponse;
import com.mycom.backenddaengplace.trait.dto.request.MemberTraitResponseRequestList;
import com.mycom.backenddaengplace.trait.dto.request.PetTraitResponseRequestList;
import com.mycom.backenddaengplace.trait.dto.response.TraitQuestionResponse;
import com.mycom.backenddaengplace.trait.enums.QuestionTarget;
import com.mycom.backenddaengplace.trait.service.MemberTraitService;
import com.mycom.backenddaengplace.trait.service.PetTraitService;
import com.mycom.backenddaengplace.trait.service.TraitService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
Expand All @@ -21,6 +23,7 @@ public class TraitController {

private final TraitService traitService;
private final MemberTraitService memberTraitService;
private final PetTraitService petTraitService;

@GetMapping("/questions")
public ResponseEntity<ApiResponse<List<TraitQuestionResponse>>> getTraitQuestions(@RequestParam QuestionTarget target) {
Expand All @@ -34,4 +37,11 @@ public ResponseEntity<ApiResponse<Void>> registerMemberTraitResponse(@RequestBod
memberTraitService.saveMemberTraitResponse(request, customOAuth2User.getMember());
return ResponseEntity.ok(ApiResponse.success("์„ฑํ–ฅ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค."));
}

@PostMapping("/{petId}")
public ResponseEntity<ApiResponse<Void>> registerPetTraitResponse(@RequestBody PetTraitResponseRequestList request,
@PathVariable Long petId) {
petTraitService.savePetTraitResponse(request, petId);
return ResponseEntity.ok(ApiResponse.success("์„ฑํ–ฅ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๋“ฑ๋กํ–ˆ์Šต๋‹ˆ๋‹ค."));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import com.mycom.backenddaengplace.pet.domain.Pet;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@Table(name = "pet_trait_response")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class PetTraitResponse {
Expand All @@ -23,4 +26,16 @@ public class PetTraitResponse {
@JoinColumn(name = "trait_answer_id", nullable = false)
private TraitAnswer traitAnswer;

@MapsId("traitQuestionId")
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "trait_question_id", nullable = false)
private TraitQuestion traitQuestion;

@Builder
public PetTraitResponse(PetTraitResponseId id, Pet pet, TraitAnswer traitAnswer, TraitQuestion traitQuestion) {
this.id = id;
this.pet = pet;
this.traitAnswer = traitAnswer;
this.traitQuestion = traitQuestion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,22 @@ public class PetTraitResponseId implements Serializable {

private Long petId;
private Long traitAnswerId;
private Long traitQuestionId;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PetTraitResponseId that = (PetTraitResponseId) o;
return Objects.equals(petId, that.petId) &&
Objects.equals(traitAnswerId, that.traitAnswerId);
return petId.equals(that.petId) &&
traitAnswerId.equals(that.traitAnswerId) &&
traitQuestionId.equals(that.traitQuestionId);

}

@Override
public int hashCode() {
return Objects.hash(petId, traitAnswerId);
return petId.hashCode() + traitAnswerId.hashCode() + traitQuestionId.hashCode();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@

@Data
public class MemberTraitResponseRequestList {
private List<MemberTraitResponseRequest> memberTraitResponseRequestList;
private List<TraitResponseRequest> memberTraitResponseRequestList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mycom.backenddaengplace.trait.dto.request;

import lombok.Data;

import java.util.List;

@Data
public class PetTraitResponseRequestList {
private List<TraitResponseRequest> petTraitResponseRequestList;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

@Data
@Builder
public class MemberTraitResponseRequest {
private Long memberId;
public class TraitResponseRequest {
private Long traitQuestionId;
private Long traitAnswerId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.mycom.backenddaengplace.trait.repository;

import com.mycom.backenddaengplace.trait.domain.PetTraitResponse;
import com.mycom.backenddaengplace.trait.domain.PetTraitResponseId;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PetTraitResponseRepository extends JpaRepository<PetTraitResponse, PetTraitResponseId> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.mycom.backenddaengplace.trait.domain.MemberTraitResponseId;
import com.mycom.backenddaengplace.trait.domain.TraitAnswer;
import com.mycom.backenddaengplace.trait.domain.TraitQuestion;
import com.mycom.backenddaengplace.trait.dto.request.MemberTraitResponseRequest;
import com.mycom.backenddaengplace.trait.dto.request.TraitResponseRequest;
import com.mycom.backenddaengplace.trait.dto.request.MemberTraitResponseRequestList;
import com.mycom.backenddaengplace.trait.exception.TraitAnswerNotFoundException;
import com.mycom.backenddaengplace.trait.exception.TraitQuestionNotFoundException;
Expand All @@ -24,7 +24,7 @@ public class MemberTraitService {
private final MemberTraitResponseRepository memberTraitResponseRepository;

public void saveMemberTraitResponse(MemberTraitResponseRequestList requestList, Member member) {
for (MemberTraitResponseRequest request : requestList.getMemberTraitResponseRequestList()) {
for (TraitResponseRequest request : requestList.getMemberTraitResponseRequestList()) {

TraitQuestion traitQuestion = traitQuestionRepository.findById(request.getTraitQuestionId())
.orElseThrow(() -> new TraitQuestionNotFoundException(request.getTraitQuestionId()));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.mycom.backenddaengplace.trait.service;

import com.mycom.backenddaengplace.pet.domain.Pet;
import com.mycom.backenddaengplace.pet.exception.PetNotFoundException;
import com.mycom.backenddaengplace.pet.repository.PetRepository;
import com.mycom.backenddaengplace.trait.domain.*;
import com.mycom.backenddaengplace.trait.dto.request.PetTraitResponseRequestList;
import com.mycom.backenddaengplace.trait.dto.request.TraitResponseRequest;
import com.mycom.backenddaengplace.trait.exception.TraitAnswerNotFoundException;
import com.mycom.backenddaengplace.trait.exception.TraitQuestionNotFoundException;
import com.mycom.backenddaengplace.trait.repository.PetTraitResponseRepository;
import com.mycom.backenddaengplace.trait.repository.TraitAnswerRepository;
import com.mycom.backenddaengplace.trait.repository.TraitQuestionRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class PetTraitService {

private final TraitAnswerRepository traitAnswerRepository;
private final TraitQuestionRepository traitQuestionRepository;
private final PetTraitResponseRepository petTraitResponseRepository;
private final PetRepository petRepository;

public void savePetTraitResponse(PetTraitResponseRequestList requestList, Long petId) {
for (TraitResponseRequest request : requestList.getPetTraitResponseRequestList()) {

Pet pet = petRepository.findById(petId)
.orElseThrow(() -> new PetNotFoundException(petId));

TraitQuestion traitQuestion = traitQuestionRepository.findById(request.getTraitQuestionId())
.orElseThrow(() -> new TraitQuestionNotFoundException(request.getTraitQuestionId()));

TraitAnswer traitAnswer = traitAnswerRepository.findById(request.getTraitAnswerId())
.orElseThrow(() -> new TraitAnswerNotFoundException(request.getTraitAnswerId()));

// ๋ณตํ•ฉํ‚ค ์ƒ์„ฑ
PetTraitResponseId responseId = new PetTraitResponseId(
petId,
request.getTraitAnswerId(),
request.getTraitQuestionId()
);

PetTraitResponse response = PetTraitResponse.builder()
.id(responseId)
.pet(pet)
.traitQuestion(traitQuestion)
.traitAnswer(traitAnswer)
.build();

petTraitResponseRepository.save(response);
}
}

}
Loading