Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor | CAKK-82 | Domain Module에서 Read 부분 의존관계 리팩토링 #210

Merged
merged 18 commits into from
Sep 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a4e0b0a
Chore | CAKK-82 | gradle kotlin dsl로 변경
YongsHub Sep 15, 2024
819f614
Refactor | CAKK-82 | 도메인 모듈 .java to .kt
YongsHub Sep 15, 2024
18d8196
Refactor | CAKK-82 | Reader에 대해 ReadFacade로 리팩토링
YongsHub Sep 15, 2024
962881e
Refactor | CAKK-82 | Service Layer에서 참조 Read Facade로 변경
YongsHub Sep 15, 2024
ecae866
Refactor | CAKK-82 | checkstyle 적용
YongsHub Sep 15, 2024
2908a8f
Refactor | CAKK-82 | 테스트 코드에서 reader 를 facade로 변경
YongsHub Sep 16, 2024
73e8f4b
Refactor | CAKK-82 | kt 변환 후 nullable 처리 리팩토링
YongsHub Sep 16, 2024
92ec7d1
Refactor | CAKK-82 | 도메인 모듈에 있는 dto java로 재변환
YongsHub Sep 16, 2024
93b6fbd
Fix | CAKK-82 | record type에 따른 필드 접근 코드 수정
YongsHub Sep 16, 2024
e59f442
Feature | CAKK-82 | 직렬화 역직렬화 DeleteAt에 추가
YongsHub Sep 16, 2024
089fbb5
Fix | CAKK-82 | 네이밍 수정 및 불필요한 Repository 주입 제거
YongsHub Sep 16, 2024
fc05e05
Fix | CAKK-82 | Fixture Monkey constructor 생성자 활용 시, id null 주입되는 거 수정
YongsHub Sep 16, 2024
d5e56e3
Fix | CAKK-82 | 유저 저장 로직 수정
YongsHub Sep 16, 2024
5d6a724
Test | CAKK-82 | 케이크샵 기본 정보 수정 테스트 추가
YongsHub Sep 16, 2024
d4674e3
Refactor | CAKK-82 | 코드 리뷰 반영
YongsHub Sep 16, 2024
4a58014
Refactor | CAKK-82 | 클래스 메서드 공백 및 개행 추가
YongsHub Sep 16, 2024
50a9f19
Fix | CAKK-82 | User Test Fixture 생성방법 수정
YongsHub Sep 16, 2024
5823a32
Fix | CAKK-82 | 개행 제거
YongsHub Sep 17, 2024
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
@@ -1,5 +1,7 @@
package com.cakk.admin.mapper

import com.cakk.common.enums.ReturnCode
import com.cakk.common.exception.CakkException
import org.locationtech.jts.geom.Coordinate
import org.locationtech.jts.geom.GeometryFactory
import org.locationtech.jts.geom.Point
Expand All @@ -10,9 +12,9 @@ private const val SPATIAL_REFERENCE_IDENTIFIER_NUMBER = 4326

private val geometryFactory = GeometryFactory(PrecisionModel(), SPATIAL_REFERENCE_IDENTIFIER_NUMBER)

