-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8 from team-acode/feat/fragrance
feat: 상세페이지 - 기본 정보, 노트 정보
- Loading branch information
Showing
21 changed files
with
383 additions
and
1 deletion.
There are no files selected for viewing
9 changes: 9 additions & 0 deletions
9
src/main/java/server/acode/domain/family/repository/FamilyRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package server.acode.domain.family.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.family.entity.Family; | ||
|
||
@Repository | ||
public interface FamilyRepository extends JpaRepository<Family, Long> { | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/server/acode/domain/family/repository/FragranceFamilyRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package server.acode.domain.family.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.data.repository.query.Param; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.family.entity.Family; | ||
import server.acode.domain.family.entity.FragranceFamily; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
|
||
import java.util.List; | ||
|
||
@Repository | ||
public interface FragranceFamilyRepository extends JpaRepository<FragranceFamily, Long> { | ||
@Query("SELECT ff.family FROM FragranceFamily ff WHERE ff.fragrance = :fragrance") | ||
List<Family> findByFragrance(@Param("fragrance") Fragrance fragrance); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/server/acode/domain/family/repository/MainFamilyRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package server.acode.domain.family.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.family.entity.MainFamily; | ||
|
||
@Repository | ||
public interface MainFamilyRepository extends JpaRepository<MainFamily, Long> { | ||
} |
31 changes: 31 additions & 0 deletions
31
src/main/java/server/acode/domain/fragrance/controller/FragranceController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package server.acode.domain.fragrance.controller; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.security.core.annotation.AuthenticationPrincipal; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RestController; | ||
import server.acode.domain.fragrance.dto.response.GetFragranceNote; | ||
import server.acode.domain.fragrance.dto.response.GetFragranceResponse; | ||
import server.acode.domain.fragrance.service.FragranceService; | ||
import server.acode.domain.user.entity.User; | ||
|
||
@RestController | ||
@RequestMapping("/api/v1/fragrance") | ||
@RequiredArgsConstructor | ||
public class FragranceController { | ||
private final FragranceService fragranceService; | ||
|
||
@GetMapping("/{fragranceId}") | ||
public GetFragranceResponse getFragranceDetail( | ||
@PathVariable("fragranceId") Long fragranceId, | ||
@AuthenticationPrincipal User user) { | ||
return fragranceService.getFragranceDetail(fragranceId, user); | ||
} | ||
|
||
@GetMapping("/{fragranceId}/note") | ||
public GetFragranceNote getFragranceNote(@PathVariable("fragranceId") Long fragranceId) { | ||
return fragranceService.getFragranceNote(fragranceId); | ||
} | ||
} |
19 changes: 19 additions & 0 deletions
19
src/main/java/server/acode/domain/fragrance/dto/response/CapacityInfo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package server.acode.domain.fragrance.dto.response; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import server.acode.domain.fragrance.entity.Capacity; | ||
|
||
@Getter | ||
@NoArgsConstructor | ||
public class CapacityInfo { | ||
private String capacity; | ||
private int price; | ||
|
||
@Builder | ||
public CapacityInfo(Capacity capacity) { | ||
this.capacity = capacity.getCapacity(); | ||
this.price = capacity.getPrice(); | ||
} | ||
} |
21 changes: 21 additions & 0 deletions
21
src/main/java/server/acode/domain/fragrance/dto/response/FamilyInfo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package server.acode.domain.fragrance.dto.response; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import server.acode.domain.family.entity.Family; | ||
|
||
@Getter | ||
@NoArgsConstructor | ||
public class FamilyInfo { | ||
private Long familyId; | ||
private String familyIcon; | ||
private String familyName; | ||
|
||
@Builder | ||
public FamilyInfo(Family family) { | ||
this.familyId = family.getId(); | ||
this.familyIcon = family.getIcon(); | ||
this.familyName = family.getKorName(); | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
src/main/java/server/acode/domain/fragrance/dto/response/GetFragranceNote.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package server.acode.domain.fragrance.dto.response; | ||
|
||
import lombok.AccessLevel; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
|
||
import java.util.List; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class GetFragranceNote { | ||
private Long fragranceId; | ||
private boolean isSingle; | ||
private List<NoteInfo> topNote; | ||
private List<NoteInfo> middelNote; | ||
private List<NoteInfo> baseNote; | ||
|
||
public GetFragranceNote(Fragrance fragrance, List<NoteInfo> topNote, List<NoteInfo> middelNote, List<NoteInfo> baseNote) { | ||
this.fragranceId = fragrance.getId(); | ||
this.isSingle = fragrance.isSingle(); | ||
this.topNote = topNote; | ||
this.middelNote = middelNote; | ||
this.baseNote = baseNote; | ||
} | ||
} |
43 changes: 43 additions & 0 deletions
43
src/main/java/server/acode/domain/fragrance/dto/response/GetFragranceResponse.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package server.acode.domain.fragrance.dto.response; | ||
|
||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
|
||
import java.util.List; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class GetFragranceResponse { | ||
private Long fragranceId; | ||
private boolean isScraped; | ||
private String thumbnail; | ||
private String image1; | ||
private String image2; | ||
|
||
private String korBrand; | ||
private String fragranceName; | ||
private String concentration; | ||
|
||
private List<FamilyInfo> familyList; | ||
private List<CapacityInfo> capacityList; | ||
private String style; | ||
|
||
// @Builder | ||
public GetFragranceResponse(Fragrance fragrance, boolean isScraped, List<FamilyInfo> familyList, List<CapacityInfo> capacityList) { | ||
this.fragranceId = fragrance.getId(); | ||
this.thumbnail = fragrance.getThumbnail(); | ||
this.image1 = fragrance.getImage1(); | ||
this.image2 = fragrance.getImage2(); | ||
this.korBrand = fragrance.getKorBrand(); | ||
this.fragranceName = fragrance.getName(); | ||
this.concentration = fragrance.getConcentration().name(); | ||
this.style = fragrance.getStyle(); | ||
|
||
this.isScraped = isScraped; | ||
this.familyList = familyList; | ||
this.capacityList = capacityList; | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/server/acode/domain/fragrance/dto/response/NoteInfo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package server.acode.domain.fragrance.dto.response; | ||
|
||
import lombok.AccessLevel; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import server.acode.domain.ingredient.entity.Ingredient; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class NoteInfo { | ||
private Long ingredientId; | ||
private String ingredientName; | ||
private String acode; // 어코드 설명 | ||
|
||
public NoteInfo(Ingredient ingredient) { | ||
this.ingredientId = ingredient.getId(); | ||
this.ingredientName = ingredient.getKorName(); | ||
this.acode = ingredient.getAcode(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 15 additions & 0 deletions
15
src/main/java/server/acode/domain/fragrance/repository/CapacityRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package server.acode.domain.fragrance.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.fragrance.entity.Capacity; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
|
||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
@Repository | ||
public interface CapacityRepository extends JpaRepository<Capacity, Long> { | ||
List<Capacity> findByFragrance(Fragrance fragrance); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/server/acode/domain/fragrance/repository/FragranceRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package server.acode.domain.fragrance.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
|
||
@Repository | ||
public interface FragranceRepository extends JpaRepository<Fragrance, Long> { | ||
} |
69 changes: 69 additions & 0 deletions
69
src/main/java/server/acode/domain/fragrance/service/FragranceService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package server.acode.domain.fragrance.service; | ||
|
||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
import server.acode.domain.family.entity.Family; | ||
import server.acode.domain.family.repository.FragranceFamilyRepository; | ||
import server.acode.domain.fragrance.dto.response.*; | ||
import server.acode.domain.fragrance.entity.Capacity; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
import server.acode.domain.fragrance.repository.CapacityRepository; | ||
import server.acode.domain.fragrance.repository.FragranceRepository; | ||
import server.acode.domain.ingredient.entity.Ingredient; | ||
import server.acode.domain.ingredient.repository.BaseNoteRepository; | ||
import server.acode.domain.ingredient.repository.MiddleNoteRepository; | ||
import server.acode.domain.ingredient.repository.TopNoteRepository; | ||
import server.acode.domain.user.entity.User; | ||
import server.acode.domain.user.repository.ScrapRepository; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
@Transactional(readOnly = true) | ||
@RequiredArgsConstructor | ||
public class FragranceService { | ||
private final FragranceRepository fragranceRepository; | ||
|
||
private final ScrapRepository scrapRepository; | ||
private final FragranceFamilyRepository fragranceFamilyRepository; | ||
private final CapacityRepository capacityRepository; | ||
|
||
private final TopNoteRepository topNoteRepository; | ||
private final MiddleNoteRepository middleNoteRepository; | ||
private final BaseNoteRepository baseNoteRepository; | ||
|
||
public GetFragranceResponse getFragranceDetail(Long fragranceId, User user) { | ||
boolean isScraped = false; | ||
|
||
Fragrance fragrance = fragranceRepository.findById(fragranceId) | ||
.orElseThrow(RuntimeException::new); //FRAGRANCE_NOT_FOUND | ||
|
||
isScraped = scrapRepository.findByUserAndFragrance(user, fragrance).isPresent(); | ||
|
||
List<Family> findFamilyList = fragranceFamilyRepository.findByFragrance(fragrance); | ||
List<FamilyInfo> familyList = findFamilyList.stream().map(FamilyInfo::new).toList(); | ||
|
||
List<Capacity> findCapacityList = capacityRepository.findByFragrance(fragrance); | ||
List<CapacityInfo> capacityList = findCapacityList.stream().map(CapacityInfo::new).toList(); | ||
|
||
return new GetFragranceResponse(fragrance, isScraped, familyList, capacityList); | ||
} | ||
|
||
|
||
public GetFragranceNote getFragranceNote(Long fragranceId) { | ||
Fragrance fragrance = fragranceRepository.findById(fragranceId) | ||
.orElseThrow(RuntimeException::new); //FRAGRANCE_NOT_FOUND | ||
|
||
List<Ingredient> findTopNote = topNoteRepository.findByFragrance(fragrance); | ||
List<NoteInfo> topNote = findTopNote.stream().map(NoteInfo::new).toList(); | ||
|
||
List<Ingredient> findMiddleNote = middleNoteRepository.findByFragrance(fragrance); | ||
List<NoteInfo> middleNote = findMiddleNote.stream().map(NoteInfo::new).toList(); | ||
|
||
List<Ingredient> findBaseNote = baseNoteRepository.findByFragrance(fragrance); | ||
List<NoteInfo> baseNote = findBaseNote.stream().map(NoteInfo::new).toList(); | ||
|
||
return new GetFragranceNote(fragrance, topNote, middleNote, baseNote); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
src/main/java/server/acode/domain/ingredient/repository/BaseNoteRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package server.acode.domain.ingredient.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.data.repository.query.Param; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
import server.acode.domain.ingredient.entity.BaseNote; | ||
import server.acode.domain.ingredient.entity.Ingredient; | ||
|
||
import java.util.List; | ||
|
||
@Repository | ||
public interface BaseNoteRepository extends JpaRepository<BaseNote, Long> { | ||
@Query("SELECT bn.ingredient FROM BaseNote bn WHERE bn.fragrance = :fragrance") | ||
List<Ingredient> findByFragrance(@Param("fragrance") Fragrance fragrance); | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/server/acode/domain/ingredient/repository/IngredientRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package server.acode.domain.ingredient.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.ingredient.entity.Ingredient; | ||
|
||
@Repository | ||
public interface IngredientRepository extends JpaRepository<Ingredient, Long> { | ||
} |
9 changes: 9 additions & 0 deletions
9
src/main/java/server/acode/domain/ingredient/repository/IngredientTypeRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package server.acode.domain.ingredient.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.ingredient.entity.IngredientType; | ||
|
||
@Repository | ||
public interface IngredientTypeRepository extends JpaRepository<IngredientType, Long> { | ||
} |
17 changes: 17 additions & 0 deletions
17
src/main/java/server/acode/domain/ingredient/repository/MiddleNoteRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package server.acode.domain.ingredient.repository; | ||
|
||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.data.repository.query.Param; | ||
import org.springframework.stereotype.Repository; | ||
import server.acode.domain.fragrance.entity.Fragrance; | ||
import server.acode.domain.ingredient.entity.Ingredient; | ||
import server.acode.domain.ingredient.entity.MiddleNote; | ||
|
||
import java.util.List; | ||
|
||
@Repository | ||
public interface MiddleNoteRepository extends JpaRepository<MiddleNote, Long> { | ||
@Query("SELECT mn.ingredient FROM MiddleNote mn WHERE mn.fragrance = :fragrance") | ||
List<Ingredient> findByFragrance(@Param("fragrance") Fragrance fragrance); | ||
} |
Oops, something went wrong.