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-80 | core 모듈 생성 및 Facade 이관 #208

Merged
merged 4 commits into from
Sep 13, 2024
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
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ jobs:
with:
files: |
./cakk-api/build/test-results/**/*.xml
./cakk-core/build/test-results/**/*.xml
./cakk-domain/mysql/build/test-results/**/*.xml

- name: Upload test coverage
Expand Down
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ subprojects {

if (project.name == "cakk-admin" ||
project.name == "cakk-external" ||
project.name == "cakk-core" ||
project.name == "cakk-common"
) {
apply(plugin = "org.jetbrains.kotlin.jvm")
Expand Down Expand Up @@ -119,6 +120,7 @@ subprojects {
"com.cakk.api.mapper.**",
"com.cakk.api.listener.**",
"com.cakk.api.vo.**",
"com.cakk.core.**",
"com.cakk.domain.**"
)

Expand Down
1 change: 1 addition & 0 deletions cakk-admin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ tasks.jar {
dependencies {
implementation(project(":cakk-common"))
implementation(project(":cakk-domain:mysql"))
implementation(project(":cakk-core"))

implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-validation")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.springframework.context.annotation.Configuration
@Configuration
@ComponentScan(basePackages = [
"com.cakk.domain",
"com.cakk.core",
"com.cakk.admin"
])
class ComponentScanConfig
18 changes: 9 additions & 9 deletions cakk-admin/src/main/kotlin/com/cakk/admin/service/CakeService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,40 +5,40 @@ import org.springframework.transaction.annotation.Transactional

import com.cakk.admin.dto.param.CakeCreateByAdminParam
import com.cakk.admin.dto.param.CakeUpdateByAdminParam
import com.cakk.domain.mysql.facade.cake.CakeManagerFacade
import com.cakk.domain.mysql.facade.tag.TagManagerFacade
import com.cakk.core.facade.cake.CakeManageFacade
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 tagManagerFacade: TagManagerFacade,
private val cakeManagerFacade: CakeManagerFacade
private val tagManageFacade: TagManageFacade,
private val cakeManageFacade: CakeManageFacade
) {

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

cakeManagerFacade.create(cakeShop, cake, tags, dto.cakeCategories)
cakeManageFacade.create(cakeShop, cake, tags, dto.cakeCategories)
}

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

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

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

cakeManagerFacade.delete(cake)
cakeManageFacade.delete(cake)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,23 @@ 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.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.facade.shop.CakeShopManagerFacade
import com.cakk.domain.mysql.repository.reader.CakeShopReader

@Service
class ShopService(
private val cakeShopReader: CakeShopReader,
private val cakeShopManagerFacade: CakeShopManagerFacade
private val cakeShopManageFacade: CakeShopManageFacade
) {

@Transactional
fun createCakeShopByCertification(dto: CakeShopCreateByAdminParam): CakeShopCreateResponse {
val result: CakeShop = cakeShopManagerFacade.createCakeShop(
val result: CakeShop = cakeShopManageFacade.create(
dto.cakeShop,
dto.cakeShopOperations,
dto.businessInformation,
Expand Down
5 changes: 3 additions & 2 deletions cakk-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ dependencies {
implementation(project(":cakk-domain:redis"))
implementation(project(":cakk-client"))
implementation(project(":cakk-external"))
implementation(project(":cakk-core"))

// basic
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-validation")
implementation("org.springframework.boot:spring-boot-starter-aop:3.3.0")
implementation("org.springframework:spring-tx")
Expand All @@ -27,7 +28,7 @@ dependencies {

// test
testImplementation("com.tngtech.archunit:archunit-junit5:1.1.0")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.boot:spring-boot-starter-test")
testImplementation("org.springframework.security:spring-security-test")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.23")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"com.cakk.client",
"com.cakk.domain",
"com.cakk.external",
"com.cakk.core",
"com.cakk.api"
})
public class ComponentScanConfig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.cakk.api.dto.response.cake.CakeDetailResponse;
import com.cakk.api.dto.response.cake.CakeImageListResponse;
import com.cakk.api.mapper.CakeMapper;
import com.cakk.core.facade.cake.CakeManageFacade;
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 @@ -27,7 +28,6 @@
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.facade.cake.CakeManagerFacade;
import com.cakk.domain.mysql.repository.reader.CakeReader;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;
import com.cakk.domain.mysql.repository.reader.TagReader;
Expand All @@ -42,7 +42,7 @@ public class CakeService {
private final TagReader tagReader;
private final CakeShopReader cakeShopReader;
private final CakeViewsRedisRepository cakeViewsRedisRepository;
private final CakeManagerFacade cakeManagerFacade;
private final CakeManageFacade cakeManageFacade;
private final ApplicationEventPublisher publisher;

public CakeImageListResponse findCakeImagesByCursorAndCategory(final CakeSearchByCategoryRequest dto) {
Expand Down Expand Up @@ -95,7 +95,7 @@ public void createCake(CakeCreateParam param) {
final List<Tag> tags = tagReader.getTagsByTagName(param.tagNames());
final List<CakeCategory> cakeCategories = param.cakeCategories();

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

@Transactional
Expand All @@ -105,13 +105,13 @@ public void updateCake(CakeUpdateParam param) {
final String cakeImageUrl = param.cakeImageUrl();
final List<CakeCategory> cakeCategories = param.cakeCategories();

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

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

cakeManagerFacade.delete(cake);
cakeManageFacade.delete(cake);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
import com.cakk.api.mapper.CakeMapper;
import com.cakk.api.mapper.HeartMapper;
import com.cakk.api.mapper.ShopMapper;
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.facade.user.UserHeartFacade;
import com.cakk.domain.mysql.repository.reader.CakeHeartReader;
import com.cakk.domain.mysql.repository.reader.CakeReader;
import com.cakk.domain.mysql.repository.reader.CakeShopHeartReader;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import lombok.RequiredArgsConstructor;

import com.cakk.api.annotation.DistributedLock;
import com.cakk.core.facade.user.UserLikeFacade;
import com.cakk.domain.mysql.entity.shop.CakeShop;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.facade.user.UserLikeFacade;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;

@Service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.cakk.api.mapper.LinkMapper;
import com.cakk.api.mapper.PointMapper;
import com.cakk.api.mapper.ShopMapper;
import com.cakk.core.facade.shop.CakeShopManageFacade;
import com.cakk.domain.mysql.bo.CakeShops;
import com.cakk.domain.mysql.bo.user.VerificationPolicy;
import com.cakk.domain.mysql.dto.param.link.UpdateLinkParam;
Expand All @@ -51,7 +52,6 @@
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.event.shop.CertificationEvent;
import com.cakk.domain.mysql.event.views.CakeShopIncreaseViewsEvent;
import com.cakk.domain.mysql.facade.shop.CakeShopManagerFacade;
import com.cakk.domain.mysql.mapper.EventMapper;
import com.cakk.domain.mysql.repository.reader.BusinessInformationReader;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;
Expand All @@ -65,7 +65,7 @@ public class ShopService {
private final UserReader userReader;
private final CakeShopReader cakeShopReader;
private final BusinessInformationReader businessInformationReader;
private final CakeShopManagerFacade cakeShopManagerFacade;
private final CakeShopManageFacade cakeShopManageFacade;
private final CakeShopViewsRedisRepository cakeShopViewsRedisRepository;

private final VerificationPolicy verificationPolicy;
Expand All @@ -78,7 +78,7 @@ public CakeShopCreateResponse createCakeShopByCertification(final CreateShopRequ
final List<CakeShopOperation> cakeShopOperations = ShopMapper.supplyCakeShopOperationsBy(cakeShop, request.operationDays());
final List<CakeShopLink> cakeShopLinks = LinkMapper.supplyCakeShopLinksBy(cakeShop, request.links());

final CakeShop result = cakeShopManagerFacade.createCakeShop(cakeShop, cakeShopOperations, businessInformation, cakeShopLinks);
final CakeShop result = cakeShopManageFacade.create(cakeShop, cakeShopOperations, businessInformation, cakeShopLinks);

return ShopMapper.supplyCakeShopCreateResponseBy(result);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import com.cakk.api.provider.jwt.JwtProvider;
import com.cakk.common.enums.ReturnCode;
import com.cakk.common.exception.CakkException;
import com.cakk.core.facade.user.UserManageFacade;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.facade.user.UserManagerFacade;
import com.cakk.domain.mysql.repository.reader.UserReader;
import com.cakk.domain.redis.repository.TokenRedisRepository;

Expand All @@ -26,13 +26,13 @@ public class SignService {
private final JwtProvider jwtProvider;

private final UserReader userReader;
private final UserManagerFacade userManagerFacade;
private final UserManageFacade userManageFacade;
private final TokenRedisRepository tokenRedisRepository;

@Transactional
public JwtResponse signUp(final UserSignUpRequest dto) {
final String providerId = oidcProviderFactory.getProviderId(dto.provider(), dto.idToken());
final User user = userManagerFacade.create(UserMapper.supplyUserBy(dto, providerId));
final User user = userManageFacade.create(UserMapper.supplyUserBy(dto, providerId));

return JwtResponse.from(jwtProvider.generateToken(user));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
import com.cakk.api.dto.request.user.ProfileUpdateRequest;
import com.cakk.api.dto.response.user.ProfileInformationResponse;
import com.cakk.api.mapper.UserMapper;
import com.cakk.core.facade.user.UserManageFacade;
import com.cakk.domain.mysql.dto.param.user.ProfileUpdateParam;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.entity.user.UserWithdrawal;
import com.cakk.domain.mysql.facade.user.UserManagerFacade;
import com.cakk.domain.mysql.repository.reader.UserReader;

@Service
@RequiredArgsConstructor
public class UserService {

private final UserReader userReader;
private final UserManagerFacade userManagerFacade;
private final UserManageFacade userManageFacade;

@Transactional(readOnly = true)
public ProfileInformationResponse findProfile(final User signInUser) {
Expand All @@ -33,14 +33,14 @@ public void updateInformation(final User signInUser, final ProfileUpdateRequest
final User user = userReader.findByUserId(signInUser.getId());
final ProfileUpdateParam param = UserMapper.supplyProfileUpdateParamBy(dto);

userManagerFacade.updateProfile(user, param);
userManageFacade.updateProfile(user, param);
}

@Transactional
public void withdraw(final User signInUser) {
final User user = userReader.findByIdWithAll(signInUser.getId());
final UserWithdrawal withdrawal = UserMapper.supplyUserWithdrawalBy(user);

userManagerFacade.withdraw(user, withdrawal);
userManageFacade.withdraw(user, withdrawal);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
import com.cakk.api.dto.response.like.HeartCakeImageListResponse;
import com.cakk.common.enums.ReturnCode;
import com.cakk.common.exception.CakkException;
import com.cakk.core.facade.user.UserHeartFacade;
import com.cakk.domain.mysql.dto.param.like.HeartCakeImageResponseParam;
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.facade.user.UserHeartFacade;
import com.cakk.domain.mysql.repository.reader.CakeHeartReader;
import com.cakk.domain.mysql.repository.reader.CakeReader;
import com.cakk.domain.mysql.repository.reader.CakeShopHeartReader;
Expand Down Expand Up @@ -213,6 +213,5 @@ void heartCakeShop3() {
ReturnCode.NOT_EXIST_CAKE_SHOP.getMessage());

verify(cakeShopReader, times(1)).findByIdWithHeart(cakeShopId);
verify(cakeShopHeartReader, times(0)).findOrNullByUserAndCakeShop(any(User.class), any(CakeShop.class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@

import com.cakk.api.common.annotation.TestWithDisplayName;
import com.cakk.api.common.base.ServiceTest;
import com.cakk.core.facade.user.UserLikeFacade;
import com.cakk.domain.mysql.entity.shop.CakeShop;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.facade.user.UserLikeFacade;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;
@DisplayName("좋아요 기능 관련 비즈니스 로직 테스트")
public class LikeServiceTest extends ServiceTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import com.cakk.common.enums.ReturnCode;
import com.cakk.common.enums.VerificationStatus;
import com.cakk.common.exception.CakkException;
import com.cakk.core.facade.shop.CakeShopManageFacade;
import com.cakk.domain.mysql.bo.user.VerificationPolicy;
import com.cakk.domain.mysql.dto.param.shop.CakeShopDetailParam;
import com.cakk.domain.mysql.dto.param.shop.CakeShopInfoParam;
Expand All @@ -40,7 +41,6 @@
import com.cakk.domain.mysql.entity.user.BusinessInformation;
import com.cakk.domain.mysql.entity.user.User;
import com.cakk.domain.mysql.event.shop.CertificationEvent;
import com.cakk.domain.mysql.facade.shop.CakeShopManagerFacade;
import com.cakk.domain.mysql.repository.reader.CakeShopReader;
import com.cakk.domain.mysql.repository.reader.UserReader;
import com.cakk.domain.redis.repository.CakeShopViewsRedisRepository;
Expand All @@ -58,7 +58,7 @@ public class ShopServiceTest extends ServiceTest {
private CakeShopReader cakeShopReader;

@Mock
private CakeShopManagerFacade cakeShopManagerFacade;
private CakeShopManageFacade cakeShopManageFacade;

@Mock
private CakeShopViewsRedisRepository cakeShopViewsRedisRepository;
Expand Down Expand Up @@ -203,16 +203,16 @@ void createCakeShop() {
//given
CreateShopRequest request = getCreateShopRequestFixture();
CakeShop cakeShop = getCakeShopFixture();
when(cakeShopManagerFacade.createCakeShop(any(CakeShop.class), anyList(), any(BusinessInformation.class), anyList()))
when(cakeShopManageFacade.create(any(CakeShop.class), anyList(), any(BusinessInformation.class), anyList()))
.thenReturn(cakeShop);

//when
final CakeShopCreateResponse response = shopService.createCakeShopByCertification(request);

//verify
assertEquals(response.cakeShopId(), cakeShop.getId());
verify(cakeShopManagerFacade, times(1))
.createCakeShop(any(CakeShop.class), anyList(), any(BusinessInformation.class), anyList());
verify(cakeShopManageFacade, times(1))
.create(any(CakeShop.class), anyList(), any(BusinessInformation.class), anyList());
}

@TestWithDisplayName("userId와 cakeShopId가 존재한다면, 해당 userId의 사용자는 Owner로 승격된다")
Expand Down
Loading
Loading