fun supplyPointBy(latitude: Double?, longitude: Double?): Point? {
fun supplyPointBy(latitude: Double?, longitude: Double?): Point {
if (Objects.isNull(latitude) || Objects.isNull(longitude)) {
return null
throw CakkException(ReturnCode.WRONG_PARAMETER)
}
return geometryFactory.createPoint(Coordinate(longitude!!, latitude!!))
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,34 @@ import com.cakk.admin.dto.request.PromotionRequest
import com.cakk.admin.dto.response.CakeShopOwnerCandidateResponse
import com.cakk.admin.dto.response.CakeShopOwnerCandidatesResponse
import com.cakk.admin.mapper.*
import com.cakk.core.facade.cake.BusinessInformationReadFacade
import com.cakk.core.facade.cake.CakeShopReadFacade
import com.cakk.core.facade.user.UserReadFacade
import com.cakk.domain.mysql.bo.user.VerificationPolicy
import com.cakk.domain.mysql.entity.user.BusinessInformation
import com.cakk.domain.mysql.entity.user.User
import com.cakk.domain.mysql.repository.reader.BusinessInformationReader
import com.cakk.domain.mysql.repository.reader.CakeShopReader
import com.cakk.domain.mysql.repository.reader.UserReader
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional

@Service
class BusinessInformationService(
private val businessInformationReader: BusinessInformationReader,
private val userReader: UserReader,
private val cakeShopReader: CakeShopReader,
private val businessInformationReadFacade: BusinessInformationReadFacade,
private val userReadFacade: UserReadFacade,
private val cakeShopReadFacade: CakeShopReadFacade,
private val verificationPolicy: VerificationPolicy,
) {

@Transactional
fun promoteUserToBusinessOwner(dto: PromotionRequest) {
val user: User = userReader.findByUserId(dto.userId)
val businessInformation: BusinessInformation = cakeShopReader.findBusinessInformationWithShop(dto.cakeShopId)
val user: User = userReadFacade.findByUserId(dto.userId)
val businessInformation: BusinessInformation = cakeShopReadFacade.findBusinessInformationWithShop(dto.cakeShopId)

businessInformation.updateBusinessOwner(verificationPolicy, user)
}

@Transactional(readOnly = true)
fun getBusinessOwnerCandidates(): CakeShopOwnerCandidatesResponse {
var businessInformationList = businessInformationReader.findAllCakeShopBusinessOwnerCandidates()
var businessInformationList = businessInformationReadFacade.findAllCakeShopBusinessOwnerCandidates()

businessInformationList = businessInformationList
.filter { it.isBusinessOwnerCandidate(verificationPolicy) }
Expand All @@ -42,7 +42,7 @@ class BusinessInformationService(

@Transactional(readOnly = true)
fun getCandidateInformation(userId: Long): CakeShopOwnerCandidateResponse {
val businessInformation = businessInformationReader.findByUserId(userId)
val businessInformation = businessInformationReadFacade.findByUserId(userId)

return supplyCakeShopOwnerCandidateResponseBy(businessInformation)
}
Expand Down
14 changes: 7 additions & 7 deletions cakk-admin/src/main/kotlin/com/cakk/admin/service/CakeService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,21 @@ import org.springframework.transaction.annotation.Transactional
import com.cakk.admin.dto.param.CakeCreateByAdminParam
import com.cakk.admin.dto.param.CakeUpdateByAdminParam
import com.cakk.core.facade.cake.CakeManageFacade
import com.cakk.core.facade.cake.CakeReadFacade
import com.cakk.core.facade.cake.CakeShopReadFacade
import com.cakk.core.facade.tag.TagManageFacade
import com.cakk.domain.mysql.repository.reader.CakeReader
import com.cakk.domain.mysql.repository.reader.CakeShopReader

@Service
class CakeService(
private val cakeShopReader: CakeShopReader,
private val cakeReader: CakeReader,
private val cakeReadFacade: CakeReadFacade,
private val cakeShopReadFacade: CakeShopReadFacade,
private val tagManageFacade: TagManageFacade,
private val cakeManageFacade: CakeManageFacade
) {

@Transactional
fun createCake(dto: CakeCreateByAdminParam) {
val cakeShop = cakeShopReader.findById(dto.cakeShopId)
val cakeShop = cakeShopReadFacade.findById(dto.cakeShopId)
val cake = dto.cake
val tags = dto.tagNames.map { tagManageFacade.create(it) }.toMutableList()

Expand All @@ -29,15 +29,15 @@ class CakeService(

@Transactional
fun updateCake(dto: CakeUpdateByAdminParam) {
val cake = cakeReader.findById(dto.cakeId)
val cake = cakeReadFacade.findById(dto.cakeId)
val tags = dto.tagNames.map { tagManageFacade.create(it) }.toMutableList()

cakeManageFacade.update(cake, dto.cakeImageUrl, tags, dto.cakeCategories)
}

@Transactional
fun deleteCake(cakeId: Long) {
val cake = cakeReader.findById(cakeId)
val cake = cakeReadFacade.findById(cakeId)

cakeManageFacade.delete(cake)
}
Expand Down
12 changes: 6 additions & 6 deletions cakk-admin/src/main/kotlin/com/cakk/admin/service/ShopService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@ import org.springframework.transaction.annotation.Transactional
import com.cakk.admin.dto.param.CakeShopCreateByAdminParam
import com.cakk.admin.dto.response.CakeShopCreateResponse
import com.cakk.admin.mapper.supplyCakeShopCreateResponseBy
import com.cakk.core.facade.cake.CakeShopReadFacade
import com.cakk.core.facade.shop.CakeShopManageFacade
import com.cakk.domain.mysql.dto.param.link.UpdateLinkParam
import com.cakk.domain.mysql.dto.param.operation.UpdateShopOperationParam
import com.cakk.domain.mysql.dto.param.shop.CakeShopUpdateParam
import com.cakk.domain.mysql.dto.param.shop.UpdateShopAddressParam
import com.cakk.domain.mysql.entity.shop.CakeShop
import com.cakk.domain.mysql.repository.reader.CakeShopReader

@Service
class ShopService(
private val cakeShopReader: CakeShopReader,
private val cakeShopReadFacade: CakeShopReadFacade,
private val cakeShopManageFacade: CakeShopManageFacade
) {

Expand All @@ -34,25 +34,25 @@ class ShopService(

@Transactional
fun updateBasicInformation(dto: CakeShopUpdateParam) {
val cakeShop = cakeShopReader.findById(dto.cakeShopId)
val cakeShop = cakeShopReadFacade.findById(dto.cakeShopId)
cakeShop.updateBasicInformation(dto)
}

@Transactional
fun updateShopLinks(param: UpdateLinkParam) {
val cakeShop = cakeShopReader.findById(param.cakeShopId)
val cakeShop = cakeShopReadFacade.findById(param.cakeShopId)
cakeShop.updateShopLinks(param.cakeShopLinks)
}

@Transactional
fun updateShopOperationDays(param: UpdateShopOperationParam) {
val cakeShop = cakeShopReader.findById(param.cakeShopId)
val cakeShop = cakeShopReadFacade.findById(param.cakeShopId)
cakeShop.updateShopOperationDays(param.cakeShopOperations)
}

@Transactional
fun updateShopAddress(param: UpdateShopAddressParam) {
val cakeShop = cakeShopReader.findById(param.cakeShopId)
val cakeShop = cakeShopReadFacade.findById(param.cakeShopId)
cakeShop.updateShopAddress(param)
}
}
2 changes: 1 addition & 1 deletion cakk-api/src/main/java/com/cakk/api/mapper/CakeMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,6 @@ public static Cake supplyCakeBy(String cakeImageUrl) {
}

private static boolean isEmptyTag(TagParam tagParam) {
return isNull(tagParam.tagId()) || isNull(tagParam.tagName() );
return isNull(tagParam.tagId()) || isNull(tagParam.tagName());
}
}
4 changes: 2 additions & 2 deletions cakk-api/src/main/java/com/cakk/api/mapper/ShopMapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import com.cakk.api.dto.response.shop.CakeShopOwnerResponse;
import com.cakk.api.dto.response.shop.CakeShopSearchResponse;
import com.cakk.api.dto.response.shop.CakeShopSimpleResponse;
import com.cakk.domain.mysql.bo.shop.CakeShopByLocationParam;
import com.cakk.domain.mysql.bo.shop.CakeShopBySearchParam;
import com.cakk.domain.mysql.dto.param.like.HeartCakeShopResponseParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopByLocationParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopBySearchParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopDetailParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopInfoParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopLocationResponseParam;
Expand Down
32 changes: 16 additions & 16 deletions cakk-api/src/main/java/com/cakk/api/service/cake/CakeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
import com.cakk.api.dto.response.cake.CakeImageListResponse;
import com.cakk.api.mapper.CakeMapper;
import com.cakk.core.facade.cake.CakeManageFacade;
import com.cakk.core.facade.cake.CakeReadFacade;
import com.cakk.core.facade.cake.CakeShopReadFacade;
import com.cakk.core.facade.tag.TagReadFacade;
import com.cakk.domain.mysql.dto.param.cake.CakeCreateParam;
import com.cakk.domain.mysql.dto.param.cake.CakeDetailParam;
import com.cakk.domain.mysql.dto.param.cake.CakeImageResponseParam;
Expand All @@ -28,40 +31,37 @@
import com.cakk.domain.mysql.entity.cake.Tag;
import com.cakk.domain.mysql.entity.shop.CakeShop;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.repository.reader.CakeReader;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;
import com.cakk.domain.mysql.repository.reader.TagReader;
import com.cakk.domain.redis.repository.CakeViewsRedisRepository;

@Transactional(readOnly = true)
@Service
@RequiredArgsConstructor
public class CakeService {

private final CakeReader cakeReader;
private final TagReader tagReader;
private final CakeShopReader cakeShopReader;
private final CakeReadFacade cakeReadFacade;
private final TagReadFacade tagReadFacade;
private final CakeShopReadFacade cakeShopReadFacade;
private final CakeViewsRedisRepository cakeViewsRedisRepository;
private final CakeManageFacade cakeManageFacade;
private final ApplicationEventPublisher publisher;

public CakeImageListResponse findCakeImagesByCursorAndCategory(final CakeSearchByCategoryRequest dto) {
final List<CakeImageResponseParam> cakeImages
= cakeReader.searchCakeImagesByCursorAndCategory(dto.cakeId(), dto.category(), dto.pageSize());
= cakeReadFacade.searchCakeImagesByCursorAndCategory(dto.cakeId(), dto.category(), dto.pageSize());

return CakeMapper.supplyCakeImageListResponse(cakeImages);
}

public CakeImageListResponse findCakeImagesByCursorAndCakeShopId(final CakeSearchByShopRequest dto) {
final List<CakeImageResponseParam> cakeImages
= cakeReader.searchCakeImagesByCursorAndCakeShopId(dto.cakeId(), dto.cakeShopId(), dto.pageSize());
= cakeReadFacade.searchCakeImagesByCursorAndCakeShopId(dto.cakeId(), dto.cakeShopId(), dto.pageSize());

return CakeMapper.supplyCakeImageListResponse(cakeImages);
}

public CakeImageListResponse findCakeImagesByCursorAndSearch(final CakeSearchByLocationRequest dto) {
final List<CakeImageResponseParam> cakeImages
= cakeReader.searchCakeImagesByCursorAndSearchKeyword(dto.toParam());
= cakeReadFacade.searchCakeImagesByCursorAndSearchKeyword(dto.toParam());
final IncreaseSearchCountEvent event = new IncreaseSearchCountEvent(dto.keyword());

publisher.publishEvent(event);
Expand All @@ -78,30 +78,30 @@ public CakeImageListResponse searchCakeImagesByCursorAndViews(final CakeSearchBy
return CakeMapper.supplyCakeImageListResponse(List.of(), cakeIds);
}

final List<CakeImageResponseParam> cakeImages = cakeReader.searchCakeImagesByCakeIds(cakeIds);
final List<CakeImageResponseParam> cakeImages = cakeReadFacade.searchCakeImagesByCakeIds(cakeIds);
return CakeMapper.supplyCakeImageListResponse(cakeImages, cakeIds);
}

public CakeDetailResponse findCakeDetailById(Long cakeId) {
final CakeDetailParam cake = cakeReader.searchCakeDetailById(cakeId);
final CakeDetailParam cake = cakeReadFacade.searchCakeDetailById(cakeId);

return CakeMapper.cakeDetailResponseFromParam(cake);
}

@Transactional
public void createCake(CakeCreateParam param) {
final CakeShop cakeShop = cakeShopReader.searchByIdAndOwner(param.cakeShopId(), param.owner());
final CakeShop cakeShop = cakeShopReadFacade.searchByIdAndOwner(param.cakeShopId(), param.owner());
final Cake cake = param.cake();
final List<Tag> tags = tagReader.getTagsByTagName(param.tagNames());
final List<Tag> tags = tagReadFacade.getTagsByTagName(param.tagNames());
final List<CakeCategory> cakeCategories = param.cakeCategories();

cakeManageFacade.create(cakeShop, cake, tags, cakeCategories);
}

@Transactional
public void updateCake(CakeUpdateParam param) {
final Cake cake = cakeReader.findWithCakeTagsAndCakeCategories(param.cakeId(), param.owner());
final List<Tag> tags = tagReader.getTagsByTagName(param.tagNames());
final Cake cake = cakeReadFacade.findWithCakeTagsAndCakeCategories(param.cakeId(), param.owner());
final List<Tag> tags = tagReadFacade.getTagsByTagName(param.tagNames());
final String cakeImageUrl = param.cakeImageUrl();
final List<CakeCategory> cakeCategories = param.cakeCategories();

Expand All @@ -110,7 +110,7 @@ public void updateCake(CakeUpdateParam param) {

@Transactional
public void deleteCake(User owner, Long cakeId) {
final Cake cake = cakeReader.findWithCakeTagsAndCakeCategories(cakeId, owner);
final Cake cake = cakeReadFacade.findWithCakeTagsAndCakeCategories(cakeId, owner);

cakeManageFacade.delete(cake);
}
Expand Down
26 changes: 12 additions & 14 deletions cakk-api/src/main/java/com/cakk/api/service/like/HeartService.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,33 +16,31 @@
import com.cakk.api.mapper.CakeMapper;
import com.cakk.api.mapper.HeartMapper;
import com.cakk.api.mapper.ShopMapper;
import com.cakk.core.facade.cake.CakeReadFacade;
import com.cakk.core.facade.cake.CakeShopReadFacade;
import com.cakk.core.facade.cake.CakeShopUserReadFacade;
import com.cakk.core.facade.user.UserHeartFacade;
import com.cakk.domain.mysql.dto.param.like.HeartCakeImageResponseParam;
import com.cakk.domain.mysql.dto.param.like.HeartCakeShopResponseParam;
import com.cakk.domain.mysql.entity.cake.Cake;
import com.cakk.domain.mysql.entity.shop.CakeShop;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.repository.reader.CakeHeartReader;
import com.cakk.domain.mysql.repository.reader.CakeReader;
import com.cakk.domain.mysql.repository.reader.CakeShopHeartReader;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;

@RequiredArgsConstructor
@Service
public class HeartService {

private final CakeReader cakeReader;
private final CakeShopReader cakeShopReader;
private final CakeHeartReader cakeHeartReader;
private final CakeShopHeartReader cakeShopHeartReader;
private final CakeReadFacade cakeReadFacade;
private final CakeShopReadFacade cakeShopReadFacade;
private final CakeShopUserReadFacade cakeShopUserReadFacade;
private final UserHeartFacade userHeartFacade;

@Transactional(readOnly = true)
public HeartCakeImageListResponse searchCakeImagesByCursorAndHeart(
final HeartCakeSearchRequest dto,
final User signInUser
) {
final List<HeartCakeImageResponseParam> cakeImages = cakeHeartReader.searchCakeImagesByCursorAndHeart(
final List<HeartCakeImageResponseParam> cakeImages = cakeShopUserReadFacade.searchCakeImagesByCursorAndHeart(
dto.cakeHeartId(),
signInUser.getId(),
dto.pageSize()
Expand All @@ -56,7 +54,7 @@ public HeartCakeShopListResponse searchCakeShopByCursorAndHeart(
final HeartCakeShopSearchRequest dto,
final User signInUser
) {
final List<HeartCakeShopResponseParam> cakeShops = cakeShopHeartReader.searchAllByCursorAndHeart(
final List<HeartCakeShopResponseParam> cakeShops = cakeShopUserReadFacade.searchAllCakeShopsByCursorAndHeart(
dto.cakeShopHeartId(),
signInUser.getId(),
dto.pageSize()
Expand All @@ -67,30 +65,30 @@ public HeartCakeShopListResponse searchCakeShopByCursorAndHeart(

@Transactional(readOnly = true)
public HeartResponse isHeartCake(final User user, final Long cakeId) {
final Cake cake = cakeReader.findByIdWithHeart(cakeId);
final Cake cake = cakeReadFacade.findByIdWithHeart(cakeId);
final boolean isHeart = cake.isHeartedBy(user);

return HeartMapper.supplyHeartResponseBy(isHeart);
}

@Transactional(readOnly = true)
public HeartResponse isHeartCakeShop(final User user, final Long cakeShopId) {
final CakeShop cakeShop = cakeShopReader.findByIdWithHeart(cakeShopId);
final CakeShop cakeShop = cakeShopReadFacade.findByIdWithHeart(cakeShopId);
final boolean isHeart = cakeShop.isHeartedBy(user);

return HeartMapper.supplyHeartResponseBy(isHeart);
}

@DistributedLock(key = "#cakeId")
public void heartCake(final User user, final Long cakeId) {
final Cake cake = cakeReader.findByIdWithHeart(cakeId);
final Cake cake = cakeReadFacade.findByIdWithHeart(cakeId);

userHeartFacade.heartCake(user, cake);
}

@DistributedLock(key = "#cakeShopId")
public void heartCakeShop(final User user, final Long cakeShopId) {
final CakeShop cakeShop = cakeShopReader.findByIdWithHeart(cakeShopId);
final CakeShop cakeShop = cakeShopReadFacade.findByIdWithHeart(cakeShopId);

userHeartFacade.heartCakeShop(user, cakeShop);
}
Expand Down
Loading
Loading