Skip to content

Commit

Permalink
Refactor | CAKK-82 | Service Layer에서 참조 Read Facade로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
YongsHub committed Sep 15, 2024
1 parent 18d8196 commit 962881e
Show file tree
Hide file tree
Showing 11 changed files with 100 additions and 97 deletions.
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)
}
}
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 @@ -22,8 +22,8 @@
import com.cakk.api.dto.response.shop.CakeShopSearchResponse;
import com.cakk.api.dto.response.shop.CakeShopSimpleResponse;
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.bo.shop.CakeShopByLocationParam;
import com.cakk.domain.mysql.bo.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
37 changes: 20 additions & 17 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 @@ -38,30 +41,30 @@
@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,39 +81,39 @@ 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 Cake cake = param.cake;
final List<Tag> tags = tagReader.getTagsByTagName(param.tagNames);
final List<CakeCategory> cakeCategories = param.cakeCategories;
final CakeShop cakeShop = cakeShopReadFacade.searchByIdAndOwner(param.getCakeShopId(), param.getOwner());
final Cake cake = param.getCake();
final List<Tag> tags = tagReadFacade.getTagsByTagName(param.getTagNames());
final List<CakeCategory> cakeCategories = param.getCakeCategories();

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 String cakeImageUrl = param.cakeImageUrl;
final List<CakeCategory> cakeCategories = param.cakeCategories;
final Cake cake = cakeReadFacade.findWithCakeTagsAndCakeCategories(param.getCakeId(), param.getOwner());
final List<Tag> tags = tagReadFacade.getTagsByTagName(param.getTagNames());
final String cakeImageUrl = param.getCakeImageUrl();
final List<CakeCategory> cakeCategories = param.getCakeCategories();

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

@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.searchAllByCursorAndHeart(
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
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import lombok.RequiredArgsConstructor;

import com.cakk.api.annotation.DistributedLock;
import com.cakk.core.facade.cake.CakeShopReadFacade;
import com.cakk.core.facade.user.UserLikeFacade;
import com.cakk.domain.mysql.entity.shop.CakeShop;
import com.cakk.domain.mysql.entity.user.User;
Expand All @@ -14,12 +15,12 @@
@RequiredArgsConstructor
public class LikeService {

private final CakeShopReader cakeShopReader;
private final CakeShopReadFacade cakeShopReadFacade;
private final UserLikeFacade userCakeFacade;

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

userCakeFacade.likeCakeShop(user, cakeShop);
}
Expand Down
Loading

0 comments on commit 962881e

Please sign in to comment.