Skip to content

Commit 437ef28

Browse files
committed
feat: 순서가 보장되지 않는 Set 필드에 대해, API 응답 시 순서가 일정하도록 수정
1 parent 0b9ced1 commit 437ef28

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

src/main/kotlin/com/damaba/damaba/mapper/PhotographerMapper.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ interface PhotographerMapper {
2525
fun toPhotographerResponse(photographer: Photographer): PhotographerResponse
2626

2727
@Mapping(source = "saved", target = "isSaved")
28+
@Mapping(
29+
target = "mainPhotographyTypes",
30+
expression = "java(new java.util.LinkedHashSet<>(photographerListItem.getMainPhotographyTypes()))"
31+
)
2832
fun toPhotographerListItemResponse(photographerListItem: PhotographerListItem): PhotographerListItemResponse
2933

3034
fun toPhotographerProfile(command: UpdatePhotographerProfileCommand): PhotographerProfile

src/main/kotlin/com/damaba/damaba/mapper/PromotionMapper.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,46 @@ import com.damaba.damaba.domain.promotion.PromotionListItem
99
import com.damaba.damaba.domain.user.User
1010
import org.mapstruct.Mapper
1111
import org.mapstruct.Mapping
12+
import org.mapstruct.Named
1213
import org.mapstruct.factory.Mappers
14+
import com.damaba.damaba.controller.region.RegionResponse
15+
import com.damaba.damaba.domain.region.Region
1316

1417
@Mapper(uses = [UserMapper::class, ImageMapper::class, RegionMapper::class])
1518
interface PromotionMapper {
19+
@Mapping(
20+
target = "photographyTypes",
21+
expression = "java(new java.util.LinkedHashSet<>(promotion.getPhotographyTypes()))"
22+
)
23+
@Mapping(target = "activeRegions", source = "activeRegions", qualifiedByName = ["regionsToLinkedHashSet"])
24+
@Mapping(
25+
target = "hashtags",
26+
expression = "java(new java.util.LinkedHashSet<>(promotion.getHashtags()))"
27+
)
1628
fun toPromotionResponse(promotion: Promotion): PromotionResponse
1729

1830
@Mapping(source = "saved", target = "isSaved")
31+
@Mapping(
32+
target = "photographyTypes",
33+
expression = "java(new java.util.LinkedHashSet<>(promotionDetail.getPhotographyTypes()))"
34+
)
35+
@Mapping(target = "activeRegions", source = "activeRegions", qualifiedByName = ["regionsToLinkedHashSet"])
36+
@Mapping(
37+
target = "hashtags",
38+
expression = "java(new java.util.LinkedHashSet<>(promotionDetail.getHashtags()))"
39+
)
1940
fun toPromotionDetailResponse(promotionDetail: PromotionDetail): PromotionDetailResponse
2041

2142
@Mapping(source = "saved", target = "isSaved")
43+
@Mapping(
44+
target = "photographyTypes",
45+
expression = "java(new java.util.LinkedHashSet<>(promotionListItem.getPhotographyTypes()))"
46+
)
47+
@Mapping(target = "activeRegions", source = "activeRegions", qualifiedByName = ["regionsToLinkedHashSet"])
48+
@Mapping(
49+
target = "hashtags",
50+
expression = "java(new java.util.LinkedHashSet<>(promotionListItem.getHashtags()))"
51+
)
2252
fun toPromotionListItemResponse(promotionListItem: PromotionListItem): PromotionListItemResponse
2353

2454
@Mapping(source = "promotion.id", target = "id")
@@ -37,6 +67,11 @@ interface PromotionMapper {
3767
isSaved: Boolean,
3868
): PromotionListItem
3969

70+
@Named("regionsToLinkedHashSet")
71+
fun regionsToLinkedHashSet(regions: Set<Region>): LinkedHashSet<RegionResponse> = regions.stream()
72+
.map { region -> RegionMapper.INSTANCE.toRegionResponse(region) }
73+
.collect(java.util.stream.Collectors.toCollection { LinkedHashSet() })
74+
4075
companion object {
4176
val INSTANCE: PromotionMapper = Mappers.getMapper(PromotionMapper::class.java)
4277
}

0 commit comments

Comments
 (0)