diff --git a/.gitignore b/.gitignore index 250ce84b..c15be028 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ bin/ ### VS Code ### .vscode/ -application.yml \ No newline at end of file +application.ymlModifyCompanyApi.java diff --git a/Rolling-Adapters/adapters-commons/build.gradle b/Rolling-Adapters/adapters-commons/build.gradle deleted file mode 100644 index 09f11e9e..00000000 --- a/Rolling-Adapters/adapters-commons/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation 'org.springframework:spring-context:6.0.9' -} \ No newline at end of file diff --git a/Rolling-Adapters/adapters-commons/src/main/java/com/stubee/adapterscommons/annotations/Adapter.java b/Rolling-Adapters/adapters-commons/src/main/java/com/stubee/adapterscommons/annotations/Adapter.java deleted file mode 100644 index c4e50933..00000000 --- a/Rolling-Adapters/adapters-commons/src/main/java/com/stubee/adapterscommons/annotations/Adapter.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.adapterscommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Adapter { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/build.gradle b/Rolling-Adapters/persistence/build.gradle deleted file mode 100644 index 8b7b48d3..00000000 --- a/Rolling-Adapters/persistence/build.gradle +++ /dev/null @@ -1,37 +0,0 @@ -subprojects { - - dependencies { - implementation project(':Rolling-Domains') - - implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - - implementation 'org.springframework.boot:spring-boot-starter-validation' - - implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' - annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" - annotationProcessor "jakarta.annotation:jakarta.annotation-api" - annotationProcessor "jakarta.persistence:jakarta.persistence-api" - - testImplementation 'mysql:mysql-connector-java:8.0.33' - testImplementation(testFixtures(project(':Rolling-Adapters:persistence:persistence-commons'))) - } - - def querydslDir = "$buildDir/generated/querydsl" - - sourceSets { - main.java.srcDirs += [querydslDir] - } - - tasks.withType(JavaCompile) { - options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir) - } - - clean.doLast { - file(querydslDir).deleteDir() - } - - tasks.named('test') { - useJUnitPlatform() - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/build.gradle b/Rolling-Adapters/persistence/company-persistence/build.gradle deleted file mode 100644 index 47e09e0f..00000000 --- a/Rolling-Adapters/persistence/company-persistence/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:company-application') - - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyAdapter.java b/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyAdapter.java deleted file mode 100644 index 59e28d4d..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyAdapter.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.companyapplication.outports.command.CommandCompanyPort; -import com.stubee.persistencecommons.entity.CompanyEntity; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@Adapter -@RequiredArgsConstructor -class CommandCompanyAdapter implements CommandCompanyPort { - - private final CommandCompanyJpaRepository commandCompanyJpaRepository; - private final CompanyMapper companyMapper; - - @Override - public Company register(final Company company) { - return companyMapper.toDomain(save(companyMapper.toEntity(company))); - } - - @Override - public void update(final Company company) { - save(companyMapper.toEntityWithId(company)); - } - - @Override - public void updateAll(final List companyList) { - companyList.forEach(this::update); - } - - @Override - public void deleteById(final CompanyId companyId) { - commandCompanyJpaRepository.deleteById(companyId.getId()); - } - - private CompanyEntity save(final CompanyEntity entity) { - return commandCompanyJpaRepository.save(entity); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyJpaRepository.java b/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyJpaRepository.java deleted file mode 100644 index eecf3bd7..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CommandCompanyJpaRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.stubee.persistencecommons.entity.CompanyEntity; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -interface CommandCompanyJpaRepository extends JpaRepository { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyAdapter.java b/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyAdapter.java deleted file mode 100644 index e5b66328..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyAdapter.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.companyapplication.outports.query.CheckCompanyPort; -import com.stubee.companyapplication.outports.query.QueryCompanyPort; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; -import java.util.Optional; - -@Adapter -@RequiredArgsConstructor -class QueryCompanyAdapter implements QueryCompanyPort, CheckCompanyPort { - - private final QueryCompanyRepository queryCompanyRepository; - private final CompanyMapper companyMapper; - - @Override - public boolean check(final Long companyId) { - return queryCompanyRepository.existsByCompanyId(companyId); - } - - @Override - public Optional findById(final Long id) { - return Optional.ofNullable(companyMapper.toDomain(queryCompanyRepository.findById(id))); - } - - @Override - public Optional findInfoById(Long companyId) { - return Optional.ofNullable(queryCompanyRepository.findInfoById(companyId)); - } - - @Override - public List findByNameContaining(String companyName, PageRequest pageRequest) { - return companyMapper.toDomainList(queryCompanyRepository.findByNameContaining(companyName, pageRequest)); - } - - @Override - public List findByRegistrantId(Long registrantId, PageRequest pageRequest) { - return companyMapper.toDomainList(queryCompanyRepository.findByRegistrantId(registrantId, pageRequest)); - } - - @Override - public List findAll(PageRequest pageRequest) { - return companyMapper.toDomainList(queryCompanyRepository.findAll(pageRequest)); - } - - @Override - public List getOrderBy(final String gradeType) { - return companyMapper.toDomainList(queryCompanyRepository.findOrderBy(gradeType)); - } - - @Override - public boolean check(final String companyName) { - return queryCompanyRepository.existsByCompanyName(companyName); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyRepository.java b/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyRepository.java deleted file mode 100644 index 9e151ed9..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryCompanyRepository.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.stubee.persistencecommons.entity.CompanyEntity; -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import com.stubee.rollingdomains.common.model.PageRequest; - -import java.util.List; - -interface QueryCompanyRepository { - - boolean existsByCompanyId(Long companyId); - - boolean existsByCompanyName(String companyName); - - CompanyEntity findById(Long id); - - CompanyQueryResponse findInfoById(Long companyId); - - List findByNameContaining(String companyName, PageRequest pageRequest); - - List findByRegistrantId(Long registrantId, PageRequest pageRequest); - - List findAll(PageRequest pageRequest); - - List findOrderBy(String gradeType); - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryDSLCompanyRepository.java b/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryDSLCompanyRepository.java deleted file mode 100644 index 1871508d..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/QueryDSLCompanyRepository.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.querydsl.core.types.ConstructorExpression; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.Projections; -import com.querydsl.core.types.dsl.NumberPath; -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.stubee.persistencecommons.entity.CompanyEntity; -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import com.stubee.persistencecommons.support.OrderByNull; -import com.stubee.persistencecommons.support.QueryDSLHelperSupport; -import com.stubee.rollingdomains.common.model.PageRequest; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; - -import static com.stubee.persistencecommons.entity.QCompanyEntity.companyEntity; -import static com.stubee.persistencecommons.entity.QMemberEntity.memberEntity; -import static com.stubee.persistencecommons.support.ExpressionSupport.Company.*; - -@Repository -@RequiredArgsConstructor -class QueryDSLCompanyRepository implements QueryCompanyRepository { - - private static final int RANK_LIMIT = 10; - - private final QueryDSLHelperSupport queryDSLHelper; - private final JPAQueryFactory jpaQueryFactory; - - @Override - public CompanyEntity findById(Long id) { - return queryDSLHelper.findById(companyEntity, isEqualId(id)); - } - - @Override - public CompanyQueryResponse findInfoById(Long id) { - return jpaQueryFactory - .select(responseProjection()) - .from(companyEntity) - .innerJoin(memberEntity) - .on(companyEntity.registrantId.eq(memberEntity.id)) - .where(isEqualId(id)) - .fetchOne(); - } - - @Override - public boolean existsByCompanyId(Long id) { - return queryDSLHelper.existsByOption(companyEntity, isEqualId(id).and(isAccepted())) == null; - } - - @Override - public boolean existsByCompanyName(String companyName) { - return queryDSLHelper.existsByOption(companyEntity, isEqualName(companyName)) != null; - } - - @Override - public List findByNameContaining(String companyName, PageRequest pageRequest) { - return findByOptionWithPaging(isContainingName(companyName), pageRequest); - } - - @Override - public List findByRegistrantId(Long registrantId, PageRequest pageRequest) { - return findByOptionWithPaging(isEqualRegistrant(registrantId), pageRequest); - } - - private List findByOptionWithPaging(Predicate option, PageRequest pageRequest) { - return queryDSLHelper.findByOptionWithPagination(companyEntity, option, pageRequest, companyEntity.createdAt.desc()); - } - - @Override - public List findAll(PageRequest pageRequest) { - return queryDSLHelper.findByOptionWithPagination(companyEntity, isAccepted(), pageRequest, OrderByNull.DEFAULT); - } - - @Override - public List findOrderBy(String gradeType) { - NumberPath order = switch (gradeType) { - case "total" -> companyEntity.totalGrade; - case "salary-benefits" -> companyEntity.salaryAndBenefits; - case "balance" -> companyEntity.workLifeBalance; - case "culture" -> companyEntity.organizationalCulture; - case "career" -> companyEntity.careerAdvancement; - default -> throw new IllegalArgumentException("Wrong grade type"); - }; - - return queryDSLHelper.findWithOrderAndLimit(companyEntity, order.desc(), RANK_LIMIT); - } - - private ConstructorExpression responseProjection() { - return Projections.constructor(CompanyQueryResponse.class, - companyEntity.id.stringValue(), - companyEntity.name, - companyEntity.address, - companyEntity.addressEtc, - companyEntity.description, - companyEntity.logoUrl, - companyEntity.logoRGB, - companyEntity.totalGrade, - companyEntity.salaryAndBenefits, - companyEntity.workLifeBalance, - companyEntity.organizationalCulture, - companyEntity.careerAdvancement, - companyEntity.createdAt, - companyEntity.modifiedAt, - - memberEntity.id.stringValue(), - memberEntity.nickName, - memberEntity.socialLoginId, - memberEntity.imageUrl); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/CompanyTestUtils.java b/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/CompanyTestUtils.java deleted file mode 100644 index f2682385..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/CompanyTestUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.companypersistence; - -import com.stubee.rollingdomains.domain.company.model.*; - -public abstract class CompanyTestUtils { - - public static Company create(String name, String description, Address address, CompanyGrades companyGrades) { - return Company.ExceptIdBuilder() - .companyDetails(CompanyDetails.ExceptDateBuilder() - .name(name) - .description(description) - .companyLogo(CompanyLogo.of(null, null)) - .companyAddress(address) - .registrantId(RegistrantId.of(1L)) - .build()) - .companyGrades(companyGrades) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/adapters/CommandCompanyAdapterTest.java b/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/adapters/CommandCompanyAdapterTest.java deleted file mode 100644 index 9189cad2..00000000 --- a/Rolling-Adapters/persistence/company-persistence/src/test/java/com/stubee/companypersistence/adapters/CommandCompanyAdapterTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.stubee.companypersistence.adapters; - -import com.stubee.companypersistence.CompanyTestUtils; -import com.stubee.persistencecommons.PersistenceAdapterTest; -import com.stubee.rollingdomains.domain.company.model.Address; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyGrades; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.junit.jupiter.api.Assertions.*; - -@PersistenceAdapterTest -@ContextConfiguration(classes = {CommandCompanyAdapter.class, CompanyMapper.class, CommandCompanyJpaRepository.class}) -public class CommandCompanyAdapterTest { - - @Autowired - private CommandCompanyAdapter commandCompanyAdapter; - - @Autowired - private CommandCompanyJpaRepository companyJpaRepository; - - @Test - @DisplayName(value = "Company 생성 성공") - void COMPANY_생성_성공() { - //given - String name = "木ノ葉隠れの里"; - String description = "日本で最高の会社"; - Address address = Address.of("木ノ葉隠れの里", null); - Company company = CompanyTestUtils.create(name, description, address, CompanyGrades.zero()); - - //when - CompanyId id = commandCompanyAdapter.register(company).companyId(); - - //then - assertTrue(companyJpaRepository.existsById(id.getId())); - } -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/build.gradle b/Rolling-Adapters/persistence/employment-persistence/build.gradle deleted file mode 100644 index 799b3416..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:employment-application') - - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentAdapter.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentAdapter.java deleted file mode 100644 index 986ac2b7..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.employmentapplication.outports.RegisterEmploymentPort; -import com.stubee.rollingdomains.domain.employment.model.Employment; -import lombok.RequiredArgsConstructor; - -@Adapter -@RequiredArgsConstructor -class CommandEmploymentAdapter implements RegisterEmploymentPort { - - private final CommandEmploymentJpaRepository commandEmploymentJpaRepository; - private final EmploymentMapper employmentMapper; - - @Override - public Employment register(final Employment employment) { - return employmentMapper.toDomain(commandEmploymentJpaRepository.save(employmentMapper.toEntity(employment))); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentJpaRepository.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentJpaRepository.java deleted file mode 100644 index 4db6d388..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/CommandEmploymentJpaRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.stubee.persistencecommons.entity.EmploymentEntity; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -interface CommandEmploymentJpaRepository extends CrudRepository { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/EmploymentMapper.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/EmploymentMapper.java deleted file mode 100644 index 6230199a..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/EmploymentMapper.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.persistencecommons.entity.EmploymentEntity; -import com.stubee.rollingdomains.domain.employment.model.*; - -@DomainObjectMapper -class EmploymentMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { - - @Override - public EmploymentEntity toEntity(final Employment domain) { - return EmploymentEntity.builder() - .employeeId(domain.employmentDetails().employeeId().getId()) - .employerId(domain.employmentDetails().employerId().getId()) - .employmentStatus(domain.employmentDetails().employmentStatus()) - .build(); - } - - @Override - public Employment toDomain(final EmploymentEntity entity) { - return Employment.WithIdBuilder() - .employmentId(EmploymentId.of(entity.getId())) - .employmentDetails(employmentDetails(entity)) - .build(); - } - - private EmploymentDetails employmentDetails(final EmploymentEntity entity) { - return EmploymentDetails.WithDateBuilder() - .employeeId(EmployeeId.of(entity.getEmployeeId())) - .employerId(EmployerId.of(entity.getEmployerId())) - .employmentStatus(entity.getEmploymentStatus()) - .createdAt(entity.getCreatedAt()) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryDSLEmploymentRepository.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryDSLEmploymentRepository.java deleted file mode 100644 index 290ea87d..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryDSLEmploymentRepository.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.querydsl.core.types.ConstructorExpression; -import com.querydsl.core.types.Projections; -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; -import com.stubee.persistencecommons.entity.EmploymentEntity; -import com.stubee.persistencecommons.support.QueryDSLHelperSupport; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; - -import static com.stubee.persistencecommons.entity.QCompanyEntity.companyEntity; -import static com.stubee.persistencecommons.entity.QEmploymentEntity.employmentEntity; -import static com.stubee.persistencecommons.support.ExpressionSupport.Employment.*; - -@Repository -@RequiredArgsConstructor -class QueryDSLEmploymentRepository implements QueryEmploymentRepository { - - private final QueryDSLHelperSupport queryDSLHelper; - private final JPAQueryFactory jpaQueryFactory; - - @Override - public List findInfoByEmployeeId(final Long employeeId) { - return jpaQueryFactory - .select(queryResponseProjection()) - .from(employmentEntity) - .innerJoin(companyEntity) - .on(employmentEntity.employerId.eq(companyEntity.id)) - .where(isEqualEmployee(employeeId)) - .fetch(); - } - - @Override - public boolean existsByEmployeeIdAndEmployerId(final Long employeeId, final Long employerId) { - return queryDSLHelper.existsByOption(employmentEntity, isEqualEmployeeAndEmployer(employeeId, employerId)) != null; - } - - private ConstructorExpression queryResponseProjection() { - return Projections.constructor( - EmploymentQueryResponse.class, - employmentEntity.employmentStatus, - - employmentEntity.employerId.stringValue(), - companyEntity.name, - companyEntity.description, - companyEntity.address, - companyEntity.imgUrl); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentAdapter.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentAdapter.java deleted file mode 100644 index f056d196..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.employmentapplication.outports.CheckEmploymentExistencePort; -import com.stubee.employmentapplication.outports.QueryEmploymentByIdPort; -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@Adapter -@RequiredArgsConstructor -class QueryEmploymentAdapter implements QueryEmploymentByIdPort, CheckEmploymentExistencePort { - - private final QueryEmploymentRepository queryEmploymentRepository; - - @Override - public List findInfoByEmployeeId(final Long employeeId) { - return queryEmploymentRepository.findInfoByEmployeeId(employeeId); - } - - @Override - public boolean check(Long employeeId, Long employerId) { - return queryEmploymentRepository.existsByEmployeeIdAndEmployerId(employeeId, employerId); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentRepository.java b/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentRepository.java deleted file mode 100644 index be00249d..00000000 --- a/Rolling-Adapters/persistence/employment-persistence/src/main/java/com/stubee/employmentpersistence/adapters/QueryEmploymentRepository.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.stubee.employmentpersistence.adapters; - -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; - -import java.util.List; - -interface QueryEmploymentRepository { - - List findInfoByEmployeeId(Long employeeId); - - boolean existsByEmployeeIdAndEmployerId(Long employeeId, Long employerId); - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/build.gradle b/Rolling-Adapters/persistence/logging-persistence/build.gradle deleted file mode 100644 index 6dcaf0c0..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:logging-application') - - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapter.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapter.java deleted file mode 100644 index 43eaf4d4..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.loggingapplication.outports.CommandLoggingPort; -import com.stubee.rollingdomains.logging.model.CompanyViewLogging; -import lombok.RequiredArgsConstructor; - -@Adapter -@RequiredArgsConstructor -class CommandCompanyViewLoggingAdapter implements CommandLoggingPort { - - private final CompanyViewLoggingMapper companyViewLoggingMapper; - private final CompanyViewLoggingRepository companyViewLoggingRepository; - - @Override - public CompanyViewLogging save(CompanyViewLogging logging) { - return companyViewLoggingMapper.toDomain(companyViewLoggingRepository.save(companyViewLoggingMapper.toEntity(logging))); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapter.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapter.java deleted file mode 100644 index c4713a61..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.loggingapplication.outports.CommandLoggingPort; -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import lombok.RequiredArgsConstructor; - -@Adapter -@RequiredArgsConstructor -class CommandHistoryLoggingAdapter implements CommandLoggingPort { - - private final HistoryLoggingJpaRepository historyLoggingJpaRepository; - private final HistoryLoggingMapper historyLoggingMapper; - - @Override - public HistoryLogging save(final HistoryLogging logging) { - return historyLoggingMapper.toDomain(historyLoggingJpaRepository.save(historyLoggingMapper.toEntity(logging))); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingMapper.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingMapper.java deleted file mode 100644 index 828ddf1d..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingMapper.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.persistencecommons.entity.CompanyViewLoggingEntity; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.logging.model.CompanyViewLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -@DomainObjectMapper -class CompanyViewLoggingMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { - - @Override - public CompanyViewLoggingEntity toEntity(CompanyViewLogging domain) { - return CompanyViewLoggingEntity.builder() - .memberId(domain.memberId().getId()) - .companyId(domain.companyId().getId()) - .isAnonymous(domain.isAnonymous()) - .build(); - } - - @Override - public CompanyViewLogging toDomain(CompanyViewLoggingEntity entity) { - return CompanyViewLogging.WithIdBuilder() - .id(entity.getId()) - .memberId(MemberId.of(entity.getMemberId())) - .companyId(CompanyId.of(entity.getCompanyId())) - .isAnonymous(entity.getIsAnonymous()) - .createdAt(entity.getCreatedAt()) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingRepository.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingRepository.java deleted file mode 100644 index c72096e0..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/CompanyViewLoggingRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.persistencecommons.entity.CompanyViewLoggingEntity; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -interface CompanyViewLoggingRepository extends JpaRepository { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingJpaRepository.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingJpaRepository.java deleted file mode 100644 index d16de0b9..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingJpaRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.persistencecommons.entity.HistoryLoggingEntity; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -interface HistoryLoggingJpaRepository extends CrudRepository { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingMapper.java b/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingMapper.java deleted file mode 100644 index 6192f76b..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/main/java/com/stubee/loggingpersistence/adapters/HistoryLoggingMapper.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.persistencecommons.entity.HistoryLoggingEntity; -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -@DomainObjectMapper -class HistoryLoggingMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { - - @Override - public HistoryLoggingEntity toEntity(final HistoryLogging domain) { - return HistoryLoggingEntity.builder() - .description(domain.description()) - .module(domain.module()) - .memberId(domain.memberId().getId()) - .isAnonymous(domain.isAnonymous()) - .build(); - } - - @Override - public HistoryLogging toDomain(final HistoryLoggingEntity entity) { - return HistoryLogging.WithIdBuilder() - .id(entity.getId()) - .description(entity.getDescription()) - .module(entity.getModule()) - .memberId(MemberId.of(entity.getMemberId())) - .isAnonymous(entity.getIsAnonymous()) - .createdAt(entity.getCreatedAt()) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/CompanyViewLoggingUtils.java b/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/CompanyViewLoggingUtils.java deleted file mode 100644 index b5141a4a..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/CompanyViewLoggingUtils.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.loggingpersistence; - -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.logging.model.CompanyViewLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -public abstract class CompanyViewLoggingUtils { - - public static CompanyViewLogging create(MemberId memberId, CompanyId companyId) { - return CompanyViewLogging.ExceptIdBuilder() - .memberId(memberId) - .companyId(companyId) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/HistoryLoggingUtils.java b/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/HistoryLoggingUtils.java deleted file mode 100644 index 1e99acd7..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/HistoryLoggingUtils.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.loggingpersistence; - -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -public abstract class HistoryLoggingUtils { - - public static HistoryLogging create(String description, String module, MemberId memberId) { - return HistoryLogging.ExceptIdBuilder() - .description(description) - .module(module) - .memberId(memberId) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapterTest.java b/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapterTest.java deleted file mode 100644 index b5a1f74b..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandCompanyViewLoggingAdapterTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.loggingpersistence.CompanyViewLoggingUtils; -import com.stubee.persistencecommons.PersistenceAdapterTest; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.logging.model.CompanyViewLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -@PersistenceAdapterTest -@ContextConfiguration(classes = {CommandCompanyViewLoggingAdapter.class, CompanyViewLoggingMapper.class, CompanyViewLoggingRepository.class}) -public class CommandCompanyViewLoggingAdapterTest { - - @Autowired - private CommandCompanyViewLoggingAdapter commandCompanyViewLoggingAdapter; - - @Autowired - private CompanyViewLoggingRepository companyViewLoggingRepository; - - @Test - @DisplayName(value = "기업조회 로깅 생성 성공") - void COMPANY_VIEW_LOGGING_생성_성공() { - //given - CompanyViewLogging companyViewLogging = CompanyViewLoggingUtils.create( - MemberId.of(-1L), - CompanyId.of(1L)); - - //when - Long id = commandCompanyViewLoggingAdapter.save(companyViewLogging).id(); - - //then - assertTrue(companyViewLoggingRepository.existsById(id)); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapterTest.java b/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapterTest.java deleted file mode 100644 index 975c3639..00000000 --- a/Rolling-Adapters/persistence/logging-persistence/src/test/java/com/stubee/loggingpersistence/adapters/CommandHistoryLoggingAdapterTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.stubee.loggingpersistence.adapters; - -import com.stubee.loggingpersistence.HistoryLoggingUtils; -import com.stubee.persistencecommons.PersistenceAdapterTest; -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.junit.jupiter.api.Assertions.assertTrue; - -@PersistenceAdapterTest -@ContextConfiguration(classes = {CommandHistoryLoggingAdapter.class, HistoryLoggingMapper.class, HistoryLoggingJpaRepository.class}) -public class CommandHistoryLoggingAdapterTest { - - @Autowired - private CommandHistoryLoggingAdapter commandHistoryLoggingAdapter; - - @Autowired - private HistoryLoggingJpaRepository historyLoggingJpaRepository; - - @Test - @DisplayName(value = "히스토리 로깅 생성 성공") - void HISTORY_LOGGING_생성_성공() { - //given - HistoryLogging historyLogging = HistoryLoggingUtils.create( - "연봉순위 조회", - "WEB", - MemberId.of(-1L)); - - //when - Long id = commandHistoryLoggingAdapter.save(historyLogging).id(); - - //then - assertTrue(historyLoggingJpaRepository.existsById(id)); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/build.gradle b/Rolling-Adapters/persistence/member-persistence/build.gradle deleted file mode 100644 index ed2453c3..00000000 --- a/Rolling-Adapters/persistence/member-persistence/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:member-application') - - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/CommandMemberAdapter.java b/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/CommandMemberAdapter.java deleted file mode 100644 index 4d059db8..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/CommandMemberAdapter.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.stubee.memberpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.memberapplication.outports.CommandMemberPort; -import com.stubee.persistencecommons.entity.MemberEntity; -import com.stubee.rollingdomains.domain.member.events.MemberRegisteredEvent; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberProfile; -import lombok.RequiredArgsConstructor; -import org.springframework.context.ApplicationEventPublisher; - -@Adapter -@RequiredArgsConstructor -class CommandMemberAdapter implements CommandMemberPort { - - private final MemberJpaRepository memberJpaRepository; - private final MemberMapper memberMapper; - private final ApplicationEventPublisher applicationEventPublisher; - - @Override - public Member saveWithId(final Member member) { - return save(memberMapper.toEntityWithId(member)); - } - - @Override - public Member saveExceptId(final Member member) { - return save(memberMapper.toEntity(member)); - } - - private Member save(final MemberEntity memberEntity) { - return memberMapper.toDomain(memberJpaRepository.save(memberEntity)); - } - - @Override - public Member saveOrUpdate(final MemberProfile memberProfile) { - final Member member = memberJpaRepository.findBySocialIdAndLoginType(memberProfile.socialId(), - memberProfile.loginType()) - .map(memberMapper::toDomain) - .orElse(null); - - if(member == null) { - return saveMember(memberProfile); - } else { - return updateMember(member, memberProfile); - } - } - - private Member saveMember(final MemberProfile memberProfile) { - publishMemberRegisteredEvent(memberProfile.email()); - - return saveExceptId(memberProfile.toMember()); - } - - private Member updateMember(final Member member, final MemberProfile memberProfile) { - member.isEqualLoginType(memberProfile.loginType()); - - return saveWithId(member.updateLoginId(memberProfile.socialLoginId())); - } - - private void publishMemberRegisteredEvent(final String memberEmail) { - if(memberEmail!=null) { - applicationEventPublisher.publishEvent(MemberRegisteredEvent.create(memberEmail)); - } - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberJpaRepository.java b/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberJpaRepository.java deleted file mode 100644 index 6be2b714..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberJpaRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.stubee.memberpersistence.adapters; - -import com.stubee.persistencecommons.entity.MemberEntity; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import java.util.Optional; - -@Repository -interface MemberJpaRepository extends JpaRepository { - - Optional findBySocialIdAndLoginType(String socialId, LoginType loginType); - - boolean existsByNickName(String nickname); - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/QueryMemberAdapter.java b/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/QueryMemberAdapter.java deleted file mode 100644 index 54036335..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/QueryMemberAdapter.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.memberpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.memberapplication.outports.QueryMemberPort; -import com.stubee.rollingdomains.domain.member.model.Member; -import lombok.RequiredArgsConstructor; - -import java.util.Optional; - -@Adapter -@RequiredArgsConstructor -class QueryMemberAdapter implements QueryMemberPort { - - private final MemberJpaRepository memberJpaRepository; - private final MemberMapper memberMapper; - - @Override - public Optional findById(final Long memberId) { - return Optional.ofNullable(memberMapper.toDomain( - memberJpaRepository.findById(memberId).orElse(null))); - } - - @Override - public boolean check(final String nickname) { - return memberJpaRepository.existsByNickName(nickname); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/MemberTestUtils.java b/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/MemberTestUtils.java deleted file mode 100644 index 0b42a17f..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/MemberTestUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.stubee.memberpersistence; - -import com.stubee.persistencecommons.entity.MemberEntity; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberDetails; -import com.stubee.rollingdomains.domain.member.model.SocialDetails; - -import static org.junit.jupiter.api.Assertions.*; - -public abstract class MemberTestUtils { - - public static Member createDomain(String socialId, String socialLoginId, LoginType loginType, String email, String name, String imageUrl) { - return Member.ExceptIdBuilder() - .memberDetails(MemberDetails.OnlyWithRoleBuilder() - .memberRole(MemberRole.TEMP) - .build()) - .socialDetails(SocialDetails.AllArgsBuilder() - .socialId(socialId) - .socialLoginId(socialLoginId) - .loginType(loginType) - .email(email) - .name(name) - .imageUrl(imageUrl) - .build()) - .build(); - } - - public static MemberEntity createEntity(String socialId, String socialLoginId, LoginType loginType, String email, String name, String imageUrl) { - return MemberEntity.builder() - .memberRole(MemberRole.TEMP) - .socialId(socialId) - .socialLoginId(socialLoginId) - .loginType(loginType) - .email(email) - .name(name) - .imageUrl(imageUrl) - .build(); - } - - public static void isEqual(Member domain, MemberEntity entity) { - assertEquals(domain.memberDetails().memberRole(), entity.getMemberRole()); - assertEquals(domain.memberDetails().nickName(), entity.getNickName()); - - assertEquals(domain.socialDetails().socialId(), entity.getSocialId()); - assertEquals(domain.socialDetails().socialLoginId(), entity.getSocialLoginId()); - assertEquals(domain.socialDetails().loginType(), entity.getLoginType()); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/CommandMemberAdapterTest.java b/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/CommandMemberAdapterTest.java deleted file mode 100644 index 89238e4b..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/CommandMemberAdapterTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.stubee.memberpersistence.adapters; - -import com.stubee.memberpersistence.MemberTestUtils; -import com.stubee.persistencecommons.PersistenceAdapterTest; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.junit.jupiter.api.Assertions.*; - -@PersistenceAdapterTest -@ContextConfiguration(classes = {CommandMemberAdapter.class, MemberMapper.class, MemberJpaRepository.class}) -public class CommandMemberAdapterTest { - - @Autowired - private CommandMemberAdapter commandMemberAdapter; - - @Autowired - private MemberJpaRepository memberJpaRepository; - - @Test - @DisplayName("Member 생성 성공") - void MEMBER_생성_성공() { - //given - Member member = MemberTestUtils.createDomain( - "111111", - "suw0n", - LoginType.GITHUB, - "최수원", - "rolling@gmail.com", - null); - - //when - MemberId id = commandMemberAdapter.saveExceptId(member).memberId(); - - //then - assertTrue(memberJpaRepository.existsById(id.getId())); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/MemberMapperTest.java b/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/MemberMapperTest.java deleted file mode 100644 index 451f13c4..00000000 --- a/Rolling-Adapters/persistence/member-persistence/src/test/java/com/stubee/memberpersistence/adapters/MemberMapperTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.stubee.memberpersistence.adapters; - -import com.stubee.memberpersistence.MemberTestUtils; -import com.stubee.persistencecommons.entity.MemberEntity; -import com.stubee.persistencecommons.mapper.DomainObjectMapper; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.model.Member; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; - -public class MemberMapperTest { - - private DomainObjectMapper memberMapper; - - @BeforeEach - void before() { - memberMapper = new MemberMapper(); - } - - @Test - @DisplayName(value = "Domain To Entity 변환 성공") - void test() { - Member domain = MemberTestUtils.createDomain( - "111111", - "suw0n", - LoginType.GITHUB, - "최수원", - "rolling@gmail.com", - null); - - MemberEntity entity = memberMapper.toEntity(domain); - - assertDoesNotThrow(() -> MemberTestUtils.isEqual(domain, entity)); - } - - @Test - @DisplayName(value = "Entity To Domain 변환 성공") - void test2() { - MemberEntity entity = MemberTestUtils.createEntity( - "111111", - "suw0n", - LoginType.GITHUB, - "최수원", - "rolling@gmail.com", - null); - - Member domain = memberMapper.toDomain(entity); - - assertDoesNotThrow(() -> MemberTestUtils.isEqual(domain, entity)); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/build.gradle b/Rolling-Adapters/persistence/persistence-commons/build.gradle deleted file mode 100644 index 41b04545..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/build.gradle +++ /dev/null @@ -1,15 +0,0 @@ -plugins { - id "java-library" - id "java-test-fixtures" - id "maven-publish" -} - -dependencies { - implementation 'org.springframework:spring-context:6.0.9' - - implementation 'io.hypersistence:hypersistence-utils-hibernate-60:3.6.0' - - testFixturesImplementation 'org.springframework.boot:spring-boot-starter-data-jpa' - testFixturesImplementation 'org.springframework.boot:spring-boot-test-autoconfigure:3.1.0' - testFixturesImplementation 'org.springframework:spring-test:6.0.6' -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/annotations/DomainObjectMapper.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/annotations/DomainObjectMapper.java deleted file mode 100644 index da3d8117..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/annotations/DomainObjectMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.persistencecommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface DomainObjectMapper { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/EmploymentEntity.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/EmploymentEntity.java deleted file mode 100644 index bae2bc4a..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/EmploymentEntity.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.stubee.persistencecommons.entity; - -import com.stubee.persistencecommons.entity.base.BaseTSIDEntity; -import com.stubee.rollingdomains.domain.employment.consts.EmploymentStatus; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; -import lombok.*; -import org.hibernate.annotations.CreationTimestamp; - -import java.time.LocalDateTime; - -@Entity -@Table(name = "tbl_employment") -@Getter -@Builder -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@AllArgsConstructor -public class EmploymentEntity extends BaseTSIDEntity { - - @NotNull - private Long employeeId; - - @NotNull - private Long employerId; - - @NotNull - @Enumerated(value = EnumType.STRING) - private EmploymentStatus employmentStatus; - - @CreationTimestamp - private LocalDateTime createdAt; - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseEntity.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseEntity.java deleted file mode 100644 index a651866e..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseEntity.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.stubee.persistencecommons.entity.base; - -import io.hypersistence.utils.hibernate.id.Tsid; -import jakarta.persistence.Id; -import jakarta.persistence.MappedSuperclass; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.experimental.SuperBuilder; - -@Getter -@SuperBuilder -@MappedSuperclass -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public abstract class BaseEntity extends BaseTimeEntity { - - @Id - @Tsid - private Long id; - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/mapper/DomainObjectMapper.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/mapper/DomainObjectMapper.java deleted file mode 100644 index 14d24835..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/mapper/DomainObjectMapper.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.persistencecommons.mapper; - -public interface DomainObjectMapper { - - E toEntity(D domain); - - D toDomain(E entity); - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/ExpressionSupport.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/ExpressionSupport.java deleted file mode 100644 index 0562c977..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/ExpressionSupport.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.stubee.persistencecommons.support; - -import com.querydsl.core.types.dsl.BooleanExpression; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; - -import static com.stubee.persistencecommons.entity.QCompanyEntity.companyEntity; -import static com.stubee.persistencecommons.entity.QEmploymentEntity.employmentEntity; -import static com.stubee.persistencecommons.entity.QStoryEntity.storyEntity; - -public class ExpressionSupport { - - public static class Company { - - public static BooleanExpression isAccepted() { - return companyEntity.companyStatus.eq(CompanyStatus.ACCEPTED); - } - - public static BooleanExpression isEqualId(final Long id) { - return companyEntity.id.eq(id); - } - - public static BooleanExpression isEqualRegistrant(final Long registrantId) { - return companyEntity.registrantId.eq(registrantId).and(isAccepted()); - } - - public static BooleanExpression isContainingName(final String name) { - return companyEntity.name.contains(name).and(isAccepted()); - } - - public static BooleanExpression isEqualName(final String name) { - return companyEntity.name.eq(name).and(isAccepted()); - } - - } - - public static class Employment { - - public static BooleanExpression isEqualEmployee(final Long employeeId) { - return employmentEntity.employeeId.eq(employeeId); - } - - public static BooleanExpression isEqualEmployeeAndEmployer(final Long employeeId, final Long employerId) { - return isEqualEmployee(employeeId).and(isEqualEmployer(employerId)); - } - - private static BooleanExpression isEqualEmployer(final Long employerId) { - return employmentEntity.employerId.eq(employerId); - } - - } - - public static class Story { - - public static BooleanExpression isEqualId(final Long id) { - return storyEntity.id.eq(id); - } - - public static BooleanExpression isEqualAuthor(final Long memberId) { - return storyEntity.memberId.eq(memberId); - } - - public static BooleanExpression isEqualCompany(final Long companyId) { - return storyEntity.companyId.eq(companyId); - } - - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/OrderByNull.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/OrderByNull.java deleted file mode 100644 index b4d1e11a..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/OrderByNull.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.stubee.persistencecommons.support; - -import com.querydsl.core.types.NullExpression; -import com.querydsl.core.types.Order; -import com.querydsl.core.types.OrderSpecifier; - -public class OrderByNull extends OrderSpecifier { - - public static final OrderByNull DEFAULT = new OrderByNull(); - - private OrderByNull() { - super(Order.ASC, NullExpression.DEFAULT, NullHandling.Default); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/QueryDSLHelperSupport.java b/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/QueryDSLHelperSupport.java deleted file mode 100644 index dd40c456..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/support/QueryDSLHelperSupport.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.stubee.persistencecommons.support; - -import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.Predicate; -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.stubee.rollingdomains.common.model.PageRequest; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@RequiredArgsConstructor -public class QueryDSLHelperSupport { - - private final JPAQueryFactory jpaQueryFactory; - - public T findById(EntityPath target, Predicate id) { - return jpaQueryFactory - .selectFrom(target) - .where(id) - .fetchOne(); - } - - public Integer existsByOption(EntityPath target, Predicate option) { - return jpaQueryFactory - .selectOne() - .from(target) - .where(option) - .fetchFirst(); - } - - public List findByOptionWithPagination(EntityPath target, Predicate option, PageRequest pageRequest, OrderSpecifier order) { - return jpaQueryFactory - .selectFrom(target) - .where(option) - .orderBy(order) - .offset((pageRequest.page()-1)*pageRequest.size()) - .limit(pageRequest.size()) - .fetch(); - } - - public List findWithOrderAndLimit(EntityPath target, OrderSpecifier order, int limit) { - return jpaQueryFactory - .selectFrom(target) - .orderBy(order) - .limit(limit) - .fetch(); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/testFixtures/java/com/stubee/persistencecommons/PersistenceAdapterTest.java b/Rolling-Adapters/persistence/persistence-commons/src/testFixtures/java/com/stubee/persistencecommons/PersistenceAdapterTest.java deleted file mode 100644 index 2a1d2993..00000000 --- a/Rolling-Adapters/persistence/persistence-commons/src/testFixtures/java/com/stubee/persistencecommons/PersistenceAdapterTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.stubee.persistencecommons; - -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.test.context.TestPropertySource; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@DataJpaTest -@EnableJpaRepositories -@EntityScan("com.stubee.persistencecommons") -@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) -@TestPropertySource("classpath:application.yml") -@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface PersistenceAdapterTest { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/build.gradle b/Rolling-Adapters/persistence/review-persistence/build.gradle deleted file mode 100644 index a11b7b4a..00000000 --- a/Rolling-Adapters/persistence/review-persistence/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:review-application') - - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapter.java b/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapter.java deleted file mode 100644 index 9873bcb7..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.reviewapplication.outports.command.CommandStoryPort; -import com.stubee.rollingdomains.domain.story.model.Story; -import com.stubee.rollingdomains.domain.story.model.StoryId; -import lombok.RequiredArgsConstructor; - -@Adapter -@RequiredArgsConstructor -class CommandStoryAdapter implements CommandStoryPort { - - private final CommandStoryJpaRepository commandStoryJpaRepository; - private final StoryMapper storyMapper; - - @Override - public Story save(final Story story) { - return storyMapper.toDomain(commandStoryJpaRepository.save(storyMapper.toEntity(story))); - } - - @Override - public void deleteById(final StoryId storyId) { - commandStoryJpaRepository.deleteById(storyId.getId()); - } - - @Override - public Story update(final Story story) { - return storyMapper.toDomain(commandStoryJpaRepository.save(storyMapper.toEntityWithId(story))); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryJpaRepository.java b/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryJpaRepository.java deleted file mode 100644 index 7923ae34..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/CommandStoryJpaRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.stubee.persistencecommons.entity.StoryEntity; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -interface CommandStoryJpaRepository extends CrudRepository { -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryDSLStoryRepository.java b/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryDSLStoryRepository.java deleted file mode 100644 index 89251657..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryDSLStoryRepository.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.querydsl.core.types.ConstructorExpression; -import com.querydsl.core.types.Projections; -import com.querydsl.jpa.impl.JPAQueryFactory; -import com.stubee.persistencecommons.entity.StoryEntity; -import com.stubee.persistencecommons.support.QueryDSLHelperSupport; -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; - -import static com.stubee.persistencecommons.entity.QCompanyEntity.companyEntity; -import static com.stubee.persistencecommons.entity.QMemberEntity.memberEntity; -import static com.stubee.persistencecommons.entity.QStoryEntity.storyEntity; -import static com.stubee.persistencecommons.support.ExpressionSupport.Story.*; - -@Repository -@RequiredArgsConstructor -class QueryDSLStoryRepository implements QueryStoryRepository { - - private final QueryDSLHelperSupport queryDSLHelper; - private final JPAQueryFactory jpaQueryFactory; - - @Override - public StoryEntity findById(final Long id) { - return queryDSLHelper.findById(storyEntity, isEqualId(id)); - } - - @Override - public StoryQueryByCompanyResponse findInfoById(final Long id) { - return jpaQueryFactory - .select(queryByCompanyResponse()) - .from(storyEntity) - .innerJoin(memberEntity) - .on(storyEntity.memberId.eq(memberEntity.id)) - .where(isEqualId(id)) - .fetchOne(); - } - - @Override - public StoryStatusResponse findStatusByMemberId(final Long memberId) { - return jpaQueryFactory - .select(queryStatusProjection()) - .from(storyEntity) - .where(isEqualAuthor(memberId)) - .orderBy(storyEntity.modifiedAt.desc()) - .fetchOne(); - } - - @Override - public List findByMemberId(final Long memberId, final PageRequest pageRequest) { - return jpaQueryFactory - .select(queryByMemberResponse()) - .from(storyEntity) - .innerJoin(companyEntity) - .on(storyEntity.companyId.eq(companyEntity.id)) - /*.innerJoin(employmentEntity) - .on(companyEntity.id.eq(employmentEntity.employerId))*/ - .where(isEqualAuthor(memberId)/*.and(isEqualEmployee(memberId))*/) - .orderBy(storyEntity.createdAt.desc()) - .offset((pageRequest.page()-1)*pageRequest.size()) - .limit(pageRequest.size()) - .fetch(); - } - - @Override - public List findByCompanyId(final Long companyId, final PageRequest pageRequest) { - return jpaQueryFactory - .select(queryByCompanyResponse()) - .from(storyEntity) - .innerJoin(memberEntity) - .on(storyEntity.memberId.eq(memberEntity.id)) - .where(isEqualCompany(companyId)) - .orderBy(storyEntity.createdAt.desc()) - .offset((pageRequest.page()-1)*pageRequest.size()) - .limit(pageRequest.size()) - .fetch(); - } - - @Override - public List findAll(final PageRequest pageRequest) { - return queryDSLHelper.findByOptionWithPagination(storyEntity, null, pageRequest, storyEntity.createdAt.desc()); - } - - private ConstructorExpression queryStatusProjection() { - return Projections.constructor( - StoryStatusResponse.class, - storyEntity.count(), - storyEntity.modifiedAt.max()); - } - - private ConstructorExpression queryByMemberResponse() { - return Projections.constructor( - StoryQueryByMemberResponse.class, - storyEntity.id.stringValue(), - storyEntity.position, - storyEntity.schoolLife, - storyEntity.preparationCourse, - storyEntity.employmentProcess, - storyEntity.interviewQuestion, - storyEntity.mostImportantThing, - - storyEntity.welfare, - storyEntity.commuteTime, - storyEntity.meal, - storyEntity.advantages, - storyEntity.disAdvantages, - storyEntity.etc, - - storyEntity.totalGrade, - storyEntity.salaryAndBenefits, - storyEntity.workLifeBalance, - storyEntity.organizationalCulture, - storyEntity.careerAdvancement, - storyEntity.createdAt, - storyEntity.modifiedAt, - - companyEntity.id.stringValue(), - companyEntity.name, - companyEntity.logoUrl/*, - - employmentEntity.employmentStatus*/); - } - - private ConstructorExpression queryByCompanyResponse() { - return Projections.constructor( - StoryQueryByCompanyResponse.class, - storyEntity.id.stringValue(), - storyEntity.position, - storyEntity.schoolLife, - storyEntity.preparationCourse, - storyEntity.employmentProcess, - storyEntity.interviewQuestion, - storyEntity.mostImportantThing, - - storyEntity.welfare, - storyEntity.commuteTime, - storyEntity.meal, - storyEntity.advantages, - storyEntity.disAdvantages, - storyEntity.etc, - - storyEntity.totalGrade, - storyEntity.salaryAndBenefits, - storyEntity.workLifeBalance, - storyEntity.organizationalCulture, - storyEntity.careerAdvancement, - storyEntity.createdAt, - storyEntity.modifiedAt, - - memberEntity.id.stringValue(), - memberEntity.nickName, - memberEntity.socialLoginId, - memberEntity.imageUrl); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryAdapter.java b/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryAdapter.java deleted file mode 100644 index b286702d..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryAdapter.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; -import com.stubee.reviewapplication.outports.query.QueryStoryPort; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.rollingdomains.domain.story.model.Story; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; -import java.util.Optional; - -@Adapter -@RequiredArgsConstructor -class QueryStoryAdapter implements QueryStoryPort { - - private final QueryStoryRepository queryStoryRepository; - private final StoryMapper storyMapper; - - @Override - public Optional findById(final Long reviewId) { - return Optional.ofNullable(storyMapper.toDomain(queryStoryRepository.findById(reviewId))); - } - - @Override - public Optional findInfoById(final Long reviewId) { - return Optional.ofNullable(queryStoryRepository.findInfoById(reviewId)); - } - - @Override - public List findByMemberId(final Long memberId, PageRequest pageRequest) { - return queryStoryRepository.findByMemberId(memberId, pageRequest); - } - - @Override - public List findByCompanyId(final Long companyId, PageRequest pageRequest) { - return queryStoryRepository.findByCompanyId(companyId, pageRequest); - } - - @Override - public StoryStatusResponse getStatusByMemberId(final Long memberId) { - return queryStoryRepository.findStatusByMemberId(memberId); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryRepository.java b/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryRepository.java deleted file mode 100644 index 5f2fc08a..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/QueryStoryRepository.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; -import com.stubee.persistencecommons.entity.StoryEntity; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import com.stubee.rollingdomains.common.model.PageRequest; - -import java.util.List; - -interface QueryStoryRepository { - - StoryEntity findById(Long reviewId); - - StoryQueryByCompanyResponse findInfoById(Long reviewId); - - StoryStatusResponse findStatusByMemberId(Long memberId); - - List findByMemberId(Long memberId, PageRequest pageRequest); - - List findByCompanyId(Long companyId, PageRequest pageRequest); - - List findAll(PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/StoryTestUtils.java b/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/StoryTestUtils.java deleted file mode 100644 index 23e33575..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/StoryTestUtils.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.reviewpersistence; - -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.domain.story.model.*; - -public abstract class StoryTestUtils { - - public static Story create(String pros, String cons, String welfare, String position, ReviewGrades reviewGrades) { - return Story.ExceptIdBuilder() - .storyDetails(StoryDetails.ExceptDateBuilder() - .authorId(AuthorId.of(1L)) - .companyId(CompanyId.of(100L)) - .corporationDetails(CorporationDetails.builder() - .pros(pros) - .cons(cons) - .welfare(welfare) - .position(position) - .build()) - .employmentDetails(EmploymentDetails.builder() - .build()) - .build()) - .reviewGrades(reviewGrades) - .build(); - } - - - -} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapterTest.java b/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapterTest.java deleted file mode 100644 index aabf9f46..00000000 --- a/Rolling-Adapters/persistence/review-persistence/src/test/java/com/stubee/reviewpersistence/adapters/CommandStoryAdapterTest.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.stubee.reviewpersistence.adapters; - -import com.stubee.persistencecommons.PersistenceAdapterTest; -import com.stubee.reviewpersistence.StoryTestUtils; -import com.stubee.rollingdomains.domain.story.model.*; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; - -import static org.junit.jupiter.api.Assertions.*; - -@PersistenceAdapterTest -@ContextConfiguration(classes = {CommandStoryAdapter.class, StoryMapper.class, CommandStoryJpaRepository.class}) -public class CommandStoryAdapterTest { - - @Autowired - private CommandStoryAdapter commandStoryAdapter; - - @Autowired - private CommandStoryJpaRepository storyJpaRepository; - - @Test - @DisplayName(value = "Story 생성 성공") - void STORY_생성_성공() { - //given - String pros = "연봉이 높습니다"; - String cons = "근처에 맛집이 없습니다"; - String welfare = "회사 근처 지역 거주시 매달 50만원 지원"; - String position = "백엔드 개발자"; - ReviewGrades reviewGrades = ReviewGrades.ExceptTotalBuilder() - .salaryAndBenefits(5.0) - .workLifeBalance(5.0) - .organizationalCulture(5.0) - .careerAdvancement(5.0) - .build(); - Story story = StoryTestUtils.create(pros, cons, welfare, position, reviewGrades); - - //when - StoryId id = commandStoryAdapter.save(story) - .storyId(); - - //then - assertTrue(storyJpaRepository.existsById(id.getId())); - } - - @Test - @DisplayName(value = "Story 삭제 성공") - void STORY_삭제_성공() { - //given - String pros = "연봉이 높습니다"; - String cons = "근처에 맛집이 없습니다"; - String welfare = "회사 근처 지역 거주시 매달 50만원 지원"; - String position = "백엔드 개발자"; - ReviewGrades reviewGrades = ReviewGrades.ExceptTotalBuilder() - .salaryAndBenefits(5.0) - .workLifeBalance(5.0) - .organizationalCulture(5.0) - .careerAdvancement(5.0) - .build(); - StoryId id = commandStoryAdapter.save(StoryTestUtils.create(pros, cons, welfare, position, reviewGrades)) - .storyId(); - - //when - commandStoryAdapter.deleteById(id); - - //then - assertFalse(storyJpaRepository.existsById(id.getId())); - } - - @Test - @DisplayName(value = "Story 수정 성공") - void STORY_수정_성공() { - //given - String pros = "연봉이 높습니다"; - String cons = "근처에 맛집이 없습니다"; - String welfare = "회사 근처 지역 거주시 매달 50만원 지원"; - String position = "백엔드 개발자"; - ReviewGrades reviewGrades = ReviewGrades.ExceptTotalBuilder() - .salaryAndBenefits(5.0) - .workLifeBalance(5.0) - .organizationalCulture(5.0) - .careerAdvancement(5.0) - .build(); - - Story savedStory = commandStoryAdapter.save(StoryTestUtils.create(pros, cons, welfare, position, reviewGrades)); - - ReviewGrades modifiedReviewGrades = ReviewGrades.ExceptTotalBuilder() - .salaryAndBenefits(4.0) - .workLifeBalance(4.0) - .organizationalCulture(4.0) - .careerAdvancement(4.0) - .build(); - CorporationDetails modifiedCorporationDetails = CorporationDetails.builder() - .pros(pros) - .cons(cons) - .welfare(welfare) - .position(position) - .build(); - - //when - Story modifiedStory = commandStoryAdapter.update(savedStory.update( - savedStory.storyDetails().employmentDetails(), - modifiedCorporationDetails, - modifiedReviewGrades)); - - //then - assertEquals(modifiedStory.reviewGrades(), modifiedReviewGrades); - assertEquals(modifiedStory.storyDetails().corporationDetails(), modifiedCorporationDetails); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/security/auth/build.gradle b/Rolling-Adapters/security/auth/build.gradle deleted file mode 100644 index b0436786..00000000 --- a/Rolling-Adapters/security/auth/build.gradle +++ /dev/null @@ -1,11 +0,0 @@ -dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:auth-application') - - implementation project(':Rolling-Adapters:adapters-commons') - - implementation 'org.springframework.boot:spring-boot:3.1.0' - - annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" -} \ No newline at end of file diff --git a/Rolling-Adapters/security/build.gradle b/Rolling-Adapters/security/build.gradle deleted file mode 100644 index ee58801b..00000000 --- a/Rolling-Adapters/security/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -subprojects { - - dependencies { - //HttpServletRequest - compileOnly 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5' - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/security/jwt/build.gradle b/Rolling-Adapters/security/jwt/build.gradle deleted file mode 100644 index 109e83f1..00000000 --- a/Rolling-Adapters/security/jwt/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:auth-application') - implementation project(':Rolling-Application:member-application') - - implementation project(':Rolling-Adapters:security:security-commons') - - implementation project(':Rolling-Adapters:adapters-commons') - - implementation 'io.jsonwebtoken:jjwt:0.9.1' - implementation 'javax.xml.bind:jaxb-api:2.3.1' - - implementation 'org.springframework.boot:spring-boot:3.1.0' - - implementation 'org.springframework:spring-web:6.0.6' - - annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" -} \ No newline at end of file diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/consts/JwtType.java b/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/consts/JwtType.java deleted file mode 100644 index 711114f0..00000000 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/consts/JwtType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.stubee.jwt.adapters.consts; - -public enum JwtType { - ACCESS, REFRESH -} \ No newline at end of file diff --git a/Rolling-Adapters/security/oauth/build.gradle b/Rolling-Adapters/security/oauth/build.gradle deleted file mode 100644 index fd29bbd1..00000000 --- a/Rolling-Adapters/security/oauth/build.gradle +++ /dev/null @@ -1,22 +0,0 @@ -dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:auth-application') - implementation project(':Rolling-Application:member-application') - implementation project(':Rolling-Application:application-commons') - - implementation project(':Rolling-Adapters:security:jwt') - implementation project(':Rolling-Adapters:security:security-commons') - - implementation project(':Rolling-Adapters:adapters-commons') - - //Security - implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' - implementation 'org.springframework.boot:spring-boot-starter-security' - - //ObjectMapper - implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.2' - - //Properties - annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" -} \ No newline at end of file diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/adapters/GetCurrentMemberAdapter.java b/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/adapters/GetCurrentMemberAdapter.java deleted file mode 100644 index 3dd79293..00000000 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/adapters/GetCurrentMemberAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.oauth.security.adapters; - -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.oauth.security.model.CustomMemberDetails; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.springframework.security.core.context.SecurityContextHolder; - -@Adapter -class GetCurrentMemberAdapter implements GetCurrentMemberPort { - - @Override - public Member getMember() { - return getMemberDetails().getMember(); - } - - @Override - public MemberId getMemberId() { - return getMemberDetails().getMemberId(); - } - - private CustomMemberDetails getMemberDetails() { - return ((CustomMemberDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal()); - } - -} \ No newline at end of file diff --git a/Rolling-Adapters/security/security-commons/build.gradle b/Rolling-Adapters/security/security-commons/build.gradle deleted file mode 100644 index 60e53909..00000000 --- a/Rolling-Adapters/security/security-commons/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation 'org.springframework.boot:spring-boot:3.1.0' -} \ No newline at end of file diff --git a/Rolling-Adapters/thirdparty/email-notification/build.gradle b/Rolling-Adapters/thirdparty/email-notification/build.gradle deleted file mode 100644 index c7f239b8..00000000 --- a/Rolling-Adapters/thirdparty/email-notification/build.gradle +++ /dev/null @@ -1,11 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:notification-application') - - implementation project(':Rolling-Adapters:adapters-commons') - - //JavaMailSender - implementation 'org.springframework.boot:spring-boot-starter-mail' - - //Properties - annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" -} \ No newline at end of file diff --git a/Rolling-Api/build.gradle b/Rolling-Api/build.gradle deleted file mode 100644 index 998c5873..00000000 --- a/Rolling-Api/build.gradle +++ /dev/null @@ -1,53 +0,0 @@ -dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:member-application') - runtimeOnly project(':Rolling-Adapters:persistence:member-persistence') - - implementation project(':Rolling-Application:company-application') - runtimeOnly project(':Rolling-Adapters:persistence:company-persistence') - - implementation project(':Rolling-Application:employment-application') - runtimeOnly project(':Rolling-Adapters:persistence:employment-persistence') - - implementation project(':Rolling-Application:review-application') - runtimeOnly project(':Rolling-Adapters:persistence:review-persistence') - - implementation project(':Rolling-Application:logging-application') - runtimeOnly project(':Rolling-Adapters:persistence:logging-persistence') - - implementation project(':Rolling-Application:application-commons') - runtimeOnly project(':Rolling-Adapters:persistence:persistence-commons') - - - implementation project(':Rolling-Application:auth-application') - implementation project(':Rolling-Adapters:security:auth') - implementation project(':Rolling-Adapters:security:jwt') - implementation project(':Rolling-Adapters:security:oauth') - implementation project(':Rolling-Adapters:security:security-commons') - - - implementation project(':Rolling-Application:news-application') - implementation project(':Rolling-Adapters:thirdparty:naver-news') - - implementation project(':Rolling-Application:file-application') - implementation project(':Rolling-Adapters:thirdparty:s3-file') - - implementation project(':Rolling-Application:notification-application') - implementation project(':Rolling-Adapters:thirdparty:email-notification') - - implementation project(':Rolling-Adapters:adapters-commons') - - implementation 'mysql:mysql-connector-java:8.0.33' - - implementation 'org.springframework.boot:spring-boot-starter-web' - - implementation 'io.projectreactor:reactor-core:3.5.4' - - implementation 'org.springframework.boot:spring-boot-starter-validation' - - implementation 'org.springframework.security:spring-security-core:6.0.2' - - //Swagger - implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4' -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/CertifyAlumniRequest.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/CertifyAlumniRequest.java deleted file mode 100644 index 03f6b0bb..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/CertifyAlumniRequest.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.stubee.rollingapi.domain.auth; - -record CertifyAlumniRequest( - String housemaster) {} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/RefreshTokenRequest.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/RefreshTokenRequest.java deleted file mode 100644 index 52abafb0..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/RefreshTokenRequest.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.stubee.rollingapi.domain.auth; - -import jakarta.validation.constraints.NotNull; - -record RefreshTokenRequest( - @NotNull String refreshToken) {} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/CommandEmploymentController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/CommandEmploymentController.java deleted file mode 100644 index e35405e4..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/CommandEmploymentController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.rollingapi.domain.employment; - -import com.stubee.employmentapplication.usecases.command.RegisterEmploymentUseCase; -import com.stubee.rollingdomains.domain.employment.model.Employment; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static org.springframework.http.HttpStatus.*; - -@Tag(name = "Command Employment", description = "Command Employment API") -@RestController -@RequestMapping(value = "/employment") -@RequiredArgsConstructor -public class CommandEmploymentController { - - private final RegisterEmploymentUseCase registerEmploymentUseCase; - - @Operation(description = "Employment 추가 (내 회사 추가)") - @PostMapping - @ResponseStatus(CREATED) - public Employment register(final @RequestBody @Validated RegisterEmploymentRequest request) { - return registerEmploymentUseCase.register(request.toCommand()); - } - -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/GetEmploymentExistenceRequest.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/GetEmploymentExistenceRequest.java deleted file mode 100644 index a7fb743f..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/GetEmploymentExistenceRequest.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.rollingapi.domain.employment; - -import com.stubee.employmentapplication.usecases.query.impl.GetEmploymentExistenceQuery; - -record GetEmploymentExistenceRequest( - Long employeeId, - Long employerId) { - public GetEmploymentExistenceQuery toQuery() { - return new GetEmploymentExistenceQuery(employeeId, employerId); - } -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/QueryEmploymentController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/QueryEmploymentController.java deleted file mode 100644 index bf1e0dd7..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/QueryEmploymentController.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.stubee.rollingapi.domain.employment; - -import com.stubee.employmentapplication.usecases.query.QueryEmploymentExistenceUseCase; -import com.stubee.employmentapplication.usecases.query.QueryMyEmploymentInfoListUseCase; -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@Tag(name = "Query Employment", description = "Query Employment API") -@RestController -@RequestMapping(value = "/employment") -@RequiredArgsConstructor -public class QueryEmploymentController { - - private final QueryMyEmploymentInfoListUseCase queryMyEmploymentInfoListUseCase; - private final QueryEmploymentExistenceUseCase queryEmploymentExistenceUseCase; - - @Operation(description = "내 Employment List 조회") - @GetMapping("/my") - public List getMy() { - return queryMyEmploymentInfoListUseCase.get(); - } - - @Operation(description = "Employment Existence 확인") - @GetMapping - public boolean checkExistence(final GetEmploymentExistenceRequest request) { - return queryEmploymentExistenceUseCase.get(request.toQuery()); - } - -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/RegisterEmploymentRequest.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/RegisterEmploymentRequest.java deleted file mode 100644 index 195a98d9..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/employment/RegisterEmploymentRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.stubee.rollingapi.domain.employment; - -import com.stubee.employmentapplication.usecases.command.RegisterEmploymentCommand; -import com.stubee.rollingdomains.domain.employment.consts.EmploymentStatus; -import jakarta.validation.constraints.NotNull; - -record RegisterEmploymentRequest( - @NotNull Long employerId, - @NotNull EmploymentStatus employmentStatus) { - public RegisterEmploymentCommand toCommand() { - return RegisterEmploymentCommand.create(employerId, employmentStatus); - } -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/CommandLoggingController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/CommandLoggingController.java deleted file mode 100644 index e64f3be0..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/CommandLoggingController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.rollingapi.domain.logging; - -import com.stubee.loggingapplication.usecases.PileUpLoggingUseCase; -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static org.springframework.http.HttpStatus.*; - -@Tag(name = "Command Logging", description = "Command Logging API") -@RestController -@RequestMapping(value = "/logging") -@RequiredArgsConstructor -public class CommandLoggingController { - - private final PileUpLoggingUseCase pileUpLoggingUseCase; - - @Operation(description = "logging 생성") - @PostMapping - @ResponseStatus(CREATED) - public HistoryLogging pileUp(final @RequestBody @Validated PileUpLoggingRequest request) { - return pileUpLoggingUseCase.pileUp(request.toCommand()); - } - -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/PileUpLoggingRequest.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/PileUpLoggingRequest.java deleted file mode 100644 index 4781f56a..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/logging/PileUpLoggingRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.stubee.rollingapi.domain.logging; - -import com.stubee.loggingapplication.outports.commands.PileUpHistoryLoggingCommand; -import jakarta.validation.constraints.NotBlank; - -record PileUpLoggingRequest( - @NotBlank String description, - @NotBlank String module, - Long memberId) { - public PileUpHistoryLoggingCommand toCommand() { - return PileUpHistoryLoggingCommand.create(description, module, memberId); - } -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/CommandMemberController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/CommandMemberController.java deleted file mode 100644 index 9719619c..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/CommandMemberController.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.rollingapi.domain.member; - -import com.stubee.memberapplication.usecases.command.ModifyNicknameUseCase; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.*; - -import static org.springframework.http.HttpStatus.*; - -@Tag(name = "Command Member", description = "Command Member API") -@RestController -@RequestMapping(value = "/member") -@RequiredArgsConstructor -public class CommandMemberController { - - private final ModifyNicknameUseCase modifyNicknameUseCase; - - @Operation(description = "Member NickName 수정") - @PatchMapping("/nickName") - @ResponseStatus(NO_CONTENT) - public void changeNickname(final @RequestBody @Validated ModifyNicknameRequest request) { - modifyNicknameUseCase.modify(request.toCommand()); - } - -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/QueryMemberController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/QueryMemberController.java deleted file mode 100644 index 1461b482..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/QueryMemberController.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.stubee.rollingapi.domain.member; - -import com.stubee.memberapplication.usecases.query.MemberResponse; -import com.stubee.memberapplication.usecases.query.QueryMemberByIdUseCase; -import com.stubee.memberapplication.usecases.query.QueryMyInfoUseCase; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; - -import static org.springframework.http.HttpStatus.*; - -@Tag(name = "Query Member", description = "Query Member API") -@RestController -@RequestMapping(value = "/member") -@RequiredArgsConstructor -public class QueryMemberController { - - private final QueryMyInfoUseCase queryMyInfoUseCase; - private final QueryMemberByIdUseCase queryMemberByIdUseCase; - - @Operation(description = "내 정보 조회") - @GetMapping("/my") - @ResponseStatus(OK) - public MemberResponse getMy() { - return queryMyInfoUseCase.get(); - } - - @Operation(description = "MemberId로 Member 정보 조회") - @GetMapping("/{id}") - @ResponseStatus(OK) - public MemberResponse getMemberById(final @PathVariable("id") Long memberId) { - return queryMemberByIdUseCase.get(memberId); - } - -} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/news/NewsController.java b/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/news/NewsController.java deleted file mode 100644 index abeb0dfa..00000000 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/news/NewsController.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.stubee.rollingapi.domain.news; - -import com.stubee.newsapplication.usecases.NewsUseCase; -import com.stubee.rollingdomains.common.model.PageRequest; -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; -import reactor.core.publisher.Mono; - -import static org.springframework.http.HttpStatus.*; - -@Tag(name = "News", description = "News API") -@RestController -@RequestMapping(value = "/news") -@RequiredArgsConstructor -public class NewsController { - - private final NewsUseCase newsUseCase; - - @Operation(description = "companyName으로 최신 뉴스 기사 조회") - @GetMapping("/{companyName}") - @ResponseStatus(OK) - public Mono getNewsByCompanyName(final @PathVariable String companyName, - final @ModelAttribute PageRequest pageRequest) { - return newsUseCase.getNewsByCompanyName(companyName, pageRequest); - } - -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/build.gradle b/Rolling-Application/application-commons/build.gradle deleted file mode 100644 index fa5d14dd..00000000 --- a/Rolling-Application/application-commons/build.gradle +++ /dev/null @@ -1,4 +0,0 @@ -dependencies { - implementation 'org.springframework:spring-tx:6.0.6' - implementation 'org.springframework:spring-context:6.0.6' -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncEventListener.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncEventListener.java deleted file mode 100644 index f7a53f9c..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncEventListener.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.scheduling.annotation.Async; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.event.TransactionalEventListener; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Async -@Transactional(propagation = Propagation.REQUIRES_NEW) -@TransactionalEventListener -@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface AsyncEventListener { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncTransactionalEventListener.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncTransactionalEventListener.java deleted file mode 100644 index 33081550..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/AsyncTransactionalEventListener.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.scheduling.annotation.Async; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.event.TransactionalEventListener; - -import java.lang.annotation.*; - -@Async -@Transactional(propagation = Propagation.NEVER) -@TransactionalEventListener -@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) -@Retention(RetentionPolicy.RUNTIME) -public @interface AsyncTransactionalEventListener { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/CommandService.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/CommandService.java deleted file mode 100644 index 9a7da6c6..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/CommandService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Service -@Transactional -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface CommandService { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/DomainService.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/DomainService.java deleted file mode 100644 index d78828ee..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/DomainService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.stereotype.Service; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Service -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface DomainService { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/ExternalService.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/ExternalService.java deleted file mode 100644 index ddc70306..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/ExternalService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.stereotype.Service; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Service -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface ExternalService { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/Listener.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/Listener.java deleted file mode 100644 index 81738c4d..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/Listener.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface Listener { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/QueryService.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/QueryService.java deleted file mode 100644 index 23186a91..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/annotations/QueryService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.applicationcommons.annotations; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Service -@Transactional(readOnly = true) -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -public @interface QueryService { -} \ No newline at end of file diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/ports/GetCurrentMemberPort.java b/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/ports/GetCurrentMemberPort.java deleted file mode 100644 index 0acfa321..00000000 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/ports/GetCurrentMemberPort.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.applicationcommons.ports; - -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -public interface GetCurrentMemberPort { - - Member getMember(); - - MemberId getMemberId(); - -} \ No newline at end of file diff --git a/Rolling-Application/auth-application/build.gradle b/Rolling-Application/auth-application/build.gradle deleted file mode 100644 index 8d3377e4..00000000 --- a/Rolling-Application/auth-application/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:member-application') - implementation project(':Rolling-Application:application-commons') - - implementation 'org.springframework:spring-context:6.0.6' - - implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5' -} \ No newline at end of file diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/CertifyAlumniUseCase.java b/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/CertifyAlumniUseCase.java deleted file mode 100644 index 3383aa9a..00000000 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/CertifyAlumniUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.authapplication.usecases; - -public interface CertifyAlumniUseCase { - - void certify(String name); - -} \ No newline at end of file diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenUseCase.java b/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenUseCase.java deleted file mode 100644 index dc7fc147..00000000 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.authapplication.usecases; - -public interface RefreshTokenUseCase { - - RefreshTokenResponse refresh(String refreshToken); - -} \ No newline at end of file diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/RefreshTokenApi.java b/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/RefreshTokenApi.java deleted file mode 100644 index 1cf8cfb3..00000000 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/RefreshTokenApi.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.stubee.authapplication.usecases.impl; - -import com.stubee.authapplication.outports.ParseTokenPort; -import com.stubee.authapplication.outports.ProvideTokenPort; -import com.stubee.authapplication.usecases.RefreshTokenResponse; -import com.stubee.authapplication.usecases.RefreshTokenUseCase; -import com.stubee.memberapplication.outports.QueryMemberPort; -import com.stubee.rollingdomains.domain.member.model.Member; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -class RefreshTokenApi implements RefreshTokenUseCase { - - private final ProvideTokenPort provideJwtPort; - private final ParseTokenPort parseJwtPort; - private final QueryMemberPort queryMemberPort; - - @Override - public RefreshTokenResponse refresh(final String refreshToken) { - final Long memberId = parseJwtPort.getSubjectFromRefreshToken(refreshToken); - - final Member member = queryMemberPort.getById(memberId); - - final String accessToken = provideJwtPort.generateAccessToken(member.memberId().getId(), member.memberDetails().memberRole()); - - return RefreshTokenResponse.of(accessToken); - } - -} \ No newline at end of file diff --git a/Rolling-Application/build.gradle b/Rolling-Application/build.gradle deleted file mode 100644 index 545d8fad..00000000 --- a/Rolling-Application/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -subprojects { - - bootJar { enabled = false } - jar { enabled = true } - - dependencies { - implementation project(':Rolling-Domains') - } - -} - -bootJar { enabled = false } -jar { enabled = true } \ No newline at end of file diff --git a/Rolling-Application/company-application/build.gradle b/Rolling-Application/company-application/build.gradle deleted file mode 100644 index 471d2cf2..00000000 --- a/Rolling-Application/company-application/build.gradle +++ /dev/null @@ -1,5 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') - - implementation 'org.springframework:spring-context:6.0.6' -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/command/CommandCompanyPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/command/CommandCompanyPort.java deleted file mode 100644 index 4c54df20..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/command/CommandCompanyPort.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.stubee.companyapplication.outports.command; - -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyId; - -import java.util.List; - -public interface CommandCompanyPort { - - Company register(Company company); - - void update(Company company); - - void updateAll(List companyList); - - void deleteById(CompanyId companyId); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyExistencePort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyExistencePort.java deleted file mode 100644 index 09625d9a..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyExistencePort.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -public interface CheckCompanyExistencePort { - - boolean check(Long companyId); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyNameDuplicationPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyNameDuplicationPort.java deleted file mode 100644 index 65b369d6..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyNameDuplicationPort.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -public interface CheckCompanyNameDuplicationPort { - - boolean check(String companyName); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyPort.java deleted file mode 100644 index 1497ebfd..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/CheckCompanyPort.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -public interface CheckCompanyPort extends CheckCompanyExistencePort, CheckCompanyNameDuplicationPort { -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByGradesPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByGradesPort.java deleted file mode 100644 index 5ed6242a..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByGradesPort.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -import com.stubee.rollingdomains.domain.company.model.Company; - -import java.util.List; - -public interface QueryCompanyByGradesPort { - - List getOrderBy(String gradeType); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByIdPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByIdPort.java deleted file mode 100644 index 9f400663..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyByIdPort.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import com.stubee.rollingdomains.domain.company.exception.CompanyNotFoundException; -import com.stubee.rollingdomains.domain.company.model.Company; - -import java.util.Optional; - -public interface QueryCompanyByIdPort { - - Optional findById(Long id); - - Optional findInfoById(Long id); - - default CompanyQueryResponse getInfoById(final Long id) { - return findInfoById(id) - .orElseThrow(() -> CompanyNotFoundException.EXCEPTION); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyPort.java deleted file mode 100644 index 30d4dc91..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyPort.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -public interface QueryCompanyPort extends QueryCompanyByIdPort, QueryCompanyWithPaginationPort, QueryCompanyByGradesPort { -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyWithPaginationPort.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyWithPaginationPort.java deleted file mode 100644 index 27c40891..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/outports/query/QueryCompanyWithPaginationPort.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.stubee.companyapplication.outports.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.rollingdomains.domain.company.model.Company; - -import java.util.List; - -public interface QueryCompanyWithPaginationPort { - - List findByNameContaining(String name, PageRequest pageRequest); - - List findByRegistrantId(Long registrantId, PageRequest pageRequest); - - List findAll(PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/services/CompanyDomainService.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/services/CompanyDomainService.java deleted file mode 100644 index f9e284bc..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/services/CompanyDomainService.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.stubee.companyapplication.services; - -import com.stubee.applicationcommons.annotations.DomainService; -import com.stubee.companyapplication.outports.command.CommandCompanyPort; -import com.stubee.companyapplication.outports.query.CheckCompanyPort; -import com.stubee.companyapplication.outports.query.QueryCompanyByIdPort; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; -import com.stubee.rollingdomains.domain.company.exception.CompanyNotFoundException; -import com.stubee.rollingdomains.domain.company.exception.DuplicatedCompanyNameException; -import com.stubee.rollingdomains.domain.company.model.*; -import com.stubee.rollingdomains.domain.company.services.*; -import lombok.RequiredArgsConstructor; - -import java.util.List; -import java.util.Objects; - -@DomainService -@RequiredArgsConstructor -class CompanyDomainService implements - RegisterCompanyService, - ModifyCompanyService, - DeleteCompanyService, - UpdateCompanyListService, - CheckCompanyExistenceService { - - private final CommandCompanyPort commandCompanyPort; - private final CheckCompanyPort checkCompanyPort; - private final QueryCompanyByIdPort queryCompanyByIdPort; - - @Override - public Company register(final Company company) { - this.checkByName(company.companyDetails().name()); - - return commandCompanyPort.register(company); - } - - private void checkByName(final String name) { - if(checkCompanyPort.check(name)) { - throw DuplicatedCompanyNameException.EXCEPTION; - } - } - - @Override - public void delete(final CompanyId companyId) { - this.checkById(companyId.getId()); - - commandCompanyPort.deleteById(companyId); - } - - @Override - public void checkById(final Long id) { - if(checkCompanyPort.check(id)) { - throw CompanyNotFoundException.EXCEPTION; - } - } - - @Override - public void updateAll(final List companyList) { - commandCompanyPort.updateAll(companyList); - } - - @Override - public void modify(final Long id, final CompanyDetails companyDetails) { - final Company company = this.getById(id); - - company.isAuthor(companyDetails.registrantId()); - - if(!Objects.equals(company.companyDetails().name(), companyDetails.name())) { - checkByName(companyDetails.name()); - } - - commandCompanyPort.update(company.update(companyDetails)); - } - - @Override - public void modify(final CompanyId companyId, final CompanyStatus status) { - final Company company = this.getById(companyId.getId()); - - commandCompanyPort.update(company.update(status)); - } - - private Company getById(final Long id) { - return queryCompanyByIdPort.findById(id) - .orElseThrow(() -> CompanyNotFoundException.EXCEPTION); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyUseCase.java deleted file mode 100644 index cf6cc2bc..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.companyapplication.usecases.command; - -public interface DeleteCompanyUseCase { - - void delete(DeleteCompanyCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyUseCase.java deleted file mode 100644 index 8f426b96..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.companyapplication.usecases.command; - -public interface ModifyCompanyUseCase { - - void modify(ModifyCompanyDetailsCommand command); - - void modify(ModifyCompanyStatusCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyUseCase.java deleted file mode 100644 index 19b07dff..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.companyapplication.usecases.command; - -import com.stubee.rollingdomains.common.model.TSID; - -public interface RegisterCompanyUseCase { - - TSID register(RegisterCompanyCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/UpdateCompanyUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/UpdateCompanyUseCase.java deleted file mode 100644 index 557f71f2..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/UpdateCompanyUseCase.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.companyapplication.usecases.command; - -import com.stubee.rollingdomains.domain.company.model.Company; - -import java.util.List; - -public interface UpdateCompanyUseCase { - - void updateAll(List companyList); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/DeleteCompanyApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/DeleteCompanyApi.java deleted file mode 100644 index d83df8fa..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/DeleteCompanyApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.companyapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.rollingdomains.domain.company.services.DeleteCompanyService; -import com.stubee.companyapplication.usecases.command.DeleteCompanyCommand; -import com.stubee.companyapplication.usecases.command.DeleteCompanyUseCase; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class DeleteCompanyApi implements DeleteCompanyUseCase { - - private final DeleteCompanyService deleteCompanyService; - - @Override - public void delete(final DeleteCompanyCommand command) { - deleteCompanyService.delete(command.companyId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/ModifyCompanyApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/ModifyCompanyApi.java deleted file mode 100644 index 6ed8a8f4..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/ModifyCompanyApi.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.stubee.companyapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.companyapplication.usecases.command.ModifyCompanyUseCase; -import com.stubee.rollingdomains.domain.company.model.CompanyDetails; -import com.stubee.rollingdomains.domain.company.services.ModifyCompanyService; -import com.stubee.companyapplication.usecases.command.ModifyCompanyDetailsCommand; -import com.stubee.companyapplication.usecases.command.ModifyCompanyStatusCommand; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class ModifyCompanyApi implements ModifyCompanyUseCase { - - private final ModifyCompanyService modifyCompanyService; - private final GetCurrentMemberPort getCurrentMemberPort; - - @Override - public void modify(final ModifyCompanyDetailsCommand command) { - final MemberId memberId = getCurrentMemberPort.getMemberId(); - - final CompanyDetails companyDetails = CompanyMapper.toDetails(command, memberId); - - modifyCompanyService.modify(command.id(), companyDetails); - } - - @Override - public void modify(final ModifyCompanyStatusCommand command) { - modifyCompanyService.modify(command.companyId(), command.status()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/RegisterCompanyApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/RegisterCompanyApi.java deleted file mode 100644 index fc4959fc..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/RegisterCompanyApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.stubee.companyapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.rollingdomains.common.model.TSID; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.services.RegisterCompanyService; -import com.stubee.companyapplication.usecases.command.RegisterCompanyCommand; -import com.stubee.companyapplication.usecases.command.RegisterCompanyUseCase; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class RegisterCompanyApi implements RegisterCompanyUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final RegisterCompanyService registerCompanyService; - - @Override - public TSID register(final RegisterCompanyCommand command) { - final MemberId memberId = getCurrentMemberPort.getMemberId(); - - final Company company = CompanyMapper.toDomain(command, memberId); - - return TSID.of(registerCompanyService.register(company).companyId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/batch/UpdateCompanyApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/batch/UpdateCompanyApi.java deleted file mode 100644 index 58143e3d..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/batch/UpdateCompanyApi.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.stubee.companyapplication.usecases.command.impl.batch; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.companyapplication.usecases.command.UpdateCompanyUseCase; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.services.UpdateCompanyListService; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@CommandService -@RequiredArgsConstructor -class UpdateCompanyApi implements UpdateCompanyUseCase { - - private final UpdateCompanyListService updateCompanyListService; - - @Override - public void updateAll(final List companyList) { - updateCompanyListService.updateAll(companyList); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyResponse.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyResponse.java deleted file mode 100644 index afc4ef22..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.stubee.companyapplication.usecases.query; - -import com.stubee.rollingdomains.common.model.TSID; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyDetails; -import com.stubee.rollingdomains.domain.company.model.CompanyGrades; - -public record CompanyResponse( - TSID companyId, - CompanyDetails companyDetails, - CompanyGrades companyGrades, - TSID registrantId -) { - public static CompanyResponse of(Company company) { - return new CompanyResponse(TSID.of(company.companyId()), company.companyDetails(), - company.companyGrades(), TSID.of(company.companyDetails().registrantId())); - } -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryAllCompanyListUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryAllCompanyListUseCase.java deleted file mode 100644 index 02f5a5c5..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryAllCompanyListUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.companyapplication.usecases.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; - -import java.util.List; - -public interface QueryAllCompanyListUseCase { - - PageDataResponse> get(PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyInfoByIdUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyInfoByIdUseCase.java deleted file mode 100644 index 4082806a..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyInfoByIdUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.companyapplication.usecases.query; - -public interface QueryCompanyInfoByIdUseCase { - - CompanyQueryResponse get(Long companyId); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyListByGradesUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyListByGradesUseCase.java deleted file mode 100644 index 5eabd15a..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/QueryCompanyListByGradesUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.companyapplication.usecases.query; - -import java.util.List; - -public interface QueryCompanyListByGradesUseCase { - - List get(String gradeType); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/SearchCompanyListByNameUseCase.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/SearchCompanyListByNameUseCase.java deleted file mode 100644 index f5553909..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/SearchCompanyListByNameUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.companyapplication.usecases.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; - -import java.util.List; - -public interface SearchCompanyListByNameUseCase { - - PageDataResponse> get(String companyName, PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryAllCompanyListApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryAllCompanyListApi.java deleted file mode 100644 index 385d2729..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryAllCompanyListApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.companyapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.companyapplication.outports.query.QueryCompanyWithPaginationPort; -import com.stubee.companyapplication.usecases.query.CompanyResponse; -import com.stubee.companyapplication.usecases.query.QueryAllCompanyListUseCase; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryAllCompanyListApi implements QueryAllCompanyListUseCase { - - private final QueryCompanyWithPaginationPort queryCompanyWithPaginationPort; - - @Override - public PageDataResponse> get(PageRequest pageRequest) { - pageRequest.validate(); - - return PageDataResponse.of(queryCompanyWithPaginationPort.findAll(pageRequest).stream() - .map(CompanyResponse::of) - .toList()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyInfoByIdApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyInfoByIdApi.java deleted file mode 100644 index 903e28b1..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyInfoByIdApi.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.companyapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.companyapplication.outports.query.QueryCompanyByIdPort; -import com.stubee.companyapplication.usecases.query.QueryCompanyInfoByIdUseCase; -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import com.stubee.rollingdomains.domain.company.events.CompanyViewedEvent; -import lombok.RequiredArgsConstructor; -import org.springframework.context.ApplicationEventPublisher; - -@QueryService -@RequiredArgsConstructor -class QueryCompanyInfoByIdApi implements QueryCompanyInfoByIdUseCase { - - private final QueryCompanyByIdPort queryCompanyByIdPort; - private final ApplicationEventPublisher applicationEventPublisher; - - @Override - public CompanyQueryResponse get(final Long companyId) { - final CompanyQueryResponse response = queryCompanyByIdPort.getInfoById(companyId); - - applicationEventPublisher.publishEvent(CompanyViewedEvent.of(companyId)); - - return response; - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyListByGradesApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyListByGradesApi.java deleted file mode 100644 index 8273a020..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/QueryCompanyListByGradesApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.stubee.companyapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.companyapplication.outports.query.QueryCompanyByGradesPort; -import com.stubee.companyapplication.usecases.query.CompanyResponse; -import com.stubee.companyapplication.usecases.query.QueryCompanyListByGradesUseCase; -import com.stubee.rollingdomains.domain.company.model.Company; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryCompanyListByGradesApi implements QueryCompanyListByGradesUseCase { - - private final QueryCompanyByGradesPort queryCompanyByGradesPort; - - @Override - public List get(final String gradeType) { - return fetchByGradeType(gradeType).stream() - .map(CompanyResponse::of) - .toList(); - } - - private List fetchByGradeType(final String gradeType) { - return queryCompanyByGradesPort.getOrderBy(gradeType); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/SearchCompanyListByNameApi.java b/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/SearchCompanyListByNameApi.java deleted file mode 100644 index 9586df6d..00000000 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/impl/SearchCompanyListByNameApi.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.companyapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.companyapplication.outports.query.QueryCompanyWithPaginationPort; -import com.stubee.companyapplication.usecases.query.CompanyResponse; -import com.stubee.companyapplication.usecases.query.SearchCompanyListByNameUseCase; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class SearchCompanyListByNameApi implements SearchCompanyListByNameUseCase { - - private final QueryCompanyWithPaginationPort queryCompanyWithPaginationPort; - - @Override - public PageDataResponse> get(String companyName, PageRequest pageRequest) { - pageRequest.validate(); - - return PageDataResponse.of(queryCompanyWithPaginationPort.findByNameContaining(companyName, pageRequest).stream() - .map(CompanyResponse::of) - .toList()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/test/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapperTest.java b/Rolling-Application/company-application/src/test/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapperTest.java deleted file mode 100644 index 6cf257d4..00000000 --- a/Rolling-Application/company-application/src/test/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapperTest.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.stubee.companyapplication.usecases.command.impl; - -import com.stubee.companyapplication.usecases.command.ModifyCompanyDetailsCommand; -import com.stubee.companyapplication.usecases.command.RegisterCompanyCommand; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyDetails; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -public class CompanyMapperTest { - - @Test - @DisplayName(value = "RegisterCompanyCommand to Company 변환 성공") - void convertToDomain() { - //given - RegisterCompanyCommand command = RegisterCompanyCommand.create("나뭇잎마을", "나뭇잎마을", null, "히요옷", null, null); - MemberId memberId = MemberId.of(1L); - - //when - Company company = CompanyMapper.toDomain(command, memberId); - - //then - assertEquals(command.name(), company.companyDetails().name()); - assertEquals(command.address(), company.companyDetails().companyAddress().address()); - assertEquals(command.description(), company.companyDetails().description()); - assertEquals(command.imgUrl(), company.companyDetails().companyLogo().url()); - assertEquals(command.rgb(), company.companyDetails().companyLogo().rgb()); - assertEquals(memberId, company.companyDetails().registrantId()); - } - - @Test - @DisplayName(value = "ModifyCompanyDetailsCommand to Details 변환 성공") - void convertToDetails() { - //given - ModifyCompanyDetailsCommand command = new ModifyCompanyDetailsCommand(1L, "나뭇잎마을2", "사마귀마을2", "스스슥", null, null, null); - MemberId memberId = MemberId.of(1L); - - //when - CompanyDetails companyDetails = CompanyMapper.toDetails(command, memberId); - - //then - assertEquals(command.name(), companyDetails.name()); - assertEquals(command.description(), companyDetails.description()); - assertEquals(command.companyAddress(), companyDetails.companyAddress().address()); - assertEquals(command.companyAddressEtc(), companyDetails.companyAddress().etc()); - assertEquals(command.url(), companyDetails.companyLogo().url()); - assertEquals(command.rgb(), companyDetails.companyLogo().rgb()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/build.gradle b/Rolling-Application/employment-application/build.gradle deleted file mode 100644 index 0f994411..00000000 --- a/Rolling-Application/employment-application/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/CheckEmploymentExistencePort.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/CheckEmploymentExistencePort.java deleted file mode 100644 index 5e677362..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/CheckEmploymentExistencePort.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.employmentapplication.outports; - -public interface CheckEmploymentExistencePort { - - boolean check(Long employeeId, Long employerId); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/QueryEmploymentByIdPort.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/QueryEmploymentByIdPort.java deleted file mode 100644 index cdc4eea3..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/QueryEmploymentByIdPort.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.employmentapplication.outports; - -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; - -import java.util.List; - -public interface QueryEmploymentByIdPort { - - List findInfoByEmployeeId(Long employeeId); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/RegisterEmploymentPort.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/RegisterEmploymentPort.java deleted file mode 100644 index 61182f32..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/outports/RegisterEmploymentPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.employmentapplication.outports; - -import com.stubee.rollingdomains.domain.employment.model.Employment; - -public interface RegisterEmploymentPort { - - Employment register(Employment employment); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/services/EmploymentDomainService.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/services/EmploymentDomainService.java deleted file mode 100644 index fecf4de7..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/services/EmploymentDomainService.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.stubee.employmentapplication.services; - -import com.stubee.applicationcommons.annotations.DomainService; -import com.stubee.employmentapplication.outports.CheckEmploymentExistencePort; -import com.stubee.employmentapplication.outports.RegisterEmploymentPort; -import com.stubee.rollingdomains.domain.employment.exception.EmploymentExistException; -import com.stubee.rollingdomains.domain.employment.exception.EmploymentNotFoundException; -import com.stubee.rollingdomains.domain.employment.model.Employment; -import com.stubee.rollingdomains.domain.employment.model.EmploymentDetails; -import com.stubee.rollingdomains.domain.employment.services.CheckEmploymentExistenceService; -import com.stubee.rollingdomains.domain.employment.services.RegisterEmploymentService; -import lombok.RequiredArgsConstructor; - -@DomainService -@RequiredArgsConstructor -class EmploymentDomainService implements RegisterEmploymentService, CheckEmploymentExistenceService { - - private final RegisterEmploymentPort registerEmploymentPort; - private final CheckEmploymentExistencePort checkEmploymentExistencePort; - - @Override - public Employment register(final Employment employment) { - if(this.checkExistence(employment.employmentDetails())) { - throw EmploymentExistException.EXCEPTION; - } - - return registerEmploymentPort.register(employment); - } - - @Override - public void checkByEmployeeAndEmployer(final Long employeeId, final Long employerId) { - if(!this.checkExistence(employeeId, employerId)) { - throw EmploymentNotFoundException.EXCEPTION; - } - } - - private boolean checkExistence(final Long employeeId, final Long employerId) { - return checkEmploymentExistencePort.check(employeeId, employerId); - } - - private boolean checkExistence(final EmploymentDetails employmentDetails) { - return checkEmploymentExistencePort.check(employmentDetails.employeeId().getId(), employmentDetails.employerId().getId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentCommand.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentCommand.java deleted file mode 100644 index cfcea062..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentCommand.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.employmentapplication.usecases.command; - -import com.stubee.rollingdomains.domain.employment.consts.EmploymentStatus; - -public record RegisterEmploymentCommand( - Long employerId, - EmploymentStatus employmentStatus) { - public static RegisterEmploymentCommand create(final Long employerId, final EmploymentStatus employmentStatus) { - return new RegisterEmploymentCommand(employerId, employmentStatus); - } -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentUseCase.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentUseCase.java deleted file mode 100644 index 771a1baf..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/RegisterEmploymentUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.employmentapplication.usecases.command; - -import com.stubee.rollingdomains.domain.employment.model.Employment; - -public interface RegisterEmploymentUseCase { - - Employment register(RegisterEmploymentCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/EmploymentMapper.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/EmploymentMapper.java deleted file mode 100644 index 460bb62b..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/EmploymentMapper.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.stubee.employmentapplication.usecases.command.impl; - -import com.stubee.rollingdomains.domain.employment.model.EmployeeId; -import com.stubee.rollingdomains.domain.employment.model.EmployerId; -import com.stubee.rollingdomains.domain.employment.model.Employment; -import com.stubee.rollingdomains.domain.employment.model.EmploymentDetails; -import com.stubee.employmentapplication.usecases.command.RegisterEmploymentCommand; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -abstract class EmploymentMapper { - - public static Employment toDomain(final RegisterEmploymentCommand command, final MemberId employeeId) { - return Employment.ExceptIdBuilder() - .employmentDetails(EmploymentDetails.ExceptDateBuilder() - .employeeId(EmployeeId.of(employeeId)) - .employerId(EmployerId.of(command.employerId())) - .employmentStatus(command.employmentStatus()) - .build()) - .build(); - } - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/RegisterEmploymentApi.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/RegisterEmploymentApi.java deleted file mode 100644 index a50a6971..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/command/impl/RegisterEmploymentApi.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.stubee.employmentapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.rollingdomains.domain.company.services.CheckCompanyExistenceService; -import com.stubee.rollingdomains.domain.employment.services.RegisterEmploymentService; -import com.stubee.employmentapplication.usecases.command.RegisterEmploymentCommand; -import com.stubee.employmentapplication.usecases.command.RegisterEmploymentUseCase; -import com.stubee.rollingdomains.domain.employment.model.Employment; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class RegisterEmploymentApi implements RegisterEmploymentUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final CheckCompanyExistenceService checkCompanyExistenceService; - private final RegisterEmploymentService registerEmploymentService; - - @Override - public Employment register(final RegisterEmploymentCommand command) { - checkCompanyExistenceService.checkById(command.employerId()); - - final MemberId memberId = getCurrentMemberPort.getMemberId(); - - final Employment employment = EmploymentMapper.toDomain(command, memberId); - - return registerEmploymentService.register(employment); - } - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/EmploymentQueryResponse.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/EmploymentQueryResponse.java deleted file mode 100644 index 13a803b9..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/EmploymentQueryResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.employmentapplication.usecases.query; - -import com.stubee.rollingdomains.domain.employment.consts.EmploymentStatus; - -public record EmploymentQueryResponse( - EmploymentStatus employmentStatus, - - String employerId, - String employerName, - String employerDescription, - String employerAddress, - String employerImgUrl) {} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryEmploymentExistenceUseCase.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryEmploymentExistenceUseCase.java deleted file mode 100644 index f9284860..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryEmploymentExistenceUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.employmentapplication.usecases.query; - -import com.stubee.employmentapplication.usecases.query.impl.GetEmploymentExistenceQuery; - -public interface QueryEmploymentExistenceUseCase { - - boolean get(GetEmploymentExistenceQuery query); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryMyEmploymentInfoListUseCase.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryMyEmploymentInfoListUseCase.java deleted file mode 100644 index 659d32e3..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/QueryMyEmploymentInfoListUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.employmentapplication.usecases.query; - -import java.util.List; - -public interface QueryMyEmploymentInfoListUseCase { - - List get(); - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/GetEmploymentExistenceQuery.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/GetEmploymentExistenceQuery.java deleted file mode 100644 index 80ec45ae..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/GetEmploymentExistenceQuery.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.stubee.employmentapplication.usecases.query.impl; - -public record GetEmploymentExistenceQuery( - Long employeeId, - Long employerId) {} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryEmploymentExistenceApi.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryEmploymentExistenceApi.java deleted file mode 100644 index ba43f8e2..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryEmploymentExistenceApi.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.stubee.employmentapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.employmentapplication.outports.CheckEmploymentExistencePort; -import com.stubee.employmentapplication.usecases.query.QueryEmploymentExistenceUseCase; -import lombok.RequiredArgsConstructor; - -@QueryService -@RequiredArgsConstructor -class QueryEmploymentExistenceApi implements QueryEmploymentExistenceUseCase { - - private final CheckEmploymentExistencePort checkEmploymentExistencePort; - - @Override - public boolean get(final GetEmploymentExistenceQuery query) { - return checkEmploymentExistencePort.check(query.employeeId(), query.employerId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryMyEmploymentInfoListApi.java b/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryMyEmploymentInfoListApi.java deleted file mode 100644 index 2c7504fe..00000000 --- a/Rolling-Application/employment-application/src/main/java/com/stubee/employmentapplication/usecases/query/impl/QueryMyEmploymentInfoListApi.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.stubee.employmentapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.employmentapplication.outports.QueryEmploymentByIdPort; -import com.stubee.employmentapplication.usecases.query.QueryMyEmploymentInfoListUseCase; -import com.stubee.employmentapplication.usecases.query.EmploymentQueryResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryMyEmploymentInfoListApi implements QueryMyEmploymentInfoListUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final QueryEmploymentByIdPort queryEmploymentByIdPort; - - @Override - public List get() { - return queryEmploymentByIdPort.findInfoByEmployeeId(getCurrentMemberPort.getMemberId().getId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/file-application/build.gradle b/Rolling-Application/file-application/build.gradle deleted file mode 100644 index 9e8e0536..00000000 --- a/Rolling-Application/file-application/build.gradle +++ /dev/null @@ -1,6 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') - - //MultipartFile - implementation 'org.springframework:spring-web:6.0.6' -} \ No newline at end of file diff --git a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileUploadUseCase.java b/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileUploadUseCase.java deleted file mode 100644 index 0872e8d9..00000000 --- a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileUploadUseCase.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.stubee.fileapplication.usecases; - -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -public interface FileUploadUseCase { - - FileResponse uploadFile(MultipartFile multipartFile); - - List uploadFileList(List multipartFileList); - - void delete(String path); - -} \ No newline at end of file diff --git a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/impl/FileUploadApi.java b/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/impl/FileUploadApi.java deleted file mode 100644 index 720242b6..00000000 --- a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/impl/FileUploadApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.stubee.fileapplication.usecases.impl; - -import com.stubee.applicationcommons.annotations.ExternalService; -import com.stubee.fileapplication.outports.UploadImagePort; -import com.stubee.fileapplication.usecases.FileUploadUseCase; -import com.stubee.fileapplication.usecases.FileResponse; -import lombok.RequiredArgsConstructor; -import org.springframework.web.multipart.MultipartFile; - -import java.util.List; - -@ExternalService -@RequiredArgsConstructor -class FileUploadApi implements FileUploadUseCase { - - private final UploadImagePort uploadImagePort; - - @Override - public FileResponse uploadFile(final MultipartFile multipartFile) { - return uploadImagePort.upload(multipartFile); - } - - @Override - public List uploadFileList(final List multipartFileList) { - return uploadImagePort.uploadList(multipartFileList); - } - - @Override - public void delete(final String path) { - uploadImagePort.delete(path); - } - -} \ No newline at end of file diff --git a/Rolling-Application/logging-application/build.gradle b/Rolling-Application/logging-application/build.gradle deleted file mode 100644 index 0f994411..00000000 --- a/Rolling-Application/logging-application/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') -} \ No newline at end of file diff --git a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/commands/PileUpHistoryLoggingCommand.java b/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/commands/PileUpHistoryLoggingCommand.java deleted file mode 100644 index d5d0d2e6..00000000 --- a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/commands/PileUpHistoryLoggingCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.stubee.loggingapplication.outports.commands; - -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; - -public record PileUpHistoryLoggingCommand( - String description, - String module, - Long memberId) { - public static PileUpHistoryLoggingCommand create(final String description, final String module, final Long memberId) { - return new PileUpHistoryLoggingCommand(description, module, memberId); - } - - public HistoryLogging toDomain() { - return HistoryLogging.ExceptIdBuilder() - .description(description) - .module(module) - .memberId(MemberId.of(memberId)) - .build(); - } -} \ No newline at end of file diff --git a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/PileUpLoggingUseCase.java b/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/PileUpLoggingUseCase.java deleted file mode 100644 index c666ce1c..00000000 --- a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/PileUpLoggingUseCase.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.stubee.loggingapplication.usecases; - -import com.stubee.loggingapplication.outports.commands.PileUpHistoryLoggingCommand; -import com.stubee.rollingdomains.logging.model.HistoryLogging; - -public interface PileUpLoggingUseCase { - - HistoryLogging pileUp(PileUpHistoryLoggingCommand request); - -} \ No newline at end of file diff --git a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/CompanyViewLoggingListener.java b/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/CompanyViewLoggingListener.java deleted file mode 100644 index 2f80ba75..00000000 --- a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/CompanyViewLoggingListener.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.stubee.loggingapplication.usecases.impl; - -import com.stubee.applicationcommons.annotations.AsyncEventListener; -import com.stubee.applicationcommons.annotations.Listener; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.loggingapplication.outports.CommandLoggingPort; -import com.stubee.rollingdomains.domain.company.events.CompanyViewedEvent; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.logging.model.CompanyViewLogging; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.RequiredArgsConstructor; - -@Listener -@RequiredArgsConstructor -class CompanyViewLoggingListener { - - private final CommandLoggingPort commandLoggingPort; - private final GetCurrentMemberPort getCurrentMemberPort; - - @AsyncEventListener - public void pileUp(final CompanyViewedEvent event) { - MemberId memberId; - - try { - memberId = getCurrentMemberPort.getMemberId(); - } catch (Exception e) { - memberId = MemberId.of(-1L); - } - - commandLoggingPort.save(CompanyViewLogging.ExceptIdBuilder() - .memberId(memberId) - .companyId(CompanyId.of(event.companyId())) - .build()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/PileUpLoggingApi.java b/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/PileUpLoggingApi.java deleted file mode 100644 index d3d1b2a1..00000000 --- a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/usecases/impl/PileUpLoggingApi.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.stubee.loggingapplication.usecases.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.loggingapplication.outports.CommandLoggingPort; -import com.stubee.loggingapplication.outports.commands.PileUpHistoryLoggingCommand; -import com.stubee.loggingapplication.usecases.PileUpLoggingUseCase; -import com.stubee.rollingdomains.logging.model.HistoryLogging; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class PileUpLoggingApi implements PileUpLoggingUseCase { - - private final CommandLoggingPort commandLoggingPort; - - @Override - public HistoryLogging pileUp(final PileUpHistoryLoggingCommand command) { - return commandLoggingPort.save(command.toDomain()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/build.gradle b/Rolling-Application/member-application/build.gradle deleted file mode 100644 index 0f994411..00000000 --- a/Rolling-Application/member-application/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CheckNicknameDuplicationPort.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CheckNicknameDuplicationPort.java deleted file mode 100644 index ff005cdc..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CheckNicknameDuplicationPort.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.memberapplication.outports; - -public interface CheckNicknameDuplicationPort { - - boolean check (String nickname); - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/QueryMemberPort.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/QueryMemberPort.java deleted file mode 100644 index 2a44dacf..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/QueryMemberPort.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.stubee.memberapplication.outports; - -import com.stubee.rollingdomains.domain.member.exception.MemberNotFoundException; -import com.stubee.rollingdomains.domain.member.model.Member; - -import java.util.Optional; - -public interface QueryMemberPort extends CheckNicknameDuplicationPort { - - Optional findById(Long id); - - default Member getById(final Long id) { - return findById(id) - .orElseThrow(() -> MemberNotFoundException.EXCEPTION); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/services/MemberDomainService.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/services/MemberDomainService.java deleted file mode 100644 index 59ada711..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/services/MemberDomainService.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.stubee.memberapplication.services; - -import com.stubee.applicationcommons.annotations.DomainService; -import com.stubee.memberapplication.outports.CheckNicknameDuplicationPort; -import com.stubee.memberapplication.outports.CommandMemberPort; -import com.stubee.rollingdomains.domain.member.exception.DuplicatedNicknameException; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.rollingdomains.domain.member.services.ElevateMemberRoleService; -import com.stubee.rollingdomains.domain.member.services.ModifyNicknameService; -import lombok.RequiredArgsConstructor; - -@DomainService -@RequiredArgsConstructor -class MemberDomainService implements ModifyNicknameService, ElevateMemberRoleService { - - private final CommandMemberPort commandMemberPort; - private final CheckNicknameDuplicationPort checkNicknameDuplicationPort; - private final GetCurrentMemberPort getCurrentMemberPort; - - @Override - public void modify(final String nickname) { - this.checkByNickname(nickname); - - commandMemberPort.saveWithId(this.getMember().updateNickname(nickname)); - } - - private void checkByNickname(final String nickname) { - if(checkNicknameDuplicationPort.check(nickname)) { - throw DuplicatedNicknameException.EXCEPTION; - } - } - - @Override - public void elevate() { - commandMemberPort.saveWithId(this.getMember().elevateToMember()); - } - - private Member getMember() { - return getCurrentMemberPort.getMember(); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameCommand.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameCommand.java deleted file mode 100644 index eb74766f..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameCommand.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.stubee.memberapplication.usecases.command; - -public record ModifyNicknameCommand( - String nickname) { - public static ModifyNicknameCommand create(final String nickname) { - return new ModifyNicknameCommand(nickname); - } -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameUseCase.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameUseCase.java deleted file mode 100644 index 073226e0..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/ModifyNicknameUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.memberapplication.usecases.command; - -public interface ModifyNicknameUseCase { - - void modify(ModifyNicknameCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ElevateMemberRoleListener.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ElevateMemberRoleListener.java deleted file mode 100644 index 1644f9af..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ElevateMemberRoleListener.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.memberapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.AsyncEventListener; -import com.stubee.applicationcommons.annotations.Listener; -import com.stubee.rollingdomains.domain.member.events.MemberCertifiedEvent; -import com.stubee.rollingdomains.domain.member.services.ElevateMemberRoleService; -import lombok.RequiredArgsConstructor; - -@Listener -@RequiredArgsConstructor -class ElevateMemberRoleListener { - - private final ElevateMemberRoleService elevateMemberRoleService; - - @AsyncEventListener - public void elevate(final MemberCertifiedEvent event) { - elevateMemberRoleService.elevate(); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ModifyNicknameApi.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ModifyNicknameApi.java deleted file mode 100644 index 8d654973..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/command/impl/ModifyNicknameApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.memberapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.rollingdomains.domain.member.services.ModifyNicknameService; -import com.stubee.memberapplication.usecases.command.ModifyNicknameCommand; -import com.stubee.memberapplication.usecases.command.ModifyNicknameUseCase; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class ModifyNicknameApi implements ModifyNicknameUseCase { - - private final ModifyNicknameService modifyNicknameService; - - @Override - public void modify(final ModifyNicknameCommand command) { - modifyNicknameService.modify(command.nickname()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMemberByIdUseCase.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMemberByIdUseCase.java deleted file mode 100644 index fedbe14d..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMemberByIdUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.memberapplication.usecases.query; - -public interface QueryMemberByIdUseCase { - - MemberResponse get(Long memberId); - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMyInfoUseCase.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMyInfoUseCase.java deleted file mode 100644 index bee4f17b..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/QueryMyInfoUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.memberapplication.usecases.query; - -public interface QueryMyInfoUseCase { - - MemberResponse get(); - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMemberByIdApi.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMemberByIdApi.java deleted file mode 100644 index dd6cc01f..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMemberByIdApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.memberapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.memberapplication.outports.QueryMemberPort; -import com.stubee.memberapplication.usecases.query.MemberResponse; -import com.stubee.memberapplication.usecases.query.QueryMemberByIdUseCase; -import lombok.RequiredArgsConstructor; - -@QueryService -@RequiredArgsConstructor -class QueryMemberByIdApi implements QueryMemberByIdUseCase { - - private final QueryMemberPort queryMemberPort; - - @Override - public MemberResponse get(final Long memberId) { - return MemberResponse.of(queryMemberPort.getById(memberId)); - } - -} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMyInfoApi.java b/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMyInfoApi.java deleted file mode 100644 index 3f40abd6..00000000 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/impl/QueryMyInfoApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.memberapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.memberapplication.usecases.query.MemberResponse; -import com.stubee.memberapplication.usecases.query.QueryMyInfoUseCase; -import lombok.RequiredArgsConstructor; - -@QueryService -@RequiredArgsConstructor -class QueryMyInfoApi implements QueryMyInfoUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - - @Override - public MemberResponse get() { - return MemberResponse.of(getCurrentMemberPort.getMember()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/news-application/build.gradle b/Rolling-Application/news-application/build.gradle deleted file mode 100644 index e4c0a12f..00000000 --- a/Rolling-Application/news-application/build.gradle +++ /dev/null @@ -1,6 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') - - //Mono - implementation 'io.projectreactor:reactor-core:3.5.3' -} \ No newline at end of file diff --git a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NewsUseCase.java b/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NewsUseCase.java deleted file mode 100644 index 6df52c89..00000000 --- a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NewsUseCase.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.stubee.newsapplication.usecases; - -import com.stubee.rollingdomains.common.model.PageRequest; -import reactor.core.publisher.Mono; - -public interface NewsUseCase { - - Mono getNewsByCompanyName(String companyName, PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/impl/NewsApi.java b/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/impl/NewsApi.java deleted file mode 100644 index b3c00051..00000000 --- a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/impl/NewsApi.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.stubee.newsapplication.usecases.impl; - -import com.stubee.applicationcommons.annotations.ExternalService; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.newsapplication.outports.NewsPort; -import com.stubee.newsapplication.usecases.NewsUseCase; -import lombok.RequiredArgsConstructor; -import reactor.core.publisher.Mono; - -@ExternalService -@RequiredArgsConstructor -class NewsApi implements NewsUseCase { - - private final NewsPort newsPort; - - @Override - public Mono getNewsByCompanyName(final String companyName, final PageRequest pageRequest) { - pageRequest.validate(); - - return newsPort.getByCompanyName(companyName, pageRequest); - } - -} \ No newline at end of file diff --git a/Rolling-Application/notification-application/build.gradle b/Rolling-Application/notification-application/build.gradle deleted file mode 100644 index 0f994411..00000000 --- a/Rolling-Application/notification-application/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') -} \ No newline at end of file diff --git a/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/listeners/SendEmailHandler.java b/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/listeners/SendEmailHandler.java deleted file mode 100644 index 3fbf0fd9..00000000 --- a/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/listeners/SendEmailHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.notificationapplication.listeners; - -import com.stubee.applicationcommons.annotations.AsyncTransactionalEventListener; -import com.stubee.applicationcommons.annotations.Listener; -import com.stubee.notificationapplication.outports.SendEmailPort; -import com.stubee.rollingdomains.domain.member.events.MemberRegisteredEvent; -import lombok.RequiredArgsConstructor; - -@Listener -@RequiredArgsConstructor -class SendEmailHandler { - - private final SendEmailPort sendEmailPort; - - @AsyncTransactionalEventListener - public void sendWelcomeEmail(final MemberRegisteredEvent event) { - sendEmailPort.sendWelcome(event.receiverEmail()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/outports/SendEmailPort.java b/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/outports/SendEmailPort.java deleted file mode 100644 index 1d2cb2a7..00000000 --- a/Rolling-Application/notification-application/src/main/java/com/stubee/notificationapplication/outports/SendEmailPort.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.notificationapplication.outports; - -public interface SendEmailPort { - - void sendWelcome(String receiver); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/build.gradle b/Rolling-Application/review-application/build.gradle deleted file mode 100644 index 0f994411..00000000 --- a/Rolling-Application/review-application/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -dependencies { - implementation project(':Rolling-Application:application-commons') -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/command/CommandStoryPort.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/command/CommandStoryPort.java deleted file mode 100644 index a8020a8b..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/command/CommandStoryPort.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.reviewapplication.outports.command; - -import com.stubee.rollingdomains.domain.story.model.Story; -import com.stubee.rollingdomains.domain.story.model.StoryId; - -public interface CommandStoryPort { - - Story save(Story story); - - Story update(Story story); - - void deleteById(StoryId storyId); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryByIdPort.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryByIdPort.java deleted file mode 100644 index 5e33470e..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryByIdPort.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.reviewapplication.outports.query; - -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.rollingdomains.domain.story.exception.StoryNotFoundException; -import com.stubee.rollingdomains.domain.story.model.Story; - -import java.util.Optional; - -public interface QueryStoryByIdPort { - - Optional findById(Long id); - - Optional findInfoById(Long id); - - default StoryQueryByCompanyResponse getInfoById(final Long id) { - return findInfoById(id) - .orElseThrow(() -> StoryNotFoundException.EXCEPTION); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryPort.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryPort.java deleted file mode 100644 index d248a941..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryPort.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.stubee.reviewapplication.outports.query; - -public interface QueryStoryPort extends QueryStoryWithPaginationPort, QueryStoryByIdPort, QueryStoryStatusPort { -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryStatusPort.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryStatusPort.java deleted file mode 100644 index 8476be6d..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryStatusPort.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.reviewapplication.outports.query; - -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; - -public interface QueryStoryStatusPort { - - StoryStatusResponse getStatusByMemberId(Long memberId); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryWithPaginationPort.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryWithPaginationPort.java deleted file mode 100644 index b021d885..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/outports/query/QueryStoryWithPaginationPort.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.stubee.reviewapplication.outports.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; - -import java.util.List; - -public interface QueryStoryWithPaginationPort { - - List findByMemberId(Long memberId, PageRequest pageRequest); - - List findByCompanyId(Long companyId, PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/services/StoryDomainService.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/services/StoryDomainService.java deleted file mode 100644 index fee62558..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/services/StoryDomainService.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.stubee.reviewapplication.services; - -import com.stubee.applicationcommons.annotations.DomainService; -import com.stubee.reviewapplication.outports.command.CommandStoryPort; -import com.stubee.reviewapplication.outports.query.QueryStoryByIdPort; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.exception.StoryNotFoundException; -import com.stubee.rollingdomains.domain.story.model.*; -import com.stubee.rollingdomains.domain.story.services.DeleteStoryService; -import com.stubee.rollingdomains.domain.story.services.ModifyStoryService; -import com.stubee.rollingdomains.domain.story.services.RegisterStoryService; -import lombok.RequiredArgsConstructor; - -@DomainService -@RequiredArgsConstructor -class StoryDomainService implements RegisterStoryService, DeleteStoryService, ModifyStoryService { - - private final CommandStoryPort commandStoryPort; - private final QueryStoryByIdPort queryStoryByIdPort; - - @Override - public Story register(final Story story) { - return commandStoryPort.save(story); - } - - @Override - public void delete(final StoryId storyId, final MemberId memberId) { - final Story story = this.getById(storyId); - - story.isAuthor(memberId); - - commandStoryPort.deleteById(storyId); - } - - @Override - public void modify(final StoryId id, final EmploymentDetails employmentDetails, final CorporationDetails corporationDetails, - final ReviewGrades reviewGrades, final MemberId memberId) { - final Story story = this.getById(id); - - story.isAuthor(memberId); - - commandStoryPort.update(story.update(employmentDetails, corporationDetails, reviewGrades)); - } - - private Story getById(final StoryId storyId) { - return queryStoryByIdPort.findById(storyId.getId()) - .orElseThrow(() -> StoryNotFoundException.EXCEPTION); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryCommand.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryCommand.java deleted file mode 100644 index d30fc30a..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryCommand.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.stubee.reviewapplication.usecases.command; - -import com.stubee.rollingdomains.domain.story.model.StoryId; - -public record DeleteStoryCommand( - StoryId storyId) { - public static DeleteStoryCommand toCommand(final Long companyId) { - return new DeleteStoryCommand(StoryId.of(companyId)); - } -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryUseCase.java deleted file mode 100644 index 187de804..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/DeleteStoryUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.reviewapplication.usecases.command; - -public interface DeleteStoryUseCase { - - void delete(DeleteStoryCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryUseCase.java deleted file mode 100644 index 59f8ae64..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.reviewapplication.usecases.command; - -public interface ModifyStoryUseCase { - - void modify(ModifyStoryCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryUseCase.java deleted file mode 100644 index 55042abf..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryUseCase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.reviewapplication.usecases.command; - -import com.stubee.rollingdomains.domain.story.model.Story; - -public interface RegisterStoryUseCase { - - Story register(RegisterStoryCommand command); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/DeleteStoryApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/DeleteStoryApi.java deleted file mode 100644 index b4dad176..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/DeleteStoryApi.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.stubee.reviewapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.services.DeleteStoryService; -import com.stubee.reviewapplication.usecases.command.DeleteStoryCommand; -import com.stubee.reviewapplication.usecases.command.DeleteStoryUseCase; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class DeleteStoryApi implements DeleteStoryUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final DeleteStoryService deleteReviewService; - - @Override - public void delete(final DeleteStoryCommand command) { - final MemberId memberId = getCurrentMemberPort.getMemberId(); - - deleteReviewService.delete(command.storyId(), memberId); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/ModifyStoryApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/ModifyStoryApi.java deleted file mode 100644 index a5d289a1..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/ModifyStoryApi.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.stubee.reviewapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.reviewapplication.usecases.command.ModifyStoryUseCase; -import com.stubee.rollingdomains.domain.story.model.CorporationDetails; -import com.stubee.rollingdomains.domain.story.model.EmploymentDetails; -import com.stubee.rollingdomains.domain.story.model.ReviewGrades; -import com.stubee.rollingdomains.domain.story.services.ModifyStoryService; -import com.stubee.reviewapplication.usecases.command.ModifyStoryCommand; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class ModifyStoryApi implements ModifyStoryUseCase { - - private final ModifyStoryService modifyStoryService; - private final GetCurrentMemberPort getCurrentMemberPort; - - @Override - public void modify(final ModifyStoryCommand command) { - final EmploymentDetails employmentDetails = StoryMapper.toEmploymentDetails(command); - - final CorporationDetails corporationDetails = StoryMapper.toCorporationDetails(command); - - final ReviewGrades reviewGrades = StoryMapper.toReviewGrades(command); - - modifyStoryService.modify(command.id(), employmentDetails, corporationDetails, reviewGrades, - getCurrentMemberPort.getMemberId()); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/RegisterStoryApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/RegisterStoryApi.java deleted file mode 100644 index ed00a4aa..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/RegisterStoryApi.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.stubee.reviewapplication.usecases.command.impl; - -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.rollingdomains.domain.company.services.CheckCompanyExistenceService; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.services.RegisterStoryService; -import com.stubee.reviewapplication.usecases.command.RegisterStoryCommand; -import com.stubee.reviewapplication.usecases.command.RegisterStoryUseCase; -import com.stubee.rollingdomains.domain.story.model.Story; -import lombok.RequiredArgsConstructor; - -@CommandService -@RequiredArgsConstructor -class RegisterStoryApi implements RegisterStoryUseCase { - - private final CheckCompanyExistenceService checkCompanyExistenceService; - private final GetCurrentMemberPort getCurrentMemberPort; - private final RegisterStoryService registerStoryService; - - @Override - public Story register(final RegisterStoryCommand command) { - checkCompanyExistenceService.checkById(command.companyId()); - - final MemberId memberId = getCurrentMemberPort.getMemberId(); - - final Story story = StoryMapper.toDomain(command, memberId); - - return registerStoryService.register(story); - } - -} - diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryListUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryListUseCase.java deleted file mode 100644 index 94dde80f..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryListUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.reviewapplication.usecases.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; - -import java.util.List; - -public interface QueryMyStoryListUseCase { - - PageDataResponse> get(PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryStatusUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryStatusUseCase.java deleted file mode 100644 index 6c4fc03b..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryMyStoryStatusUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.reviewapplication.usecases.query; - -public interface QueryMyStoryStatusUseCase { - - StoryStatusResponse get(); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoByIdUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoByIdUseCase.java deleted file mode 100644 index a81f8df2..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoByIdUseCase.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.reviewapplication.usecases.query; - -public interface QueryStoryInfoByIdUseCase { - - StoryQueryByCompanyResponse get(Long reviewId); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoListByCompanyUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoListByCompanyUseCase.java deleted file mode 100644 index fe07e4ef..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryInfoListByCompanyUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.reviewapplication.usecases.query; - -import com.stubee.applicationcommons.model.response.PageDataResponse; -import com.stubee.rollingdomains.common.model.PageRequest; - -import java.util.List; - -public interface QueryStoryInfoListByCompanyUseCase { - - PageDataResponse> get(Long companyId, PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryListByMemberUseCase.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryListByMemberUseCase.java deleted file mode 100644 index edbe1ebb..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/QueryStoryListByMemberUseCase.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.stubee.reviewapplication.usecases.query; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; - -import java.util.List; - -public interface QueryStoryListByMemberUseCase { - - PageDataResponse> get(Long memberId, PageRequest pageRequest); - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryListApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryListApi.java deleted file mode 100644 index 4685c63c..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryListApi.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.stubee.reviewapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.reviewapplication.outports.query.QueryStoryWithPaginationPort; -import com.stubee.reviewapplication.usecases.query.QueryMyStoryListUseCase; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryMyStoryListApi implements QueryMyStoryListUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final QueryStoryWithPaginationPort queryReviewWithPaginationPort; - - @Override - public PageDataResponse> get(final PageRequest pageRequest) { - pageRequest.validate(); - - final Long memberId = getCurrentMemberPort.getMemberId().getId(); - - return PageDataResponse.of(queryReviewWithPaginationPort.findByMemberId(memberId, pageRequest)); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryStatusApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryStatusApi.java deleted file mode 100644 index 447b4fa5..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryMyStoryStatusApi.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.stubee.reviewapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.applicationcommons.ports.GetCurrentMemberPort; -import com.stubee.reviewapplication.outports.query.QueryStoryStatusPort; -import com.stubee.reviewapplication.usecases.query.QueryMyStoryStatusUseCase; -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; -import lombok.RequiredArgsConstructor; - -@QueryService -@RequiredArgsConstructor -class QueryMyStoryStatusApi implements QueryMyStoryStatusUseCase { - - private final GetCurrentMemberPort getCurrentMemberPort; - private final QueryStoryStatusPort queryReviewStatusPort; - - @Override - public StoryStatusResponse get() { - final Long memberId = getCurrentMemberPort.getMemberId().getId(); - - return queryReviewStatusPort.getStatusByMemberId(memberId); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryInfoByIdApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryInfoByIdApi.java deleted file mode 100644 index fcc2f5fd..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryInfoByIdApi.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.stubee.reviewapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.reviewapplication.outports.query.QueryStoryByIdPort; -import com.stubee.reviewapplication.usecases.query.QueryStoryInfoByIdUseCase; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import lombok.RequiredArgsConstructor; - -@QueryService -@RequiredArgsConstructor -class QueryStoryInfoByIdApi implements QueryStoryInfoByIdUseCase { - - private final QueryStoryByIdPort queryReviewByIdPort; - - @Override - public StoryQueryByCompanyResponse get(final Long reviewId) { - return queryReviewByIdPort.getInfoById(reviewId); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryListByMemberApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryListByMemberApi.java deleted file mode 100644 index 2265f060..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/QueryStoryListByMemberApi.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.stubee.reviewapplication.usecases.query.impl; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.reviewapplication.outports.query.QueryStoryWithPaginationPort; -import com.stubee.reviewapplication.usecases.query.QueryStoryListByMemberUseCase; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryStoryListByMemberApi implements QueryStoryListByMemberUseCase { - - private final QueryStoryWithPaginationPort queryReviewWithPaginationPort; - - @Override - public PageDataResponse> get(final Long memberId, PageRequest pageRequest) { - pageRequest.validate(); - - return PageDataResponse.of(queryReviewWithPaginationPort.findByMemberId(memberId, pageRequest)); - } - -} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/batch/QueryReviewInfoListByCompanyApi.java b/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/batch/QueryReviewInfoListByCompanyApi.java deleted file mode 100644 index 748fc16d..00000000 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/impl/batch/QueryReviewInfoListByCompanyApi.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.stubee.reviewapplication.usecases.query.impl.batch; - -import com.stubee.applicationcommons.annotations.QueryService; -import com.stubee.reviewapplication.outports.query.QueryStoryWithPaginationPort; -import com.stubee.reviewapplication.usecases.query.QueryStoryInfoListByCompanyUseCase; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@QueryService -@RequiredArgsConstructor -class QueryReviewInfoListByCompanyApi implements QueryStoryInfoListByCompanyUseCase { - - private final QueryStoryWithPaginationPort queryReviewWithPaginationPort; - - @Override - public PageDataResponse> get(Long companyId, PageRequest pageRequest) { - pageRequest.validate(); - - return PageDataResponse.of(queryReviewWithPaginationPort.findByCompanyId(companyId, pageRequest)); - } - -} \ No newline at end of file diff --git a/Rolling-Batch/batch-commons/build.gradle b/Rolling-Batch/batch-commons/build.gradle deleted file mode 100644 index 8d12be43..00000000 --- a/Rolling-Batch/batch-commons/build.gradle +++ /dev/null @@ -1,6 +0,0 @@ -bootJar { enabled = false } -jar { enabled = true } - -dependencies { - compileOnly 'org.springframework:spring-context:6.0.9' -} \ No newline at end of file diff --git a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Processor.java b/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Processor.java deleted file mode 100644 index 4535bc40..00000000 --- a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Processor.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.batchcommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Processor { -} \ No newline at end of file diff --git a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Reader.java b/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Reader.java deleted file mode 100644 index d53dec71..00000000 --- a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Reader.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.batchcommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Reader { -} \ No newline at end of file diff --git a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Writer.java b/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Writer.java deleted file mode 100644 index 19901642..00000000 --- a/Rolling-Batch/batch-commons/src/main/java/com/stubee/batchcommons/annotations/Writer.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.batchcommons.annotations; - -import org.springframework.stereotype.Component; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Component -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.RUNTIME) -public @interface Writer { -} \ No newline at end of file diff --git a/Rolling-Batch/build.gradle b/Rolling-Batch/build.gradle deleted file mode 100644 index fface796..00000000 --- a/Rolling-Batch/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -bootJar { enabled = false } -jar { enabled = true } \ No newline at end of file diff --git a/Rolling-Batch/company-average-batch/Dockerfile b/Rolling-Batch/company-average-batch/Dockerfile deleted file mode 100644 index 2546687c..00000000 --- a/Rolling-Batch/company-average-batch/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM openjdk:17-jdk-alpine - -COPY ../build/libs/company-average-batch-0.0.1-SNAPSHOT.jar companyaveragebatch.jar - -ENTRYPOINT ["java", "-jar", "companyaveragebatch.jar", "-x", "test"] \ No newline at end of file diff --git a/Rolling-Batch/company-average-batch/build.gradle b/Rolling-Batch/company-average-batch/build.gradle deleted file mode 100644 index 70b20a4b..00000000 --- a/Rolling-Batch/company-average-batch/build.gradle +++ /dev/null @@ -1,19 +0,0 @@ -dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:company-application') - implementation project(':Rolling-Application:review-application') - implementation project(':Rolling-Application:application-commons') - - implementation project(':Rolling-Adapters:persistence:company-persistence') - implementation project(':Rolling-Adapters:persistence:review-persistence') - implementation project(':Rolling-Adapters:persistence:persistence-commons') - - implementation project(':Rolling-Adapters:adapters-commons') - - implementation project(':Rolling-Batch:batch-commons') - - implementation 'mysql:mysql-connector-java:8.0.33' - - implementation 'org.springframework.boot:spring-boot-starter-batch' -} \ No newline at end of file diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/CompanyAverageBatchApplication.java b/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/CompanyAverageBatchApplication.java deleted file mode 100644 index 5e540597..00000000 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/CompanyAverageBatchApplication.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.stubee.companyaveragebatch; - -import jakarta.annotation.PostConstruct; -import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.ComponentScan; - -import java.util.TimeZone; - -@SpringBootApplication -@EnableBatchProcessing -@ComponentScan(basePackages = { - "com.stubee.companyaveragebatch", - - "com.stubee.companyapplication.services", - "com.stubee.companyapplication.usecases.command.impl.batch", - "com.stubee.companyapplication.usecases.query.impl", - - "com.stubee.reviewapplication.services", - "com.stubee.reviewapplication.usecases.query.impl.batch", - - "com.stubee.companypersistence", - "com.stubee.reviewpersistence", - "com.stubee.persistencecommons", - - "com.stubee.adapterscommons" -}) -public class CompanyAverageBatchApplication { - - @PostConstruct - public void started() { - TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); - } - - public static void main(String[] args) { - SpringApplication.run(CompanyAverageBatchApplication.class, args); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/build.gradle b/Rolling-Domains/build.gradle deleted file mode 100644 index fface796..00000000 --- a/Rolling-Domains/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -bootJar { enabled = false } -jar { enabled = true } \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Company.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Company.java deleted file mode 100644 index 3a8ba19a..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Company.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.stubee.rollingdomains.domain.company.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.Builder; - -public record Company ( - CompanyId companyId, - CompanyDetails companyDetails, - CompanyGrades companyGrades) { - @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") - public Company(CompanyDetails companyDetails, CompanyGrades companyGrades) { - this(null, companyDetails, companyGrades); - } - - @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") - public Company { - Assert.notNull(companyDetails, "CompanyDetails must not be null"); - Assert.notNull(companyGrades, "CompanyGrades must not be null"); - } - - public void isAuthor(final MemberId memberId) { - companyDetails.registrantId().isEqual(memberId); - } - - public Company update(final CompanyDetails companyDetails) { - return new Company(companyId, companyDetails.cover(companyDetails), companyGrades); - } - - public Company update(final CompanyGrades companyGrades) { - return new Company(companyId, companyDetails, companyGrades); - } - - public Company update(final CompanyStatus status) { - return new Company(companyId, companyDetails.update(status), companyGrades); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyDetails.java deleted file mode 100644 index 4b994b59..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyDetails.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.stubee.rollingdomains.domain.company.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; -import lombok.Builder; - -import java.time.LocalDateTime; - -public record CompanyDetails( - RegistrantId registrantId, - String name, - String description, - Address companyAddress, - CompanyLogo companyLogo, - CompanyStatus companyStatus, - LocalDateTime createdAt, - LocalDateTime modifiedAt) { - @Builder(builderClassName = "ExceptDateBuilder", builderMethodName = "ExceptDateBuilder") - public CompanyDetails(RegistrantId registrantId, String name, Address companyAddress, String description, CompanyLogo companyLogo) { - this(registrantId, name, description, companyAddress, companyLogo, CompanyStatus.ACCEPTED, null, null); - } - - @Builder(builderClassName = "WithDateBuilder", builderMethodName = "WithDateBuilder") - public CompanyDetails { - Assert.notNull(registrantId, "RegistrantId must not be null"); - Assert.notNull(name, "CompanyName must not be null"); - Assert.notNull(companyAddress, "CompanyAddress must not be null"); - Assert.notNull(description, "Description must not be null"); - Assert.notNull(companyStatus, "CompanyStatus must not be null"); - } - - CompanyDetails cover(final CompanyDetails companyDetails) { - Assert.notNull(companyDetails.name, "Name must not be null"); - Assert.notNull(companyDetails.companyAddress, "CompanyAddress must not be null"); - Assert.notNull(companyDetails.description, "Description must not be null"); - - return new CompanyDetails(registrantId, companyDetails.name, companyDetails.description, companyDetails.companyAddress, - companyDetails.companyLogo, companyStatus, createdAt, modifiedAt); - } - - CompanyDetails update(final CompanyStatus companyStatus) { - return new CompanyDetails(registrantId, name, description, companyAddress, companyLogo, companyStatus, createdAt, modifiedAt); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/CheckCompanyExistenceService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/CheckCompanyExistenceService.java deleted file mode 100644 index 25c4c143..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/CheckCompanyExistenceService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.rollingdomains.domain.company.services; - -public interface CheckCompanyExistenceService { - - void checkById(Long id); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/DeleteCompanyService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/DeleteCompanyService.java deleted file mode 100644 index f70133f7..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/DeleteCompanyService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.rollingdomains.domain.company.services; - -import com.stubee.rollingdomains.domain.company.model.CompanyId; - -public interface DeleteCompanyService { - - void delete(CompanyId companyId); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/ModifyCompanyService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/ModifyCompanyService.java deleted file mode 100644 index efe03645..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/ModifyCompanyService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.stubee.rollingdomains.domain.company.services; - -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; -import com.stubee.rollingdomains.domain.company.model.CompanyDetails; -import com.stubee.rollingdomains.domain.company.model.CompanyId; - -public interface ModifyCompanyService { - - void modify(Long id, CompanyDetails companyDetails); - - void modify(CompanyId companyId, CompanyStatus status); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/RegisterCompanyService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/RegisterCompanyService.java deleted file mode 100644 index f626e82e..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/RegisterCompanyService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.rollingdomains.domain.company.services; - -import com.stubee.rollingdomains.domain.company.model.Company; - -public interface RegisterCompanyService { - - Company register(Company company); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/UpdateCompanyListService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/UpdateCompanyListService.java deleted file mode 100644 index 34e1c9e0..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/services/UpdateCompanyListService.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.stubee.rollingdomains.domain.company.services; - -import com.stubee.rollingdomains.domain.company.model.Company; - -import java.util.List; - -public interface UpdateCompanyListService { - - void updateAll(List companyList); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/consts/EmploymentStatus.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/consts/EmploymentStatus.java deleted file mode 100644 index a0fa2a51..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/consts/EmploymentStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.consts; - -public enum EmploymentStatus { - HOLD, QUIT -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentExistException.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentExistException.java deleted file mode 100644 index c1c5abfd..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentExistException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.exception; - -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; - -public class EmploymentExistException extends CustomException { - - public static final CustomException EXCEPTION = new EmploymentExistException(); - - private EmploymentExistException() { - super(ErrorCode.EMPLOYMENT_EXIST); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentNotFoundException.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentNotFoundException.java deleted file mode 100644 index 0e1c81da..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/exception/EmploymentNotFoundException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.exception; - -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; - -public class EmploymentNotFoundException extends CustomException { - - public static final CustomException EXCEPTION = new EmploymentNotFoundException(); - - private EmploymentNotFoundException() { - super(ErrorCode.EMPLOYMENT_NOT_FOUND); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployeeId.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployeeId.java deleted file mode 100644 index e926b35d..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployeeId.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.model; - -import com.stubee.rollingdomains.common.model.BaseId; - -public class EmployeeId extends BaseId { - - private EmployeeId(Long id) { - super(id); - } - - public static EmployeeId of(final Long id) { - return new EmployeeId(id); - } - - public static EmployeeId of(final BaseId id) { - return new EmployeeId(id.getId()); - } - - @Override - public boolean equals(Object o) { - return super.equals(o); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployerId.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployerId.java deleted file mode 100644 index ad6cd067..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmployerId.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.model; - -import com.stubee.rollingdomains.common.model.BaseId; - -public class EmployerId extends BaseId { - - private EmployerId(Long id) { - super(id); - } - - public static EmployerId of(final Long id) { - return new EmployerId(id); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/Employment.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/Employment.java deleted file mode 100644 index bc6a0117..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/Employment.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.model; - -import com.stubee.rollingdomains.common.error.Assert; -import lombok.Builder; - -public record Employment( - EmploymentId employmentId, - EmploymentDetails employmentDetails) { - @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") - public Employment(EmploymentDetails employmentDetails) { - this(null, employmentDetails); - } - - @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") - public Employment { - Assert.notNull(employmentDetails, "EmploymentDetails must not be null"); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentDetails.java deleted file mode 100644 index 11008086..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentDetails.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.employment.consts.EmploymentStatus; -import lombok.Builder; - -import java.time.LocalDateTime; - -public record EmploymentDetails( - EmployeeId employeeId, - EmployerId employerId, - EmploymentStatus employmentStatus, - LocalDateTime createdAt) { - @Builder(builderClassName = "ExceptDateBuilder", builderMethodName = "ExceptDateBuilder") - public EmploymentDetails(EmployeeId employeeId, EmployerId employerId, EmploymentStatus employmentStatus) { - this(employeeId, employerId, employmentStatus, null); - } - - @Builder(builderClassName = "WithDateBuilder", builderMethodName = "WithDateBuilder") - public EmploymentDetails { - Assert.notNull(employeeId, "EmployeeId must not be null"); - Assert.notNull(employerId, "EmployerId must not be null"); - Assert.notNull(employmentStatus, "EmploymentStatus must not be null"); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentId.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentId.java deleted file mode 100644 index 856e556c..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/model/EmploymentId.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.model; - -import java.util.Objects; - -public record EmploymentId( - Long id) { - public static EmploymentId of(final Long id) { - return new EmploymentId(id); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null || getClass() != obj.getClass()) { - return false; - } - EmploymentId comparedId = (EmploymentId) obj; - return Objects.equals(this.id, comparedId.id); - } - - @Override - public int hashCode() { - return Objects.hashCode(this.id); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/CheckEmploymentExistenceService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/CheckEmploymentExistenceService.java deleted file mode 100644 index 25f2bb4b..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/CheckEmploymentExistenceService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.services; - -public interface CheckEmploymentExistenceService { - - void checkByEmployeeAndEmployer(Long employeeId, Long employerId); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/RegisterEmploymentService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/RegisterEmploymentService.java deleted file mode 100644 index 67c78bbb..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/employment/services/RegisterEmploymentService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.rollingdomains.domain.employment.services; - -import com.stubee.rollingdomains.domain.employment.model.Employment; - -public interface RegisterEmploymentService { - - Employment register(Employment employment); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/LoginType.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/LoginType.java deleted file mode 100644 index ad23fdcf..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/LoginType.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.stubee.rollingdomains.domain.member.consts; - -public enum LoginType { - GITHUB, GOOGLE -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberCertifiedEvent.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberCertifiedEvent.java deleted file mode 100644 index 3c084ce4..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberCertifiedEvent.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.stubee.rollingdomains.domain.member.events; - -public record MemberCertifiedEvent() { -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/Member.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/Member.java deleted file mode 100644 index 1de9fa29..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/Member.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.stubee.rollingdomains.domain.member.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.exception.WrongLoginTypeException; -import lombok.Builder; - -public record Member ( - MemberId memberId, - SocialDetails socialDetails, - MemberDetails memberDetails) { - @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") - public Member(SocialDetails socialDetails, MemberDetails memberDetails) { - this(null, socialDetails, memberDetails); - } - - @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") - public Member { - Assert.notNull(socialDetails, "SocialDetails must not be null"); - Assert.notNull(memberDetails, "MemberDetails must not be null"); - } - - public Member updateLoginId(final String socialLoginId) { - return new Member(memberId, socialDetails.updateLoginId(socialLoginId), memberDetails); - } - - public Member updateEmail(final String email) { - return new Member(memberId, socialDetails.updateEmail(email), memberDetails); - } - - public Member updateNickname(final String nickname) { - return new Member(memberId, socialDetails, memberDetails.update(nickname)); - } - - public Member elevateToMember() { - return new Member(memberId, socialDetails, memberDetails.elevateToMember()); - } - - public void isEqualLoginType(final LoginType loginType) { - if(socialDetails.loginType()!=loginType) { - throw WrongLoginTypeException.EXCEPTION; - } - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberDetails.java deleted file mode 100644 index a1332133..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberDetails.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.stubee.rollingdomains.domain.member.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; -import lombok.Builder; - -import java.time.LocalDateTime; - -public record MemberDetails( - String nickName, - MemberRole memberRole, - LocalDateTime createdAt, - LocalDateTime modifiedAt) { - @Builder(builderClassName = "OnlyWithRoleBuilder", builderMethodName = "OnlyWithRoleBuilder") - public MemberDetails(MemberRole memberRole) { - this(null, memberRole, null, null); - } - - @Builder(builderClassName = "AllArgsBuilder", builderMethodName = "AllArgsBuilder") - public MemberDetails { - Assert.notNull(memberRole, "MemberRole must not be null"); - } - - MemberDetails update(final String nickName) { - return new MemberDetails(nickName, memberRole, createdAt, modifiedAt); - } - - MemberDetails elevateToMember() { - if(memberRole!=MemberRole.TEMP) { - return this; - } - return new MemberDetails(nickName, MemberRole.MEMBER, createdAt, modifiedAt); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/SocialDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/SocialDetails.java deleted file mode 100644 index 737b7f1d..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/SocialDetails.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.stubee.rollingdomains.domain.member.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import lombok.Builder; - -public record SocialDetails( - String socialId, - String socialLoginId, - LoginType loginType, - String name, - String email, - String imageUrl) { - @Builder(builderClassName = "AllArgsBuilder", builderMethodName = "AllArgsBuilder") - public SocialDetails { - Assert.notNull(socialId, "SocialId must not be null"); - Assert.notNull(socialLoginId, "SocialLoginId must not be null"); - Assert.notNull(loginType, "LoginType must not be null"); - } - - SocialDetails updateLoginId(final String socialLoginId) { - return new SocialDetails(socialId, socialLoginId, loginType, name, email, imageUrl); - } - - SocialDetails updateEmail(final String email) { - return new SocialDetails(socialId, socialLoginId, loginType, name, email, imageUrl); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ElevateMemberRoleService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ElevateMemberRoleService.java deleted file mode 100644 index d88f91d7..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ElevateMemberRoleService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.rollingdomains.domain.member.services; - -public interface ElevateMemberRoleService { - - void elevate(); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ModifyNicknameService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ModifyNicknameService.java deleted file mode 100644 index 39005842..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/services/ModifyNicknameService.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.stubee.rollingdomains.domain.member.services; - -public interface ModifyNicknameService { - - void modify(String nickname); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/EmploymentDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/EmploymentDetails.java deleted file mode 100644 index 35b8ec17..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/EmploymentDetails.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.rollingdomains.domain.story.model; - -import lombok.Builder; - -public record EmploymentDetails( - String schoolLife, //학교에서의 생활 - String preparationCourse, //취업준비과정 - String employmentProcess, //채용 프로세스 - String interviewQuestion, //면접질문 - String mostImportantThing /*가장 중요하는 점*/) { - @Builder - public EmploymentDetails { - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/ReviewGrades.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/ReviewGrades.java deleted file mode 100644 index cf4dc538..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/ReviewGrades.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.stubee.rollingdomains.domain.story.model; - -import com.stubee.rollingdomains.common.model.Grades; -import lombok.Builder; - -public class ReviewGrades extends Grades { - - @Builder(builderClassName = "ExceptTotalBuilder", builderMethodName = "ExceptTotalBuilder") - public ReviewGrades(Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { - super(salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); - } - - @Builder(builderClassName = "WithTotalBuilder", builderMethodName = "WithTotalBuilder") - public ReviewGrades(Double total, Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { - super(total, salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/Story.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/Story.java deleted file mode 100644 index 8a8a4441..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/Story.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.stubee.rollingdomains.domain.story.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import lombok.Builder; - -public record Story( - StoryId storyId, - StoryDetails storyDetails, - ReviewGrades reviewGrades) { - @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") - public Story(StoryDetails storyDetails, ReviewGrades reviewGrades) { - this(null, storyDetails, reviewGrades); - } - - @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") - public Story { - Assert.notNull(storyDetails, "StoryDetails must not be null"); - Assert.notNull(reviewGrades, "ReviewGrades must not be null"); - } - - public Story update(final EmploymentDetails employmentDetails, final CorporationDetails corporationDetails, - final ReviewGrades reviewGrades) { - return new Story(storyId, storyDetails.update(employmentDetails, corporationDetails), reviewGrades); - } - - public void isAuthor(final MemberId memberId) { - storyDetails.authorId().isEqual(memberId); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryDetails.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryDetails.java deleted file mode 100644 index 8a80fab6..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryDetails.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.stubee.rollingdomains.domain.story.model; - -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import lombok.Builder; - -import java.time.LocalDateTime; - -public record StoryDetails( - AuthorId authorId, - CompanyId companyId, - EmploymentDetails employmentDetails, - CorporationDetails corporationDetails, - LocalDateTime createdAt, - LocalDateTime modifiedAt -) { - @Builder(builderClassName = "ExceptDateBuilder", builderMethodName = "ExceptDateBuilder") - public StoryDetails(AuthorId authorId, CompanyId companyId, EmploymentDetails employmentDetails, CorporationDetails corporationDetails) { - this(authorId, companyId, employmentDetails, corporationDetails, null, null); - } - - @Builder(builderClassName = "WithDateBuilder", builderMethodName = "WithDateBuilder") - public StoryDetails { - Assert.notNull(authorId, "AuthorId must not be null"); - Assert.notNull(companyId, "CompanyId must not be null"); - Assert.notNull(employmentDetails, "EmploymentDetails must not be null"); - Assert.notNull(corporationDetails, "CorporationDetails must not be null"); - } - - public StoryDetails update(EmploymentDetails employmentDetails, CorporationDetails corporationDetails) { - return new StoryDetails(authorId, companyId, employmentDetails, corporationDetails, createdAt, modifiedAt); - } -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/DeleteStoryService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/DeleteStoryService.java deleted file mode 100644 index 5ea8e57d..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/DeleteStoryService.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.stubee.rollingdomains.domain.story.services; - -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.model.StoryId; - -public interface DeleteStoryService { - - void delete(StoryId storyId, MemberId memberId); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/ModifyStoryService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/ModifyStoryService.java deleted file mode 100644 index a6824cf1..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/ModifyStoryService.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.stubee.rollingdomains.domain.story.services; - -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.model.CorporationDetails; -import com.stubee.rollingdomains.domain.story.model.EmploymentDetails; -import com.stubee.rollingdomains.domain.story.model.ReviewGrades; -import com.stubee.rollingdomains.domain.story.model.StoryId; - -public interface ModifyStoryService { - - void modify(StoryId id, EmploymentDetails employmentDetails, CorporationDetails corporationDetails, - ReviewGrades reviewGrades, MemberId memberId); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/RegisterStoryService.java b/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/RegisterStoryService.java deleted file mode 100644 index 976f271b..00000000 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/services/RegisterStoryService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.stubee.rollingdomains.domain.story.services; - -import com.stubee.rollingdomains.domain.story.model.Story; - -public interface RegisterStoryService { - - Story register(Story story); - -} \ No newline at end of file diff --git a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/common/BaseIdTest.java b/Rolling-Domains/src/test/java/com/stubee/rollingdomains/common/BaseIdTest.java deleted file mode 100644 index 99302435..00000000 --- a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/common/BaseIdTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.stubee.rollingdomains.common; - -import com.stubee.rollingdomains.common.error.exception.NotMatchedIdException; -import com.stubee.rollingdomains.domain.company.model.RegistrantId; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.model.AuthorId; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -public class BaseIdTest { - - @Test - @DisplayName(value = "같은 Id일 때 성공") - void 같은_ID일_때_성공() { - //given - MemberId memberId = MemberId.of(1L); - RegistrantId registrantId = RegistrantId.of(1L); - AuthorId authorId = AuthorId.of(1L); - - //then - assertDoesNotThrow(() -> authorId.isEqual(memberId)); - assertDoesNotThrow(() -> memberId.isEqual(registrantId)); - assertDoesNotThrow(() -> registrantId.isEqual(authorId)); - } - - @Test - @DisplayName(value = "다른 Id일 때 실패") - void 다른_ID일_때_실패() { - //given - MemberId memberId = MemberId.of(1L); - RegistrantId registrantId = RegistrantId.of(2L); - AuthorId authorId = AuthorId.of(3L); - - //then - assertThrows(NotMatchedIdException.class, () -> authorId.isEqual(memberId)); - assertThrows(NotMatchedIdException.class, () -> memberId.isEqual(registrantId)); - assertThrows(NotMatchedIdException.class, () -> registrantId.isEqual(authorId)); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/company/CompanyTest.java b/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/company/CompanyTest.java deleted file mode 100644 index a5aacb87..00000000 --- a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/company/CompanyTest.java +++ /dev/null @@ -1,119 +0,0 @@ -package com.stubee.rollingdomains.domain.company; - -import com.stubee.rollingdomains.common.error.exception.NotMatchedIdException; -import com.stubee.rollingdomains.common.error.exception.WrongCalculationException; -import com.stubee.rollingdomains.domain.company.model.*; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -public class CompanyTest { - - private Company company; - - @BeforeEach - void init() { - company = Company.WithIdBuilder() - .companyId(CompanyId.of(1L)) - .companyDetails(CompanyDetails.ExceptDateBuilder() - .name("木ノ葉隠れの里") - .description("日本で最高の会社") - .companyLogo(CompanyLogo.of(null, null)) - .companyAddress(Address.of("木ノ葉隠れの里", null)) - .registrantId(RegistrantId.of(1L)) - .build()) - .companyGrades(CompanyGrades.zero()) - .build(); - } - - @Test - @DisplayName(value = "인자가 null일 때 CompanyDetails 생성 실패") - void 인자가_NULL일_때_COMPANYDETAILS_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> CompanyDetails.WithDateBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> CompanyDetails.ExceptDateBuilder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 CompanyGrades 생성 실패") - void 인자가_NULL일_때_COMPANYGRADES_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> CompanyGrades.WithTotalBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> CompanyGrades.ExceptTotalBuilder().build()); - } - - @Test - @DisplayName(value = "Total 포함 CompanyGrades 생성 성공") - void 정확한_Total일_때_생성_성공() { - assertDoesNotThrow(() -> CompanyGrades.WithTotalBuilder() - .total(2.5) - .salaryAndBenefits(2.0) - .workLifeBalance(4.0) - .organizationalCulture(1.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "잘못 계산된 Total일 때 CompanyGrades 생성 실패") - void 잘못_계산된_Total일_때_생성_실패() { - assertThrows(WrongCalculationException.class, () -> CompanyGrades.WithTotalBuilder() - .total(2.3) - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - /* - * Double 오차범위 : 0.000000000000001 - * */ - @Test - @DisplayName(value = "오차범위를 안쪽일때 CompanyGrades 생성 실패") - void DOUBLE_오차범위_안쪽일때_COMPANYGRADES_생성_실패() { - assertThrows(WrongCalculationException.class, () -> CompanyGrades.WithTotalBuilder() - .total(2.499999999999999) //오차범위 - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "오차범위를 벗어났을 때 CompanyGrades 생성 성공") - void DOUBLE_오차범위를_벗어났을_때_COMPANYGRADES_생성_성공() { - assertDoesNotThrow(() -> CompanyGrades.WithTotalBuilder() - .total(2.4999999999999999) - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "Author check 성공") - void AUTHOR_CHECK_성공() { - //given - MemberId memberId = MemberId.of(1L); - - //when then - assertDoesNotThrow(() -> company.isAuthor(memberId)); - } - - @Test - @DisplayName(value = "Author check 실패") - void AUTHOR_CHECK_실패() { - //given - MemberId memberId = MemberId.of(2L); - - //when then - assertThrows(NotMatchedIdException.class, () -> company.isAuthor(memberId)); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/member/MemberTest.java b/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/member/MemberTest.java deleted file mode 100644 index 1714359f..00000000 --- a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/member/MemberTest.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.stubee.rollingdomains.domain.member; - -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; -import com.stubee.rollingdomains.domain.member.exception.WrongLoginTypeException; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberDetails; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.member.model.SocialDetails; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.time.LocalDateTime; - -import static org.junit.jupiter.api.Assertions.*; - -public class MemberTest { - - private Member member; - - @BeforeEach - void init() { - member = Member.WithIdBuilder() - .memberId(MemberId.of(1L)) - .memberDetails(MemberDetails.AllArgsBuilder() - .memberRole(MemberRole.MEMBER) - .nickName("hello") - .createdAt(LocalDateTime.now()) - .modifiedAt(LocalDateTime.now()) - .build()) - .socialDetails(SocialDetails.AllArgsBuilder() - .socialId("1111111111") - .socialLoginId("suw0n") - .loginType(LoginType.GITHUB) - .name("최수원") - .build()) - .build(); - } - - @Test - @DisplayName(value = "VO가 null일 때 Member 생성 샐패") - void VO가_NULL일_때_MEMBER_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> Member.ExceptIdBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> Member.WithIdBuilder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 MemberDetails 생성 실패") - void 인자가_NULL일_때_MEMBERDETAILS_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> MemberDetails.OnlyWithRoleBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> MemberDetails.AllArgsBuilder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 SocialDetails 생성 실패") - void 인자가_NULL일_때_SOCIALDETAILS_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> SocialDetails.AllArgsBuilder().build()); - } - - @Test - @DisplayName(value = "LoginType이 다를 때 Exception 발생") - void LOGIN_TYPE이_다를_때_EXCEPTION_발생() { - //given - final LoginType loginType = LoginType.GOOGLE; - - //when then - assertThrows(WrongLoginTypeException.class, () -> member.isEqualLoginType(loginType)); - } - - @Test - @DisplayName(value = "LoginType이 같을 때 성공") - void LOGIN_TYPE이_같을_때_성공() { - //given - final LoginType loginType = LoginType.GITHUB; - - //when then - assertDoesNotThrow(() -> member.isEqualLoginType(loginType)); - } - - @Test - @DisplayName(value = "LoginId 변경 성공") - void LOGIN_ID_변경_성공() { - //given - final String newLoginId = "suw0n222"; - - //when - final String changedLoginId = member.updateLoginId(newLoginId).socialDetails().socialLoginId(); - - //then - assertEquals(newLoginId, changedLoginId); - } - - @Test - @DisplayName(value = "Nickname 변경 성공") - void NICKNAME_변경_성공() { - //given - final String newNickname = "Uchiha Itachi"; - - //when - final String changedNickname = member.updateNickname(newNickname).memberDetails().nickName(); - - //then - assertEquals(newNickname, changedNickname); - } - - @Test - @DisplayName(value = "MemberRole 상승 성공") - void MEMBER_ROLE_상승_성공() { - //given - - //when - final MemberRole elevatedRole = member.elevateToMember().memberDetails().memberRole(); - - //then - assertEquals(MemberRole.MEMBER, elevatedRole); - } - -} \ No newline at end of file diff --git a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/story/StoryTest.java b/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/story/StoryTest.java deleted file mode 100644 index 4c34658f..00000000 --- a/Rolling-Domains/src/test/java/com/stubee/rollingdomains/domain/story/StoryTest.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.stubee.rollingdomains.domain.story; - -import com.stubee.rollingdomains.common.error.exception.NotMatchedIdException; -import com.stubee.rollingdomains.common.error.exception.WrongCalculationException; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.model.*; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import java.time.LocalDateTime; - -import static org.junit.jupiter.api.Assertions.*; - -public class StoryTest { - - private Story story; - - @BeforeEach - void init() { - story = Story.WithIdBuilder() - .storyId(StoryId.of(1L)) - .storyDetails(StoryDetails.WithDateBuilder() - .authorId(AuthorId.of(1L)) - .companyId(CompanyId.of(1L)) - .corporationDetails(CorporationDetails.builder() - .position("Project Manager") - .pros("어려운 과제가 많아 성장할 수 있습니다.") - .cons("일이 많습니다ㅜㅜ") - .welfare("쏘쏘합니다.") - .build()) - .employmentDetails(EmploymentDetails.builder() - .build()) - .createdAt(LocalDateTime.now()) - .modifiedAt(LocalDateTime.now()) - .build()) - .reviewGrades(ReviewGrades.ExceptTotalBuilder() - .salaryAndBenefits(3.0) - .workLifeBalance(2.0) - .organizationalCulture(3.0) - .careerAdvancement(5.0) - .build()) - .build(); - } - - @Test - @DisplayName(value = "VO가 null일 때 생성 실패") - void VO가_NULL일_때_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> Story.WithIdBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> Story.ExceptIdBuilder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 StoryDetails 생성 실패") - void 인자가_NULL일_때_STORYDETAILS_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> StoryDetails.ExceptDateBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> StoryDetails.WithDateBuilder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 CorporationDetails 생성 실패") - void 인자가_NULL일_때_CORPORATIONDETAILS_생성_실패() { - //when then - assertThrows(IllegalArgumentException.class, () -> CorporationDetails.builder().build()); - } - - @Test - @DisplayName(value = "인자가 null일 때 ReviewGrades 생성 실패") - void 인자가_NULL일_때_REVIEWGRADES_생성_실패() { - assertThrows(IllegalArgumentException.class, () -> ReviewGrades.WithTotalBuilder().build()); - assertThrows(IllegalArgumentException.class, () -> ReviewGrades.ExceptTotalBuilder().build()); - } - - @Test - @DisplayName(value = "Total 포함 Grades ReviewGrades 생성 성공") - void 정확한_Total일_때_REVIEWGRADES_생성_성공() { - assertDoesNotThrow(() -> ReviewGrades.WithTotalBuilder() - .total(2.5) - .salaryAndBenefits(2.0) - .workLifeBalance(4.0) - .organizationalCulture(1.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "잘못 계산된 Total일 때 ReviewGrades 생성 실패") - void 잘못_계산된_Total일_때_REVIEWGRADES_생성_실패() { - assertThrows(WrongCalculationException.class, () -> ReviewGrades.WithTotalBuilder() - .total(2.3) - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - /* - * Double 오차범위 : 0.000000000000001 - * */ - @Test - @DisplayName(value = "Double 오차범위를 안쪽일때 ReviewGrades 생성 실패") - void DOUBLE_오차범위_안쪽일때_REVIEWGRADES_생성_실패() { - assertThrows(WrongCalculationException.class, () -> ReviewGrades.WithTotalBuilder() - .total(2.499999999999999) //오차범위 - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "Double 오차범위를 벗어났을 때 ReviewGrades 생성 성공") - void DOUBLE_오차범위를_벗어났을_때_REVIEWGRADES_생성_성공() { - assertDoesNotThrow(() -> ReviewGrades.WithTotalBuilder() - .total(2.4999999999999999) - .salaryAndBenefits(1.0) - .workLifeBalance(2.0) - .organizationalCulture(4.0) - .careerAdvancement(3.0) - .build()); - } - - @Test - @DisplayName(value = "Author check 성공") - void AUTHOR_CHECK_성공() { - //given - MemberId memberId = MemberId.of(1L); - - //when then - assertDoesNotThrow(() -> story.isAuthor(memberId)); - } - - @Test - @DisplayName(value = "Author check 실패") - void AUTHOR_CHECK_실패() { - //given - MemberId memberId = MemberId.of(2L); - - //when then - assertThrows(NotMatchedIdException.class, () -> story.isAuthor(memberId)); - } - -} \ No newline at end of file diff --git a/rolling-adapter/build.gradle b/rolling-adapter/build.gradle new file mode 100644 index 00000000..2a821e69 --- /dev/null +++ b/rolling-adapter/build.gradle @@ -0,0 +1,11 @@ +allprojects { + bootJar { enabled = false } + jar { enabled = true } +} + +subprojects { + dependencies { + implementation project(':rolling-core:domain') + implementation project(':rolling-core:application') + } +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/build.gradle b/rolling-adapter/jpa-mysql/build.gradle new file mode 100644 index 00000000..980d975e --- /dev/null +++ b/rolling-adapter/jpa-mysql/build.gradle @@ -0,0 +1,29 @@ +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-validation' + + implementation 'io.hypersistence:hypersistence-utils-hibernate-60:3.6.0' + + implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' + annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta" + annotationProcessor "jakarta.annotation:jakarta.annotation-api" + annotationProcessor "jakarta.persistence:jakarta.persistence-api" +} + +def querydslDir = "$buildDir/generated/querydsl" + +sourceSets { + main.java.srcDirs += [querydslDir] +} + +tasks.withType(JavaCompile) { + options.annotationProcessorGeneratedSourcesDirectory = file(querydslDir) +} + +clean.doLast { + file(querydslDir).deleteDir() +} + +tasks.named('test') { + useJUnitPlatform() +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/jpa/JpaAuditingConfig.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/jpa/JpaAuditingConfig.java similarity index 71% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/jpa/JpaAuditingConfig.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/jpa/JpaAuditingConfig.java index 42c3ebb6..68477b05 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/jpa/JpaAuditingConfig.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/jpa/JpaAuditingConfig.java @@ -1,4 +1,4 @@ -package com.stubee.persistencecommons.config.jpa; +package rolling.jpamysql.common.config.jpa; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.annotation.Configuration; @@ -7,7 +7,7 @@ @Configuration @EnableJpaAuditing -@EntityScan("com.stubee.persistencecommons.entity") -@EnableJpaRepositories("com.stubee") +@EntityScan("rolling") +@EnableJpaRepositories("rolling") public class JpaAuditingConfig { } \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/querydsl/QueryDSLConfig.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/querydsl/QueryDSLConfig.java similarity index 89% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/querydsl/QueryDSLConfig.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/querydsl/QueryDSLConfig.java index d2f0d3ca..10699b72 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/config/querydsl/QueryDSLConfig.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/config/querydsl/QueryDSLConfig.java @@ -1,4 +1,4 @@ -package com.stubee.persistencecommons.config.querydsl; +package rolling.jpamysql.common.config.querydsl; import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTSIDEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTSIDEntity.java similarity index 78% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTSIDEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTSIDEntity.java index aa2bed16..7fa074eb 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTSIDEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTSIDEntity.java @@ -1,4 +1,4 @@ -package com.stubee.persistencecommons.entity.base; +package rolling.jpamysql.common.entity.base; import io.hypersistence.utils.hibernate.id.Tsid; import jakarta.persistence.Id; @@ -12,7 +12,7 @@ @SuperBuilder @MappedSuperclass @NoArgsConstructor(access = AccessLevel.PROTECTED) -public abstract class BaseTSIDEntity { +public abstract class BaseTSIDEntity extends BaseTimeEntity { @Id @Tsid diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTimeEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTimeEntity.java similarity index 93% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTimeEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTimeEntity.java index bd2b4406..bf0040bd 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/base/BaseTimeEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/common/entity/base/BaseTimeEntity.java @@ -1,4 +1,4 @@ -package com.stubee.persistencecommons.entity.base; +package rolling.jpamysql.common.entity.base; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAAdapter.java new file mode 100644 index 00000000..80d203a3 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAAdapter.java @@ -0,0 +1,40 @@ +package rolling.jpamysql.company; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.company.outport.CommandCompanyPort; +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyId; + +import java.util.List; + +import static rolling.jpamysql.company.CompanyMapper.*; + +@Component +@RequiredArgsConstructor +class CompanyJPAAdapter implements CommandCompanyPort { + + private final CompanyJpaRepository repository; + + @Override + public Company save(final Company company) { + try { + CompanyId id = company.companyId(); + } catch (NullPointerException e) { + return toDomain(repository.save(toEntity(company))); + } + + return toDomain(repository.save((toEntityWithId(company)))); + } + + @Override + public void updateAll(final List companyList) { + companyList.forEach(company -> repository.save(toEntityWithId(company))); + } + + @Override + public void deleteById(final CompanyId companyId) { + repository.deleteById(companyId.getId()); + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAEntity.java similarity index 83% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAEntity.java index e8f940a6..3e5585af 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJPAEntity.java @@ -1,7 +1,5 @@ -package com.stubee.persistencecommons.entity; +package rolling.jpamysql.company; -import com.stubee.persistencecommons.entity.base.BaseEntity; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; @@ -10,6 +8,8 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.hibernate.annotations.DynamicUpdate; +import rolling.domain.company.consts.CompanyStatus; +import rolling.jpamysql.common.entity.base.BaseTSIDEntity; @Entity @Table(name = "tbl_company") @@ -17,7 +17,7 @@ @SuperBuilder @DynamicUpdate @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class CompanyEntity extends BaseEntity { +public class CompanyJPAEntity extends BaseTSIDEntity { @NotNull @Column(unique = true) diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJpaRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJpaRepository.java new file mode 100644 index 00000000..38d4b974 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyJpaRepository.java @@ -0,0 +1,6 @@ +package rolling.jpamysql.company; + +import org.springframework.data.jpa.repository.JpaRepository; + +interface CompanyJpaRepository extends JpaRepository { +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CompanyMapper.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyMapper.java similarity index 75% rename from Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CompanyMapper.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyMapper.java index e1856771..b75dfd12 100644 --- a/Rolling-Adapters/persistence/company-persistence/src/main/java/com/stubee/companypersistence/adapters/CompanyMapper.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyMapper.java @@ -1,18 +1,13 @@ -package com.stubee.companypersistence.adapters; +package rolling.jpamysql.company; -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.persistencecommons.entity.CompanyEntity; -import com.stubee.rollingdomains.domain.company.model.CompanyGrades; -import com.stubee.rollingdomains.domain.company.model.*; +import rolling.domain.company.model.*; import java.util.List; -@DomainObjectMapper -class CompanyMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { +abstract class CompanyMapper { - @Override - public CompanyEntity toEntity(final Company domain) { - return CompanyEntity.builder() + static CompanyJPAEntity toEntity(final Company domain) { + return CompanyJPAEntity.builder() .registrantId(domain.companyDetails().registrantId().getId()) .name(domain.companyDetails().name()) .address(domain.companyDetails().companyAddress().address()) @@ -30,8 +25,8 @@ public CompanyEntity toEntity(final Company domain) { .build(); } - public CompanyEntity toEntityWithId(final Company domain) { - return CompanyEntity.builder() + static CompanyJPAEntity toEntityWithId(final Company domain) { + return CompanyJPAEntity.builder() .id(domain.companyId().getId()) .registrantId(domain.companyDetails().registrantId().getId()) .name(domain.companyDetails().name()) @@ -50,8 +45,7 @@ public CompanyEntity toEntityWithId(final Company domain) { .build(); } - @Override - public Company toDomain(final CompanyEntity entity) { + static Company toDomain(final CompanyJPAEntity entity) { if(entity==null) { return null; } @@ -63,12 +57,12 @@ public Company toDomain(final CompanyEntity entity) { .build(); } - public List toDomainList(final List entityList) { - return entityList.stream().map(this::toDomain).toList(); + static List toDomainList(final List entityList) { + return entityList.stream().map(CompanyMapper::toDomain).toList(); } - private CompanyDetails companyDetails(final CompanyEntity entity) { - return CompanyDetails.WithDateBuilder() + private static CompanyDetails companyDetails(final CompanyJPAEntity entity) { + return CompanyDetails.builder() .registrantId(RegistrantId.of(entity.getRegistrantId())) .name(entity.getName()) .companyAddress(Address.of(entity.getAddress(), entity.getAddressEtc())) @@ -80,8 +74,8 @@ private CompanyDetails companyDetails(final CompanyEntity entity) { .build(); } - private CompanyGrades companyGrades(final CompanyEntity entity) { - return CompanyGrades.WithTotalBuilder() + private static CompanyGrades companyGrades(final CompanyJPAEntity entity) { + return CompanyGrades.builder() .total(entity.getTotalGrade()) .salaryAndBenefits(entity.getSalaryAndBenefits()) .workLifeBalance(entity.getWorkLifeBalance()) diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLAdapter.java new file mode 100644 index 00000000..36650c0e --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLAdapter.java @@ -0,0 +1,62 @@ +package rolling.jpamysql.company; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.company.interactor.query.CompanyQueryResponse; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.domain.common.model.PageRequest; +import rolling.domain.company.model.Company; + +import java.util.List; +import java.util.Optional; + +import static rolling.jpamysql.company.CompanyMapper.toDomain; +import static rolling.jpamysql.company.CompanyMapper.toDomainList; + +@Component +@RequiredArgsConstructor +class CompanyQueryDSLAdapter implements QueryCompanyPort { + + private final CompanyQueryDSLRepository repository; + + @Override + public boolean existsBy(final Long id) { + return repository.existsByCompanyId(id); + } + + @Override + public boolean existsBy(final String name) { + return repository.existsByCompanyName(name); + } + + @Override + public Optional findBy(final Long id) { + return Optional.ofNullable(toDomain(repository.findById(id))); + } + + @Override + public Optional findInfoBy(final Long id) { + return Optional.ofNullable(repository.findInfoById(id)); + } + + @Override + public List getOrderBy(final String gradeType) { + return toDomainList(repository.findOrderBy(gradeType)); + } + + @Override + public List searchByName(final String name, final PageRequest pageRequest) { + return toDomainList(repository.findByNameContaining(name, pageRequest)); + } + + @Override + public List getByRegistrant(final Long registrantId, final PageRequest pageRequest) { + return toDomainList(repository.findByRegistrantId(registrantId, pageRequest)); + } + + @Override + public List getAll(final PageRequest pageRequest) { + return toDomainList(repository.findAll(pageRequest)); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLRepository.java new file mode 100644 index 00000000..d36e020e --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/company/CompanyQueryDSLRepository.java @@ -0,0 +1,132 @@ +package rolling.jpamysql.company; + +import com.querydsl.core.types.ConstructorExpression; +import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import rolling.application.company.interactor.query.CompanyQueryResponse; +import rolling.domain.common.model.PageRequest; +import rolling.domain.company.consts.CompanyStatus; + +import java.util.List; + +import static rolling.jpamysql.company.QCompanyJPAEntity.*; +import static rolling.jpamysql.member.QMemberJPAEntity.*; + +@Repository +@RequiredArgsConstructor +class CompanyQueryDSLRepository { + + private static final int RANK_LIMIT = 10; + + private final JPAQueryFactory jpaQueryFactory; + + CompanyJPAEntity findById(Long id) { + return jpaQueryFactory + .selectFrom(companyJPAEntity) + .where(companyJPAEntity.id.eq(id)) + .fetchOne(); + } + + CompanyQueryResponse findInfoById(Long id) { + return jpaQueryFactory + .select(responseProjection()) + .from(companyJPAEntity) + .innerJoin(memberJPAEntity) + .on(companyJPAEntity.registrantId.eq(memberJPAEntity.id)) + .where(companyJPAEntity.id.eq(id)) + .fetchOne(); + } + + boolean existsByCompanyId(Long id) { + return jpaQueryFactory + .selectOne() + .from(companyJPAEntity) + .where(companyJPAEntity.id.eq(id) + .and(companyJPAEntity.companyStatus.eq(CompanyStatus.ACCEPTED)) + ) != null; + } + + boolean existsByCompanyName(String name) { + return jpaQueryFactory + .selectOne() + .from(companyJPAEntity) + .where(companyJPAEntity.name.eq(name) + .and(companyJPAEntity.companyStatus.eq(CompanyStatus.ACCEPTED)) + ) != null; + } + + List findByNameContaining(String name, PageRequest pageRequest) { + return findByOptionWithPaging( + companyJPAEntity.name.contains(name) + .and(companyJPAEntity.companyStatus.eq(CompanyStatus.ACCEPTED)), + pageRequest); + } + + List findByRegistrantId(Long registrantId, PageRequest pageRequest) { + return findByOptionWithPaging(companyJPAEntity.registrantId.eq(registrantId), pageRequest); + } + + private List findByOptionWithPaging(Predicate option, PageRequest pageRequest) { + return jpaQueryFactory + .selectFrom(companyJPAEntity) + .where(option) + .orderBy(companyJPAEntity.createdAt.desc()) + .offset(pageRequest.page()) + .limit(pageRequest.size()) + .fetch(); + } + + List findAll(PageRequest pageRequest) { + return jpaQueryFactory + .selectFrom(companyJPAEntity) + .where(companyJPAEntity.companyStatus.eq(CompanyStatus.ACCEPTED)) + .offset(pageRequest.page()) + .limit(pageRequest.size()) + .fetch(); + } + + List findOrderBy(String gradeType) { + NumberPath order = switch (gradeType) { + case "total" -> companyJPAEntity.totalGrade; + case "salary-benefits" -> companyJPAEntity.salaryAndBenefits; + case "balance" -> companyJPAEntity.workLifeBalance; + case "culture" -> companyJPAEntity.organizationalCulture; + case "career" -> companyJPAEntity.careerAdvancement; + default -> throw new IllegalArgumentException("Wrong grade type"); + }; + + return jpaQueryFactory + .selectFrom(companyJPAEntity) + .orderBy(order.desc()) + .limit(RANK_LIMIT) + .fetch(); + } + + private ConstructorExpression responseProjection() { + return Projections.constructor(CompanyQueryResponse.class, + companyJPAEntity.id.stringValue(), + companyJPAEntity.name, + companyJPAEntity.address, + companyJPAEntity.addressEtc, + companyJPAEntity.description, + companyJPAEntity.logoUrl, + companyJPAEntity.logoRGB, + companyJPAEntity.totalGrade, + companyJPAEntity.salaryAndBenefits, + companyJPAEntity.workLifeBalance, + companyJPAEntity.organizationalCulture, + companyJPAEntity.careerAdvancement, + companyJPAEntity.createdAt, + companyJPAEntity.modifiedAt, + + memberJPAEntity.id.stringValue(), + memberJPAEntity.nickName, + memberJPAEntity.socialLoginId, + memberJPAEntity.imageUrl); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandCompanyViewLoggingAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandCompanyViewLoggingAdapter.java new file mode 100644 index 00000000..d332e8bd --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandCompanyViewLoggingAdapter.java @@ -0,0 +1,22 @@ +package rolling.jpamysql.logging; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.logging.outport.CommandLoggingPort; +import rolling.domain.logging.model.CompanyViewLogging; + +import static rolling.jpamysql.logging.CompanyViewLoggingMapper.toDomain; +import static rolling.jpamysql.logging.CompanyViewLoggingMapper.toEntity; + +@Component +@RequiredArgsConstructor +class CommandCompanyViewLoggingAdapter implements CommandLoggingPort { + + private final CompanyViewLoggingRepository companyViewLoggingRepository; + + @Override + public CompanyViewLogging save(CompanyViewLogging logging) { + return toDomain(companyViewLoggingRepository.save(toEntity(logging))); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandHistoryLoggingAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandHistoryLoggingAdapter.java new file mode 100644 index 00000000..0fd697e2 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CommandHistoryLoggingAdapter.java @@ -0,0 +1,21 @@ +package rolling.jpamysql.logging; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.logging.outport.CommandLoggingPort; +import rolling.domain.logging.model.HistoryLogging; + +import static rolling.jpamysql.logging.HistoryLoggingMapper.*; + +@Component +@RequiredArgsConstructor +class CommandHistoryLoggingAdapter implements CommandLoggingPort { + + private final HistoryLoggingJpaRepository historyLoggingJpaRepository; + + @Override + public HistoryLogging save(final HistoryLogging logging) { + return toDomain(historyLoggingJpaRepository.save(toEntity(logging))); + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyViewLoggingEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingJPAEntity.java similarity index 50% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyViewLoggingEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingJPAEntity.java index b6294052..aad13940 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/CompanyViewLoggingEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingJPAEntity.java @@ -1,21 +1,18 @@ -package com.stubee.persistencecommons.entity; +package rolling.jpamysql.logging; -import com.stubee.persistencecommons.entity.base.BaseTSIDEntity; import jakarta.persistence.Entity; import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import lombok.*; -import org.hibernate.annotations.CreationTimestamp; - -import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import rolling.jpamysql.common.entity.base.BaseTSIDEntity; @Entity @Table(name = "tbl_company_view_logging") @Getter -@Builder +@SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) -@AllArgsConstructor -public class CompanyViewLoggingEntity extends BaseTSIDEntity { +public class CompanyViewLoggingJPAEntity extends BaseTSIDEntity { private Long memberId; @@ -25,7 +22,4 @@ public class CompanyViewLoggingEntity extends BaseTSIDEntity { @NotNull private Boolean isAnonymous; - @CreationTimestamp - private LocalDateTime createdAt; - } \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingMapper.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingMapper.java new file mode 100644 index 00000000..f37be3f1 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingMapper.java @@ -0,0 +1,27 @@ +package rolling.jpamysql.logging; + +import rolling.domain.company.model.CompanyId; +import rolling.domain.logging.model.CompanyViewLogging; +import rolling.domain.member.model.MemberId; + +abstract class CompanyViewLoggingMapper { + + static CompanyViewLoggingJPAEntity toEntity(final CompanyViewLogging domain) { + return CompanyViewLoggingJPAEntity.builder() + .memberId(domain.memberId().getId()) + .companyId(domain.companyId().getId()) + .isAnonymous(domain.isAnonymous()) + .build(); + } + + static CompanyViewLogging toDomain(final CompanyViewLoggingJPAEntity entity) { + return CompanyViewLogging.WithIdBuilder() + .id(entity.getId()) + .memberId(MemberId.of(entity.getMemberId())) + .companyId(CompanyId.of(entity.getCompanyId())) + .isAnonymous(entity.getIsAnonymous()) + .createdAt(entity.getCreatedAt()) + .build(); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingRepository.java new file mode 100644 index 00000000..fe05213e --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/CompanyViewLoggingRepository.java @@ -0,0 +1,6 @@ +package rolling.jpamysql.logging; + +import org.springframework.data.jpa.repository.JpaRepository; + +interface CompanyViewLoggingRepository extends JpaRepository { +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/HistoryLoggingEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJPAEntity.java similarity index 53% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/HistoryLoggingEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJPAEntity.java index 0617bf2f..e9a21be8 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/HistoryLoggingEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJPAEntity.java @@ -1,21 +1,20 @@ -package com.stubee.persistencecommons.entity; +package rolling.jpamysql.logging; -import com.stubee.persistencecommons.entity.base.BaseTSIDEntity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Table; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.*; -import org.hibernate.annotations.CreationTimestamp; - -import java.time.LocalDateTime; +import lombok.experimental.SuperBuilder; +import rolling.jpamysql.common.entity.base.BaseTSIDEntity; @Entity @Table(name = "tbl_history_logging") @Getter -@Builder +@SuperBuilder @NoArgsConstructor(access = AccessLevel.PROTECTED) -@AllArgsConstructor -public class HistoryLoggingEntity extends BaseTSIDEntity { +public class HistoryLoggingJPAEntity extends BaseTSIDEntity { @NotNull @Size(max = 250) @@ -30,7 +29,4 @@ public class HistoryLoggingEntity extends BaseTSIDEntity { @NotNull private Boolean isAnonymous; - @CreationTimestamp - private LocalDateTime createdAt; - } \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJpaRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJpaRepository.java new file mode 100644 index 00000000..d942b0e0 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingJpaRepository.java @@ -0,0 +1,6 @@ +package rolling.jpamysql.logging; + +import org.springframework.data.repository.CrudRepository; + +interface HistoryLoggingJpaRepository extends CrudRepository { +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingMapper.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingMapper.java new file mode 100644 index 00000000..8a641735 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/logging/HistoryLoggingMapper.java @@ -0,0 +1,28 @@ +package rolling.jpamysql.logging; + +import rolling.domain.logging.model.HistoryLogging; +import rolling.domain.member.model.MemberId; + +abstract class HistoryLoggingMapper { + + static HistoryLoggingJPAEntity toEntity(final HistoryLogging domain) { + return HistoryLoggingJPAEntity.builder() + .description(domain.description()) + .module(domain.module()) + .memberId(domain.memberId().getId()) + .isAnonymous(domain.isAnonymous()) + .build(); + } + + static HistoryLogging toDomain(final HistoryLoggingJPAEntity entity) { + return HistoryLogging.WithIdBuilder() + .id(entity.getId()) + .description(entity.getDescription()) + .module(entity.getModule()) + .memberId(MemberId.of(entity.getMemberId())) + .isAnonymous(entity.getIsAnonymous()) + .createdAt(entity.getCreatedAt()) + .build(); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/CommandMemberAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/CommandMemberAdapter.java new file mode 100644 index 00000000..7fb96805 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/CommandMemberAdapter.java @@ -0,0 +1,58 @@ +package rolling.jpamysql.member; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; +import rolling.application.member.outport.CommandMemberPort; +import rolling.domain.member.events.MemberRegisteredEvent; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberProfile; + +import static rolling.jpamysql.member.MemberMapper.*; + +@Component +@RequiredArgsConstructor +class CommandMemberAdapter implements CommandMemberPort { + + private final MemberJpaRepository repository; + private final ApplicationEventPublisher applicationEventPublisher; + + @Override + public Member saveWithId(final Member member) { + return save(toEntityWithId(member)); + } + + @Override + public Member saveExceptId(final Member member) { + return save(toEntity(member)); + } + + @Override + public Member saveOrUpdate(final MemberProfile memberProfile) { + final Member member = repository.findBySocialIdAndLoginType(memberProfile.socialId(), + memberProfile.loginType()) + .map(MemberMapper::toDomain) + .orElse(null); + + if(member == null) { + publishMemberRegisteredEvent(memberProfile.email()); + + return saveExceptId(memberProfile.toMember()); + } else { + member.modifyLoginId(memberProfile.socialLoginId(), memberProfile.loginType()); + + return saveWithId(member); + } + } + + private Member save(final MemberJPAEntity memberEntity) { + return toDomain(repository.save(memberEntity)); + } + + private void publishMemberRegisteredEvent(final String memberEmail) { + if(memberEmail!=null) { + applicationEventPublisher.publishEvent(MemberRegisteredEvent.of(memberEmail)); + } + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/MemberEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJPAEntity.java similarity index 75% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/MemberEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJPAEntity.java index 3e80fa05..ee99922c 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/MemberEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJPAEntity.java @@ -1,8 +1,5 @@ -package com.stubee.persistencecommons.entity; +package rolling.jpamysql.member; -import com.stubee.persistencecommons.entity.base.BaseEntity; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; @@ -11,6 +8,9 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.hibernate.annotations.DynamicUpdate; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.consts.MemberRole; +import rolling.jpamysql.common.entity.base.BaseTSIDEntity; @Entity @Table(name = "tbl_member") @@ -18,7 +18,7 @@ @SuperBuilder @DynamicUpdate @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class MemberEntity extends BaseEntity { +public class MemberJPAEntity extends BaseTSIDEntity { @Column(unique = true) private String nickName; diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJpaRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJpaRepository.java new file mode 100644 index 00000000..a8af8d26 --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberJpaRepository.java @@ -0,0 +1,14 @@ +package rolling.jpamysql.member; + +import org.springframework.data.jpa.repository.JpaRepository; +import rolling.domain.member.consts.LoginType; + +import java.util.Optional; + +interface MemberJpaRepository extends JpaRepository { + + boolean existsByNickName(String nickname); + + Optional findBySocialIdAndLoginType(String socialId, LoginType loginType); + +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberMapper.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberMapper.java similarity index 58% rename from Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberMapper.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberMapper.java index b3a2141a..72e1b120 100644 --- a/Rolling-Adapters/persistence/member-persistence/src/main/java/com/stubee/memberpersistence/adapters/MemberMapper.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/MemberMapper.java @@ -1,18 +1,14 @@ -package com.stubee.memberpersistence.adapters; +package rolling.jpamysql.member; -import com.stubee.persistencecommons.entity.MemberEntity; -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberDetails; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.member.model.SocialDetails; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberDetails; +import rolling.domain.member.model.MemberId; +import rolling.domain.member.model.SocialDetails; -@DomainObjectMapper -class MemberMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { +abstract class MemberMapper { - @Override - public MemberEntity toEntity(final Member domain) { - return MemberEntity.builder() + static MemberJPAEntity toEntity(final Member domain) { + return MemberJPAEntity.builder() .nickName(domain.memberDetails().nickName()) .socialId(domain.socialDetails().socialId()) .socialLoginId(domain.socialDetails().socialLoginId()) @@ -24,8 +20,8 @@ public MemberEntity toEntity(final Member domain) { .build(); } - public MemberEntity toEntityWithId(final Member domain) { - return MemberEntity.builder() + static MemberJPAEntity toEntityWithId(final Member domain) { + return MemberJPAEntity.builder() .id(domain.memberId().getId()) .nickName(domain.memberDetails().nickName()) .socialId(domain.socialDetails().socialId()) @@ -40,8 +36,7 @@ public MemberEntity toEntityWithId(final Member domain) { .build(); } - @Override - public Member toDomain(final MemberEntity entity) { + static Member toDomain(final MemberJPAEntity entity) { if(entity==null) { return null; } @@ -53,8 +48,8 @@ public Member toDomain(final MemberEntity entity) { .build(); } - private SocialDetails socialDetails(final MemberEntity entity) { - return SocialDetails.AllArgsBuilder() + private static SocialDetails socialDetails(final MemberJPAEntity entity) { + return SocialDetails.builder() .socialId(entity.getSocialId()) .socialLoginId(entity.getSocialLoginId()) .loginType(entity.getLoginType()) @@ -64,13 +59,8 @@ private SocialDetails socialDetails(final MemberEntity entity) { .build(); } - private MemberDetails memberDetails(final MemberEntity entity) { - return MemberDetails.AllArgsBuilder() - .nickName(entity.getNickName()) - .memberRole(entity.getMemberRole()) - .createdAt(entity.getCreatedAt()) - .modifiedAt(entity.getModifiedAt()) - .build(); + private static MemberDetails memberDetails(final MemberJPAEntity entity) { + return new MemberDetails(entity.getNickName(), entity.getMemberRole(), entity.getCreatedAt(), entity.getModifiedAt()); } } \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/QueryMemberAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/QueryMemberAdapter.java new file mode 100644 index 00000000..793b6dfb --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/member/QueryMemberAdapter.java @@ -0,0 +1,28 @@ +package rolling.jpamysql.member; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.member.outport.QueryMemberPort; +import rolling.domain.member.model.Member; + +import java.util.Optional; + +import static rolling.jpamysql.member.MemberMapper.*; + +@Component +@RequiredArgsConstructor +class QueryMemberAdapter implements QueryMemberPort { + + private final MemberJpaRepository memberJpaRepository; + + @Override + public Optional findBy(final Long memberId) { + return Optional.ofNullable(toDomain(memberJpaRepository.findById(memberId).orElse(null))); + } + + @Override + public boolean existsBy(final String nickname) { + return memberJpaRepository.existsByNickName(nickname); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAAdapter.java new file mode 100644 index 00000000..2819d56b --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAAdapter.java @@ -0,0 +1,32 @@ +package rolling.jpamysql.story; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.story.outport.CommandStoryPort; +import rolling.domain.story.model.Story; +import rolling.domain.story.model.StoryId; + +import static rolling.jpamysql.story.StoryMapper.*; + +@Component +@RequiredArgsConstructor +class StoryJPAAdapter implements CommandStoryPort { + + private final StoryJpaRepository repository; + + @Override + public Story save(final Story story) { + return toDomain(repository.save(toEntity(story))); + } + + @Override + public Story update(final Story story) { + return toDomain(repository.save(toEntityWithId(story))); + } + + @Override + public void deleteById(final StoryId storyId) { + repository.deleteById(storyId.getId()); + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/StoryEntity.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAEntity.java similarity index 91% rename from Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/StoryEntity.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAEntity.java index 5c6e503d..3bf732be 100644 --- a/Rolling-Adapters/persistence/persistence-commons/src/main/java/com/stubee/persistencecommons/entity/StoryEntity.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJPAEntity.java @@ -1,6 +1,5 @@ -package com.stubee.persistencecommons.entity; +package rolling.jpamysql.story; -import com.stubee.persistencecommons.entity.base.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Table; @@ -11,6 +10,7 @@ import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.hibernate.annotations.DynamicUpdate; +import rolling.jpamysql.common.entity.base.BaseTSIDEntity; @Entity @Table(name = "tbl_story") @@ -18,7 +18,7 @@ @SuperBuilder @DynamicUpdate @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class StoryEntity extends BaseEntity { +public class StoryJPAEntity extends BaseTSIDEntity { @NotNull @Size(max = 30) diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJpaRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJpaRepository.java new file mode 100644 index 00000000..8ac6ed0a --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryJpaRepository.java @@ -0,0 +1,6 @@ +package rolling.jpamysql.story; + +import org.springframework.data.repository.CrudRepository; + +interface StoryJpaRepository extends CrudRepository { +} \ No newline at end of file diff --git a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/StoryMapper.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryMapper.java similarity index 82% rename from Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/StoryMapper.java rename to rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryMapper.java index d0121491..3550d180 100644 --- a/Rolling-Adapters/persistence/review-persistence/src/main/java/com/stubee/reviewpersistence/adapters/StoryMapper.java +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryMapper.java @@ -1,16 +1,12 @@ -package com.stubee.reviewpersistence.adapters; +package rolling.jpamysql.story; -import com.stubee.persistencecommons.annotations.DomainObjectMapper; -import com.stubee.persistencecommons.entity.StoryEntity; -import com.stubee.rollingdomains.domain.story.model.*; -import com.stubee.rollingdomains.domain.company.model.CompanyId; +import rolling.domain.company.model.CompanyId; +import rolling.domain.story.model.*; -@DomainObjectMapper -class StoryMapper implements com.stubee.persistencecommons.mapper.DomainObjectMapper { +abstract class StoryMapper { - @Override - public StoryEntity toEntity(final Story domain) { - return StoryEntity.builder() + static StoryJPAEntity toEntity(final Story domain) { + return StoryJPAEntity.builder() .position(domain.storyDetails().corporationDetails().position()) .schoolLife(domain.storyDetails().employmentDetails().schoolLife()) .preparationCourse(domain.storyDetails().employmentDetails().preparationCourse()) @@ -36,8 +32,8 @@ public StoryEntity toEntity(final Story domain) { .build(); } - public StoryEntity toEntityWithId(final Story domain) { - return StoryEntity.builder() + static StoryJPAEntity toEntityWithId(final Story domain) { + return StoryJPAEntity.builder() .id(domain.storyId().getId()) .position(domain.storyDetails().corporationDetails().position()) .schoolLife(domain.storyDetails().employmentDetails().schoolLife()) @@ -66,8 +62,7 @@ public StoryEntity toEntityWithId(final Story domain) { .build(); } - @Override - public Story toDomain(final StoryEntity entity) { + static Story toDomain(final StoryJPAEntity entity) { if(entity==null) { return null; } @@ -79,8 +74,8 @@ public Story toDomain(final StoryEntity entity) { .build(); } - private StoryDetails storyDetails(final StoryEntity entity) { - return StoryDetails.WithDateBuilder() + private static StoryDetails storyDetails(final StoryJPAEntity entity) { + return StoryDetails.builder() .authorId(AuthorId.of(entity.getMemberId())) .companyId(CompanyId.of(entity.getCompanyId())) .employmentDetails(employmentDetails(entity)) @@ -90,7 +85,7 @@ private StoryDetails storyDetails(final StoryEntity entity) { .build(); } - private EmploymentDetails employmentDetails(final StoryEntity entity) { + private static EmploymentDetails employmentDetails(final StoryJPAEntity entity) { return EmploymentDetails.builder() .schoolLife(entity.getSchoolLife()) .preparationCourse(entity.getPreparationCourse()) @@ -100,7 +95,7 @@ private EmploymentDetails employmentDetails(final StoryEntity entity) { .build(); } - private CorporationDetails corporationDetails(final StoryEntity entity) { + private static CorporationDetails corporationDetails(final StoryJPAEntity entity) { return CorporationDetails.builder() .position(entity.getPosition()) .welfare(entity.getWelfare()) @@ -111,8 +106,8 @@ private CorporationDetails corporationDetails(final StoryEntity entity) { .build(); } - private ReviewGrades reviewGrades(final StoryEntity entity) { - return ReviewGrades.WithTotalBuilder() + private static ReviewGrades reviewGrades(final StoryJPAEntity entity) { + return ReviewGrades.builder() .total(entity.getTotalGrade()) .salaryAndBenefits(entity.getSalaryAndBenefits()) .workLifeBalance(entity.getWorkLifeBalance()) diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLAdapter.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLAdapter.java new file mode 100644 index 00000000..32b3710b --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLAdapter.java @@ -0,0 +1,48 @@ +package rolling.jpamysql.story; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.story.interactor.query.StoryQueryByCompanyResponse; +import rolling.application.story.interactor.query.StoryQueryByMemberResponse; +import rolling.application.story.interactor.query.StoryStatusResponse; +import rolling.application.story.outport.QueryStoryPort; +import rolling.domain.common.model.PageRequest; +import rolling.domain.story.model.Story; + +import java.util.List; +import java.util.Optional; + +import static rolling.jpamysql.story.StoryMapper.*; + +@Component +@RequiredArgsConstructor +class StoryQueryDSLAdapter implements QueryStoryPort { + + private final StoryQueryDSLRepository repository; + + @Override + public Optional findBy(final Long id) { + return Optional.ofNullable(toDomain(repository.findById(id))); + } + + @Override + public Optional findInfoBy(final Long id) { + return Optional.ofNullable(repository.findInfoById(id)); + } + + @Override + public StoryStatusResponse getStatusBy(final Long memberId) { + return repository.findStatusByMemberId(memberId); + } + + @Override + public List findByMember(final Long memberId, final PageRequest pageRequest) { + return repository.findByMemberId(memberId, pageRequest); + } + + @Override + public List findByCompany(final Long companyId, final PageRequest pageRequest) { + return repository.findByCompanyId(companyId, pageRequest); + } + +} \ No newline at end of file diff --git a/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLRepository.java b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLRepository.java new file mode 100644 index 00000000..00daf1bd --- /dev/null +++ b/rolling-adapter/jpa-mysql/src/main/java/rolling/jpamysql/story/StoryQueryDSLRepository.java @@ -0,0 +1,156 @@ +package rolling.jpamysql.story; + +import com.querydsl.core.types.ConstructorExpression; +import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQueryFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; +import rolling.application.story.interactor.query.StoryQueryByCompanyResponse; +import rolling.application.story.interactor.query.StoryQueryByMemberResponse; +import rolling.application.story.interactor.query.StoryStatusResponse; +import rolling.domain.common.model.PageRequest; + +import java.util.List; + +import static rolling.jpamysql.company.QCompanyJPAEntity.*; +import static rolling.jpamysql.member.QMemberJPAEntity.*; +import static rolling.jpamysql.story.QStoryJPAEntity.*; + +@Repository +@RequiredArgsConstructor +class StoryQueryDSLRepository { + + private final JPAQueryFactory jpaQueryFactory; + + StoryJPAEntity findById(final Long id) { + return jpaQueryFactory + .selectFrom(storyJPAEntity) + .where(storyJPAEntity.id.eq(id)) + .fetchOne(); + } + + StoryQueryByCompanyResponse findInfoById(final Long id) { + return jpaQueryFactory + .select(queryByCompanyResponse()) + .from(storyJPAEntity) + .innerJoin(memberJPAEntity) + .on(storyJPAEntity.memberId.eq(memberJPAEntity.id)) + .where(storyJPAEntity.id.eq(id)) + .fetchOne(); + } + + StoryStatusResponse findStatusByMemberId(final Long memberId) { + return jpaQueryFactory + .select(queryStatusProjection()) + .from(storyJPAEntity) + .where(storyJPAEntity.memberId.eq(memberId)) + .orderBy(storyJPAEntity.modifiedAt.desc()) + .fetchOne(); + } + + List findByMemberId(final Long memberId, final PageRequest pageRequest) { + return jpaQueryFactory + .select(queryByMemberResponse()) + .from(storyJPAEntity) + .innerJoin(companyJPAEntity) + .on(storyJPAEntity.companyId.eq(companyJPAEntity.id)) + .where(storyJPAEntity.memberId.eq(memberId)) + .orderBy(storyJPAEntity.createdAt.desc()) + .offset((pageRequest.page()-1)*pageRequest.size()) + .limit(pageRequest.size()) + .fetch(); + } + + List findByCompanyId(final Long companyId, final PageRequest pageRequest) { + return jpaQueryFactory + .select(queryByCompanyResponse()) + .from(storyJPAEntity) + .innerJoin(memberJPAEntity) + .on(storyJPAEntity.memberId.eq(memberJPAEntity.id)) + .where(storyJPAEntity.companyId.eq(companyId)) + .orderBy(storyJPAEntity.createdAt.desc()) + .offset((pageRequest.page()-1)*pageRequest.size()) + .limit(pageRequest.size()) + .fetch(); + } + + List findAll(final PageRequest pageRequest) { + return jpaQueryFactory + .selectFrom(storyJPAEntity) + .orderBy(storyJPAEntity.createdAt.desc()) + .offset(pageRequest.page()) + .limit(pageRequest.size()) + .fetch(); + } + + private ConstructorExpression queryStatusProjection() { + return Projections.constructor( + StoryStatusResponse.class, + storyJPAEntity.count(), + storyJPAEntity.modifiedAt.max()); + } + + private ConstructorExpression queryByMemberResponse() { + return Projections.constructor( + StoryQueryByMemberResponse.class, + storyJPAEntity.id.stringValue(), + storyJPAEntity.position, + storyJPAEntity.schoolLife, + storyJPAEntity.preparationCourse, + storyJPAEntity.employmentProcess, + storyJPAEntity.interviewQuestion, + storyJPAEntity.mostImportantThing, + + storyJPAEntity.welfare, + storyJPAEntity.commuteTime, + storyJPAEntity.meal, + storyJPAEntity.advantages, + storyJPAEntity.disAdvantages, + storyJPAEntity.etc, + + storyJPAEntity.totalGrade, + storyJPAEntity.salaryAndBenefits, + storyJPAEntity.workLifeBalance, + storyJPAEntity.organizationalCulture, + storyJPAEntity.careerAdvancement, + storyJPAEntity.createdAt, + storyJPAEntity.modifiedAt, + + companyJPAEntity.id.stringValue(), + companyJPAEntity.name, + companyJPAEntity.logoUrl); + } + + private ConstructorExpression queryByCompanyResponse() { + return Projections.constructor( + StoryQueryByCompanyResponse.class, + storyJPAEntity.id.stringValue(), + storyJPAEntity.position, + storyJPAEntity.schoolLife, + storyJPAEntity.preparationCourse, + storyJPAEntity.employmentProcess, + storyJPAEntity.interviewQuestion, + storyJPAEntity.mostImportantThing, + + storyJPAEntity.welfare, + storyJPAEntity.commuteTime, + storyJPAEntity.meal, + storyJPAEntity.advantages, + storyJPAEntity.disAdvantages, + storyJPAEntity.etc, + + storyJPAEntity.totalGrade, + storyJPAEntity.salaryAndBenefits, + storyJPAEntity.workLifeBalance, + storyJPAEntity.organizationalCulture, + storyJPAEntity.careerAdvancement, + storyJPAEntity.createdAt, + storyJPAEntity.modifiedAt, + + memberJPAEntity.id.stringValue(), + memberJPAEntity.nickName, + memberJPAEntity.socialLoginId, + memberJPAEntity.imageUrl); + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/thirdparty/naver-news/build.gradle b/rolling-adapter/naver-news-client/build.gradle similarity index 55% rename from Rolling-Adapters/thirdparty/naver-news/build.gradle rename to rolling-adapter/naver-news-client/build.gradle index b3b85f66..29dae97c 100644 --- a/Rolling-Adapters/thirdparty/naver-news/build.gradle +++ b/rolling-adapter/naver-news-client/build.gradle @@ -1,10 +1,4 @@ dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:news-application') - - implementation project(':Rolling-Adapters:adapters-commons') - implementation 'org.springframework:spring-webflux:6.0.6' implementation 'org.springframework.boot:spring-boot:3.1.0' diff --git a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverClientConfig.java b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverClientConfig.java similarity index 95% rename from Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverClientConfig.java rename to rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverClientConfig.java index ae50ddf7..935668d4 100644 --- a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverClientConfig.java +++ b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverClientConfig.java @@ -1,4 +1,4 @@ -package com.stubee.navernews.adapters; +package rolling.navernewsclient; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; diff --git a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsAdapter.java b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverNewsAdapter.java similarity index 69% rename from Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsAdapter.java rename to rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverNewsAdapter.java index a480b9ab..733e448e 100644 --- a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsAdapter.java +++ b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverNewsAdapter.java @@ -1,22 +1,21 @@ -package com.stubee.navernews.adapters; +package rolling.navernewsclient; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.newsapplication.outports.NewsPort; -import com.stubee.newsapplication.usecases.NaverNewsResponse; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; -import com.stubee.rollingdomains.common.model.PageRequest; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatusCode; +import org.springframework.stereotype.Component; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; +import rolling.application.news.interactor.NaverNewsResponse; +import rolling.application.news.outport.NewsPort; +import rolling.domain.common.error.exception.InternalServerException; +import rolling.domain.common.model.PageRequest; -@Adapter +@Component @RequiredArgsConstructor -class NewsAdapter implements NewsPort { +class NaverNewsAdapter implements NewsPort { - private final WebClient newsClient; + private final WebClient webClient; @Override public Mono getByCompanyName(final String companyName, final PageRequest pageRequest) { @@ -28,7 +27,7 @@ public Mono getByCompanyName(final String companyName, final } private Mono fetchNews(final String encodedName, int display, int start) { - return newsClient.get() + return webClient.get() .uri(uriBuilder -> uriBuilder .queryParam("query", encodedName) .queryParam("display", display) @@ -37,7 +36,7 @@ private Mono fetchNews(final String encodedName, int display, .build()) .retrieve() .onStatus(HttpStatusCode::is4xxClientError, error -> Mono.error(NewsClientException.EXCEPTION)) - .onStatus(HttpStatusCode::is5xxServerError, error -> Mono.error(new CustomException(ErrorCode.INTERNAL_SERVER_ERROR))) + .onStatus(HttpStatusCode::is5xxServerError, error -> Mono.error(InternalServerException.EXCEPTION)) .bodyToMono(NaverNewsResponse.class); } diff --git a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverProperties.java b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverProperties.java similarity index 90% rename from Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverProperties.java rename to rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverProperties.java index 4e4f4a9a..b6306ad4 100644 --- a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NaverProperties.java +++ b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NaverProperties.java @@ -1,4 +1,4 @@ -package com.stubee.navernews.adapters; +package rolling.navernewsclient; import lombok.Getter; import lombok.Setter; diff --git a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsClientException.java b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NewsClientException.java similarity index 56% rename from Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsClientException.java rename to rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NewsClientException.java index f51fc13b..b7e7848c 100644 --- a/Rolling-Adapters/thirdparty/naver-news/src/main/java/com/stubee/navernews/adapters/NewsClientException.java +++ b/rolling-adapter/naver-news-client/src/main/java/rolling/navernewsclient/NewsClientException.java @@ -1,7 +1,7 @@ -package com.stubee.navernews.adapters; +package rolling.navernewsclient; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; class NewsClientException extends CustomException { diff --git a/Rolling-Adapters/thirdparty/s3-file/build.gradle b/rolling-adapter/s3/build.gradle similarity index 57% rename from Rolling-Adapters/thirdparty/s3-file/build.gradle rename to rolling-adapter/s3/build.gradle index 5a54367f..7850e671 100644 --- a/Rolling-Adapters/thirdparty/s3-file/build.gradle +++ b/rolling-adapter/s3/build.gradle @@ -1,10 +1,4 @@ dependencies { - implementation project(':Rolling-Domains') - - implementation project(':Rolling-Application:file-application') - - implementation project(':Rolling-Adapters:adapters-commons') - implementation 'org.springframework:spring-web:6.0.6' implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' diff --git a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/FileUploadException.java b/rolling-adapter/s3/src/main/java/rolling/s3/FileUploadException.java similarity index 58% rename from Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/FileUploadException.java rename to rolling-adapter/s3/src/main/java/rolling/s3/FileUploadException.java index 574bfc01..8011d929 100644 --- a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/FileUploadException.java +++ b/rolling-adapter/s3/src/main/java/rolling/s3/FileUploadException.java @@ -1,7 +1,7 @@ -package com.stubee.s3file.adapters; +package rolling.s3; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; class FileUploadException extends CustomException { diff --git a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Adapter.java b/rolling-adapter/s3/src/main/java/rolling/s3/S3Adapter.java similarity index 90% rename from Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Adapter.java rename to rolling-adapter/s3/src/main/java/rolling/s3/S3Adapter.java index 314e9eb4..1ef16c95 100644 --- a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Adapter.java +++ b/rolling-adapter/s3/src/main/java/rolling/s3/S3Adapter.java @@ -1,15 +1,15 @@ -package com.stubee.s3file.adapters; +package rolling.s3; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.CannedAccessControlList; import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.fileapplication.outports.UploadImagePort; -import com.stubee.fileapplication.usecases.FileResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import rolling.application.file.interactor.FileResponse; +import rolling.application.file.outport.UploadFilePort; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -17,10 +17,10 @@ import java.util.List; import java.util.UUID; -@Adapter +@Component @Slf4j @RequiredArgsConstructor -class S3Adapter implements UploadImagePort { +class S3Adapter implements UploadFilePort { private final AmazonS3 amazonS3; private final S3Properties s3Properties; diff --git a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Config.java b/rolling-adapter/s3/src/main/java/rolling/s3/S3Config.java similarity index 96% rename from Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Config.java rename to rolling-adapter/s3/src/main/java/rolling/s3/S3Config.java index 2ed5cdfb..966fa4b9 100644 --- a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Config.java +++ b/rolling-adapter/s3/src/main/java/rolling/s3/S3Config.java @@ -1,4 +1,4 @@ -package com.stubee.s3file.adapters; +package rolling.s3; import com.amazonaws.auth.AWSStaticCredentialsProvider; import com.amazonaws.auth.BasicAWSCredentials; diff --git a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Properties.java b/rolling-adapter/s3/src/main/java/rolling/s3/S3Properties.java similarity index 91% rename from Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Properties.java rename to rolling-adapter/s3/src/main/java/rolling/s3/S3Properties.java index b6a04795..b1edb577 100644 --- a/Rolling-Adapters/thirdparty/s3-file/src/main/java/com/stubee/s3file/adapters/S3Properties.java +++ b/rolling-adapter/s3/src/main/java/rolling/s3/S3Properties.java @@ -1,4 +1,4 @@ -package com.stubee.s3file.adapters; +package rolling.s3; import lombok.Getter; import lombok.Setter; diff --git a/rolling-adapter/security/build.gradle b/rolling-adapter/security/build.gradle new file mode 100644 index 00000000..6520a4ce --- /dev/null +++ b/rolling-adapter/security/build.gradle @@ -0,0 +1,16 @@ +repositories { + mavenCentral() +} +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' + implementation 'org.springframework.boot:spring-boot-starter-security' + + implementation 'org.springframework:spring-tx:6.0.6' + + implementation 'io.jsonwebtoken:jjwt:0.9.1' + implementation 'javax.xml.bind:jaxb-api:2.3.1' + + compileOnly 'org.apache.tomcat.embed:tomcat-embed-core:10.1.7' + + annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" +} \ No newline at end of file diff --git a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/AlumniCertifyFailedException.java b/rolling-adapter/security/src/main/java/rolling/security/alumni/AlumniCertifyFailedException.java similarity index 60% rename from Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/AlumniCertifyFailedException.java rename to rolling-adapter/security/src/main/java/rolling/security/alumni/AlumniCertifyFailedException.java index 95bb7b38..71459e90 100644 --- a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/AlumniCertifyFailedException.java +++ b/rolling-adapter/security/src/main/java/rolling/security/alumni/AlumniCertifyFailedException.java @@ -1,7 +1,7 @@ -package com.stubee.auth.certify.adapters; +package rolling.security.alumni; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; class AlumniCertifyFailedException extends CustomException { diff --git a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyAlumniAdapter.java b/rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyAlumniAdapter.java similarity index 70% rename from Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyAlumniAdapter.java rename to rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyAlumniAdapter.java index 00c7205a..6d10b4a6 100644 --- a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyAlumniAdapter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyAlumniAdapter.java @@ -1,10 +1,10 @@ -package com.stubee.auth.certify.adapters; +package rolling.security.alumni; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.authapplication.outports.CertifyAlumniPort; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.auth.outport.CertifyAlumniPort; -@Adapter +@Component @RequiredArgsConstructor class CertifyAlumniAdapter implements CertifyAlumniPort { diff --git a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyProperties.java b/rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyProperties.java similarity index 89% rename from Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyProperties.java rename to rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyProperties.java index 159f7d65..4af96302 100644 --- a/Rolling-Adapters/security/auth/src/main/java/com/stubee/auth/certify/adapters/CertifyProperties.java +++ b/rolling-adapter/security/src/main/java/rolling/security/alumni/CertifyProperties.java @@ -1,4 +1,4 @@ -package com.stubee.auth.certify.adapters; +package rolling.security.alumni; import lombok.Getter; import lombok.Setter; diff --git a/Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/CookieSerializer.java b/rolling-adapter/security/src/main/java/rolling/security/common/util/CookieSerializer.java similarity index 95% rename from Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/CookieSerializer.java rename to rolling-adapter/security/src/main/java/rolling/security/common/util/CookieSerializer.java index cefa63a3..397c6338 100644 --- a/Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/CookieSerializer.java +++ b/rolling-adapter/security/src/main/java/rolling/security/common/util/CookieSerializer.java @@ -1,4 +1,4 @@ -package com.stubee.securitycommons.utils; +package rolling.security.common.util; import org.springframework.util.SerializationUtils; diff --git a/Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/StringUtils.java b/rolling-adapter/security/src/main/java/rolling/security/common/util/StringUtils.java similarity index 91% rename from Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/StringUtils.java rename to rolling-adapter/security/src/main/java/rolling/security/common/util/StringUtils.java index 787ff9a0..f2785c3f 100644 --- a/Rolling-Adapters/security/security-commons/src/main/java/com/stubee/securitycommons/utils/StringUtils.java +++ b/rolling-adapter/security/src/main/java/rolling/security/common/util/StringUtils.java @@ -1,4 +1,4 @@ -package com.stubee.securitycommons.utils; +package rolling.security.common.util; public abstract class StringUtils { diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/ExceptionFilter.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/ExceptionFilter.java similarity index 89% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/ExceptionFilter.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/ExceptionFilter.java index 11b768a1..f3bd0490 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/ExceptionFilter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/ExceptionFilter.java @@ -1,9 +1,6 @@ -package com.stubee.jwt.filter; +package rolling.security.jwt; import com.fasterxml.jackson.databind.ObjectMapper; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; -import com.stubee.rollingdomains.common.error.ErrorResponse; import io.jsonwebtoken.SignatureException; import jakarta.servlet.FilterChain; import jakarta.servlet.http.HttpServletRequest; @@ -12,6 +9,9 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; +import rolling.domain.common.error.ErrorResponse; import java.io.IOException; diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/JwtExceptionFilter.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtExceptionFilter.java similarity index 93% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/JwtExceptionFilter.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/JwtExceptionFilter.java index 6a8bd28f..bc818058 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/filter/JwtExceptionFilter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtExceptionFilter.java @@ -1,8 +1,6 @@ -package com.stubee.jwt.filter; +package rolling.security.jwt; import com.fasterxml.jackson.databind.ObjectMapper; -import com.stubee.rollingdomains.common.error.ErrorCode; -import com.stubee.rollingdomains.common.error.ErrorResponse; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.MalformedJwtException; import io.jsonwebtoken.UnsupportedJwtException; @@ -14,6 +12,8 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; +import rolling.domain.common.error.ErrorCode; +import rolling.domain.common.error.ErrorResponse; import java.io.IOException; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/TokenFilter.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtFilter.java similarity index 79% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/TokenFilter.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/JwtFilter.java index e1104cf9..6a78daf0 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/TokenFilter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtFilter.java @@ -1,4 +1,4 @@ -package com.stubee.oauth.token.filter; +package rolling.security.jwt; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -12,16 +12,16 @@ @Component @RequiredArgsConstructor -public class TokenFilter extends OncePerRequestFilter { +public class JwtFilter extends OncePerRequestFilter { - private final SecurityHelper securityHelper; + private final JwtHelper jwtHelper; @Override public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { final String token = extractFromHeader(request); - securityHelper.setAuthentication(request.getMethod(), token); + jwtHelper.setAuthentication(request.getMethod(), token); chain.doFilter(request, response); } diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/SecurityHelper.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtHelper.java similarity index 65% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/SecurityHelper.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/JwtHelper.java index c1dc1483..a8ab1f24 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/token/filter/SecurityHelper.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtHelper.java @@ -1,31 +1,31 @@ -package com.stubee.oauth.token.filter; +package rolling.security.jwt; -import com.stubee.authapplication.outports.ParseTokenPort; -import com.stubee.memberapplication.outports.QueryMemberPort; -import com.stubee.oauth.security.model.CustomMemberDetails; -import com.stubee.rollingdomains.domain.member.model.Member; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; +import rolling.application.auth.outport.ParseTokenPort; +import rolling.application.member.outport.QueryMemberPort; +import rolling.domain.member.model.Member; +import rolling.security.oauth.MemberDetailsAdapter; @Component @Slf4j @RequiredArgsConstructor -class SecurityHelper { +class JwtHelper { private final ParseTokenPort parseTokenPort; private final QueryMemberPort queryMemberPort; - public void setAuthentication(final String method, final String accessToken) { + void setAuthentication(final String method, final String accessToken) { if(accessToken != null) { final Long memberId = parseTokenPort.getSubjectFromAccessToken(accessToken); - final Member member = queryMemberPort.getById(memberId); + final Member member = queryMemberPort.getBy(memberId); - this.logLoginId(method, member.socialDetails().socialLoginId()); + logLoginId(method, member.socialDetails().socialLoginId()); final Authentication authentication = getAuthentication(member); @@ -34,7 +34,7 @@ public void setAuthentication(final String method, final String accessToken) { } private Authentication getAuthentication(final Member member) { - final CustomMemberDetails details = CustomMemberDetails.create(member); + final MemberDetailsAdapter details = MemberDetailsAdapter.of(member); return new UsernamePasswordAuthenticationToken(details, null, details.getAuthorities()); } diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/JwtProperties.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtProperties.java similarity index 92% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/JwtProperties.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/JwtProperties.java index d0f6de13..19313872 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/JwtProperties.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtProperties.java @@ -1,4 +1,4 @@ -package com.stubee.jwt.adapters; +package rolling.security.jwt; import lombok.Getter; import lombok.Setter; diff --git a/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtType.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtType.java new file mode 100644 index 00000000..784e9b9a --- /dev/null +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/JwtType.java @@ -0,0 +1,7 @@ +package rolling.security.jwt; + +enum JwtType { + + ACCESS, REFRESH + +} \ No newline at end of file diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ParseJwtAdapter.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/ParseJwtAdapter.java similarity index 84% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ParseJwtAdapter.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/ParseJwtAdapter.java index 2aa6bcbf..b03083b7 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ParseJwtAdapter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/ParseJwtAdapter.java @@ -1,16 +1,15 @@ -package com.stubee.jwt.adapters; +package rolling.security.jwt; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.authapplication.outports.ParseTokenPort; -import com.stubee.jwt.adapters.consts.JwtType; -import com.stubee.securitycommons.utils.StringUtils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Header; import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jwts; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import rolling.application.auth.outport.ParseTokenPort; -@Adapter +@Component @RequiredArgsConstructor class ParseJwtAdapter implements ParseTokenPort { diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ProvideJwtAdapter.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/ProvideJwtAdapter.java similarity index 83% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ProvideJwtAdapter.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/ProvideJwtAdapter.java index b22b6bbe..dbf23cab 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/ProvideJwtAdapter.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/ProvideJwtAdapter.java @@ -1,17 +1,16 @@ -package com.stubee.jwt.adapters; +package rolling.security.jwt; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.authapplication.outports.ProvideTokenPort; -import com.stubee.jwt.adapters.consts.JwtType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; import io.jsonwebtoken.Header; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.auth.outport.ProvideTokenPort; +import rolling.domain.member.consts.MemberRole; import java.util.Date; -@Adapter +@Component @RequiredArgsConstructor class ProvideJwtAdapter implements ProvideTokenPort { diff --git a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/WrongTokenTypeException.java b/rolling-adapter/security/src/main/java/rolling/security/jwt/WrongTokenTypeException.java similarity index 59% rename from Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/WrongTokenTypeException.java rename to rolling-adapter/security/src/main/java/rolling/security/jwt/WrongTokenTypeException.java index 134be5fc..91339eb7 100644 --- a/Rolling-Adapters/security/jwt/src/main/java/com/stubee/jwt/adapters/WrongTokenTypeException.java +++ b/rolling-adapter/security/src/main/java/rolling/security/jwt/WrongTokenTypeException.java @@ -1,7 +1,7 @@ -package com.stubee.jwt.adapters; +package rolling.security.jwt; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; class WrongTokenTypeException extends CustomException { diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CustomAccessDeniedHandler.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/CustomAccessDeniedHandler.java similarity index 88% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CustomAccessDeniedHandler.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/CustomAccessDeniedHandler.java index d455aac5..3da370cf 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CustomAccessDeniedHandler.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/CustomAccessDeniedHandler.java @@ -1,8 +1,6 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth; import com.fasterxml.jackson.databind.ObjectMapper; -import com.stubee.rollingdomains.common.error.ErrorCode; -import com.stubee.rollingdomains.common.error.ErrorResponse; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; @@ -10,6 +8,8 @@ import org.springframework.security.access.AccessDeniedException; import org.springframework.security.web.access.AccessDeniedHandler; import org.springframework.stereotype.Component; +import rolling.domain.common.error.ErrorCode; +import rolling.domain.common.error.ErrorResponse; import java.io.IOException; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/model/CustomMemberDetails.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/MemberDetailsAdapter.java similarity index 70% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/model/CustomMemberDetails.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/MemberDetailsAdapter.java index 2e0ccbb8..5690d3b5 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/model/CustomMemberDetails.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/MemberDetailsAdapter.java @@ -1,37 +1,37 @@ -package com.stubee.oauth.security.model; +package rolling.security.oauth; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberId; import lombok.Getter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.oauth2.core.user.OAuth2User; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberId; import java.util.Collection; import java.util.Collections; import java.util.Map; @Getter -public class CustomMemberDetails implements UserDetails, OAuth2User { +public class MemberDetailsAdapter implements UserDetails, OAuth2User { private final Member member; private Map attributes; - private CustomMemberDetails(Member member) { + private MemberDetailsAdapter(Member member) { this.member = member; } - private CustomMemberDetails(Member member, Map attributes) { + private MemberDetailsAdapter(Member member, Map attributes) { this.member = member; this.attributes = attributes; } - public static CustomMemberDetails create(Member member, Map attributes) { - return new CustomMemberDetails(member, attributes); + public static MemberDetailsAdapter of(Member member, Map attributes) { + return new MemberDetailsAdapter(member, attributes); } - public static CustomMemberDetails create(Member member) { - return new CustomMemberDetails(member); + public static MemberDetailsAdapter of(Member member) { + return new MemberDetailsAdapter(member); } public MemberId getMemberId() { diff --git a/rolling-adapter/security/src/main/java/rolling/security/oauth/MemberSecurityContextAdapter.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/MemberSecurityContextAdapter.java new file mode 100644 index 00000000..e0faa7d2 --- /dev/null +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/MemberSecurityContextAdapter.java @@ -0,0 +1,26 @@ +package rolling.security.oauth; + +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberId; + +@Component +class MemberSecurityContextAdapter implements MemberSessionPort { + + @Override + public Member current() { + return getMemberDetails().getMember(); + } + + @Override + public MemberId currentId() { + return getMemberDetails().getMemberId(); + } + + private MemberDetailsAdapter getMemberDetails() { + return ((MemberDetailsAdapter) SecurityContextHolder.getContext().getAuthentication().getPrincipal()); + } + +} \ No newline at end of file diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthAttributes.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthAttributes.java similarity index 82% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthAttributes.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthAttributes.java index 479bc212..439db515 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthAttributes.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthAttributes.java @@ -1,10 +1,10 @@ -package com.stubee.oauth.security.service; +package rolling.security.oauth; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; -import com.stubee.rollingdomains.domain.member.exception.WrongLoginTypeException; -import com.stubee.rollingdomains.domain.member.model.MemberProfile; import lombok.RequiredArgsConstructor; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.consts.MemberRole; +import rolling.domain.member.exception.WrongLoginTypeException; +import rolling.domain.member.model.MemberProfile; import java.util.Arrays; import java.util.Map; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthMemberService.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthMemberService.java similarity index 65% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthMemberService.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthMemberService.java index 6447ebab..10b09565 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/service/OAuthMemberService.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/OAuthMemberService.java @@ -1,20 +1,21 @@ -package com.stubee.oauth.security.service; +package rolling.security.oauth; -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.memberapplication.outports.CommandMemberPort; -import com.stubee.oauth.security.model.CustomMemberDetails; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.model.Member; import lombok.RequiredArgsConstructor; import org.springframework.security.oauth2.client.userinfo.DefaultOAuth2UserService; import org.springframework.security.oauth2.client.userinfo.OAuth2UserRequest; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; import org.springframework.security.oauth2.core.user.OAuth2User; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.CommandMemberPort; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.model.Member; import java.util.Locale; import java.util.Map; -@CommandService +@Component +@Transactional @RequiredArgsConstructor class OAuthMemberService extends DefaultOAuth2UserService { @@ -26,10 +27,9 @@ public OAuth2User loadUser(final OAuth2UserRequest oAuth2UserRequest) throws OAu final LoginType loginType = getLoginType(oAuth2UserRequest); - final Member member = commandMemberPort.saveOrUpdate( - OAuthAttributes.toProfile(loginType, attributes)); + final Member member = commandMemberPort.saveOrUpdate(OAuthAttributes.toProfile(loginType, attributes)); - return CustomMemberDetails.create(member, attributes); + return MemberDetailsAdapter.of(member, attributes); } private LoginType getLoginType(final OAuth2UserRequest oAuth2UserRequest) { diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/config/SecurityConfig.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/SecurityConfig.java similarity index 94% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/config/SecurityConfig.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/SecurityConfig.java index 357166c7..d1c00a36 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/config/SecurityConfig.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/SecurityConfig.java @@ -1,8 +1,5 @@ -package com.stubee.oauth.security.config; +package rolling.security.oauth; -import com.stubee.jwt.filter.ExceptionFilter; -import com.stubee.jwt.filter.JwtExceptionFilter; -import com.stubee.oauth.token.filter.TokenFilter; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -20,6 +17,9 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import rolling.security.jwt.ExceptionFilter; +import rolling.security.jwt.JwtExceptionFilter; +import rolling.security.jwt.JwtFilter; import static org.springframework.http.HttpMethod.*; @@ -33,8 +33,8 @@ class SecurityConfig { private final AccessDeniedHandler accessDeniedHandler; private final DefaultOAuth2UserService oAuthMemberService; private final ExceptionFilter exceptionFilter; - private final TokenFilter tokenFilter; private final JwtExceptionFilter jwtExceptionFilter; + private final JwtFilter tokenFilter; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { @@ -45,7 +45,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .csrf().disable() .addFilterBefore(exceptionFilter, OAuth2LoginAuthenticationFilter.class) .addFilterAfter(tokenFilter, UsernamePasswordAuthenticationFilter.class) - .addFilterBefore(jwtExceptionFilter, TokenFilter.class) + .addFilterBefore(jwtExceptionFilter, JwtFilter.class) .authorizeHttpRequests() .requestMatchers("/login/**").permitAll() diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieAuthorizationRequestRepository.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieAuthorizationRequestRepository.java similarity index 98% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieAuthorizationRequestRepository.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieAuthorizationRequestRepository.java index eb57af8f..3c84059e 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieAuthorizationRequestRepository.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieAuthorizationRequestRepository.java @@ -1,4 +1,4 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; import com.nimbusds.oauth2.sdk.util.StringUtils; import jakarta.servlet.http.HttpServletRequest; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieManager.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieManager.java similarity index 87% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieManager.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieManager.java index 9af129c9..edd41e1c 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/CookieManager.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/CookieManager.java @@ -1,6 +1,5 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; -import com.stubee.securitycommons.utils.CookieSerializer; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -10,6 +9,8 @@ import java.util.Arrays; import java.util.Optional; +import static rolling.security.common.util.CookieSerializer.*; + @Component @RequiredArgsConstructor class CookieManager { @@ -43,7 +44,7 @@ public void deleteCookie(final String name) { } public void addSerializedCookie(final String name, final T object, final int expire) { - String cookieValue = CookieSerializer.serialize(object); + String cookieValue = serialize(object); Cookie cookie = new Cookie(name, cookieValue); cookie.setMaxAge(expire); addCookie(cookie); @@ -52,7 +53,7 @@ public void addSerializedCookie(final String name, final T object, final int public Optional getDeserializedCookie(final String name, final Class cls) { return getCookie(name) .map(Cookie::getValue) - .map(cookieValue -> CookieSerializer.deserialize(cookieValue, cls)); + .map(cookieValue -> deserialize(cookieValue, cls)); } } \ No newline at end of file diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailException.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailException.java similarity index 55% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailException.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailException.java index 90506818..8729a1db 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailException.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailException.java @@ -1,7 +1,7 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; class OAuthFailException extends CustomException { diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailureHandler.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailureHandler.java similarity index 95% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailureHandler.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailureHandler.java index 960c1b81..af530ae1 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthFailureHandler.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthFailureHandler.java @@ -1,4 +1,4 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthProperties.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthProperties.java similarity index 88% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthProperties.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthProperties.java index 080e3f33..d9356530 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthProperties.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthProperties.java @@ -1,4 +1,4 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; import lombok.Getter; import lombok.Setter; diff --git a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthSuccessHandler.java b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthSuccessHandler.java similarity index 86% rename from Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthSuccessHandler.java rename to rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthSuccessHandler.java index 46fd3446..b33a7d2b 100644 --- a/Rolling-Adapters/security/oauth/src/main/java/com/stubee/oauth/security/handler/OAuthSuccessHandler.java +++ b/rolling-adapter/security/src/main/java/rolling/security/oauth/handler/OAuthSuccessHandler.java @@ -1,9 +1,5 @@ -package com.stubee.oauth.security.handler; +package rolling.security.oauth.handler; -import com.stubee.authapplication.outports.ProvideTokenPort; -import com.stubee.oauth.security.model.CustomMemberDetails; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; -import com.stubee.rollingdomains.domain.member.model.Member; import jakarta.servlet.http.Cookie; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -12,12 +8,16 @@ import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler; import org.springframework.stereotype.Component; import org.springframework.web.util.UriComponentsBuilder; +import rolling.application.auth.outport.ProvideTokenPort; +import rolling.domain.member.consts.MemberRole; +import rolling.domain.member.model.Member; +import rolling.security.oauth.MemberDetailsAdapter; import java.io.IOException; import java.net.URI; import java.util.Optional; -import static com.stubee.oauth.security.handler.CookieAuthorizationRequestRepository.*; +import static rolling.security.oauth.handler.CookieAuthorizationRequestRepository.REDIRECT_URI_PARAM_COOKIE_NAME; @Component @RequiredArgsConstructor @@ -46,7 +46,7 @@ private String determineTargetUrl(Authentication authentication) { isNotMatchedUri(cookieManager.getCookie(REDIRECT_URI_PARAM_COOKIE_NAME) .map(Cookie::getValue)); - final Member member = ((CustomMemberDetails) authentication.getPrincipal()).getMember(); + final Member member = ((MemberDetailsAdapter) authentication.getPrincipal()).getMember(); final Long memberId = member.memberId().getId(); final MemberRole memberRole = member.memberDetails().memberRole(); diff --git a/rolling-adapter/smtp/build.gradle b/rolling-adapter/smtp/build.gradle new file mode 100644 index 00000000..689b4adb --- /dev/null +++ b/rolling-adapter/smtp/build.gradle @@ -0,0 +1,5 @@ +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-mail' + + annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" +} \ No newline at end of file diff --git a/Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/EmailProperties.java b/rolling-adapter/smtp/src/main/java/rolling/smtp/EmailProperties.java similarity index 87% rename from Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/EmailProperties.java rename to rolling-adapter/smtp/src/main/java/rolling/smtp/EmailProperties.java index 369a153c..1bc221c3 100644 --- a/Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/EmailProperties.java +++ b/rolling-adapter/smtp/src/main/java/rolling/smtp/EmailProperties.java @@ -1,4 +1,4 @@ -package com.stubee.emailnotification.adapters; +package rolling.smtp; import lombok.Getter; import lombok.Setter; diff --git a/Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/SendEmailAdapter.java b/rolling-adapter/smtp/src/main/java/rolling/smtp/SMTPAdapter.java similarity index 78% rename from Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/SendEmailAdapter.java rename to rolling-adapter/smtp/src/main/java/rolling/smtp/SMTPAdapter.java index e5d71eb4..6cb46038 100644 --- a/Rolling-Adapters/thirdparty/email-notification/src/main/java/com/stubee/emailnotification/adapters/SendEmailAdapter.java +++ b/rolling-adapter/smtp/src/main/java/rolling/smtp/SMTPAdapter.java @@ -1,16 +1,16 @@ -package com.stubee.emailnotification.adapters; +package rolling.smtp; -import com.stubee.adapterscommons.annotations.Adapter; -import com.stubee.notificationapplication.outports.SendEmailPort; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Component; +import rolling.application.mail.outport.SendMailPort; -@Adapter +@Component @Slf4j @RequiredArgsConstructor -class SendEmailAdapter implements SendEmailPort { +class SMTPAdapter implements SendMailPort { private final JavaMailSender javaMailSender; private final EmailProperties emailProperties; diff --git a/Rolling-Api/Dockerfile b/rolling-api/Dockerfile similarity index 59% rename from Rolling-Api/Dockerfile rename to rolling-api/Dockerfile index a8eae85c..67515ccd 100644 --- a/Rolling-Api/Dockerfile +++ b/rolling-api/Dockerfile @@ -1,5 +1,5 @@ FROM openjdk:17-jdk-alpine -COPY build/libs/Rolling-Api-0.0.1-SNAPSHOT.jar api.jar +COPY build/libs/rolling-api-0.0.1-SNAPSHOT.jar api.jar ENTRYPOINT ["java", "-jar", "api.jar", "-x", "test"] \ No newline at end of file diff --git a/rolling-api/build.gradle b/rolling-api/build.gradle new file mode 100644 index 00000000..e84a8600 --- /dev/null +++ b/rolling-api/build.gradle @@ -0,0 +1,17 @@ +dependencies { + implementation project(':rolling-core:domain') + implementation project(':rolling-core:application') + + implementation project(':rolling-adapter:jpa-mysql') + implementation project(':rolling-adapter:s3') + implementation project(':rolling-adapter:security') + implementation project(':rolling-adapter:smtp') + + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-validation' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4' + + implementation 'org.springframework.security:spring-security-core:6.0.2' + + runtimeOnly 'mysql:mysql-connector-java:8.0.33' +} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/RollingApiApplication.java b/rolling-api/src/main/java/rolling/RollingApiApplication.java similarity index 90% rename from Rolling-Api/src/main/java/com/stubee/RollingApiApplication.java rename to rolling-api/src/main/java/rolling/RollingApiApplication.java index a06d17ea..1be7472d 100644 --- a/Rolling-Api/src/main/java/com/stubee/RollingApiApplication.java +++ b/rolling-api/src/main/java/rolling/RollingApiApplication.java @@ -1,4 +1,4 @@ -package com.stubee; +package rolling; import jakarta.annotation.PostConstruct; import org.springframework.boot.SpringApplication; @@ -10,7 +10,7 @@ public class RollingApiApplication { @PostConstruct - public void started() { + public void setTimeZone() { TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul")); } diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/AuthController.java b/rolling-api/src/main/java/rolling/rollingapi/auth/AuthController.java similarity index 60% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/AuthController.java rename to rolling-api/src/main/java/rolling/rollingapi/auth/AuthController.java index 9a977d96..191b68dd 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/auth/AuthController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/auth/AuthController.java @@ -1,14 +1,15 @@ -package com.stubee.rollingapi.domain.auth; +package rolling.rollingapi.auth; -import com.stubee.authapplication.usecases.CertifyAlumniUseCase; -import com.stubee.authapplication.usecases.RefreshTokenResponse; -import com.stubee.authapplication.usecases.RefreshTokenUseCase; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import rolling.application.auth.interactor.CertifyAlumniUseCase; +import rolling.application.auth.interactor.RefreshTokenResponse; +import rolling.application.auth.interactor.RefreshTokenUseCase; -import static org.springframework.http.HttpStatus.*; +import static org.springframework.http.HttpStatus.OK; @Tag(name = "Auth", description = "Auth Api") @RestController @@ -22,13 +23,13 @@ public class AuthController { @Operation(description = "Access Token 재발급") @PostMapping("/refresh") @ResponseStatus(OK) - public RefreshTokenResponse refresh(final @RequestBody RefreshTokenRequest request) { + public RefreshTokenResponse refresh(final @RequestBody @Validated RefreshTokenRequest request) { return refreshTokenUseCase.refresh(request.refreshToken()); } @Operation(description = "졸업생/재학생 인증") @PatchMapping("/certify") - public void certify(final @RequestBody CertifyAlumniRequest request) { + public void certify(final @RequestBody @Validated CertifyAlumniRequest request) { certifyAlumniUseCase.certify(request.housemaster()); } diff --git a/rolling-api/src/main/java/rolling/rollingapi/auth/CertifyAlumniRequest.java b/rolling-api/src/main/java/rolling/rollingapi/auth/CertifyAlumniRequest.java new file mode 100644 index 00000000..4b5b428a --- /dev/null +++ b/rolling-api/src/main/java/rolling/rollingapi/auth/CertifyAlumniRequest.java @@ -0,0 +1,5 @@ +package rolling.rollingapi.auth; + +import jakarta.validation.constraints.NotBlank; + +record CertifyAlumniRequest(@NotBlank String housemaster) {} \ No newline at end of file diff --git a/rolling-api/src/main/java/rolling/rollingapi/auth/RefreshTokenRequest.java b/rolling-api/src/main/java/rolling/rollingapi/auth/RefreshTokenRequest.java new file mode 100644 index 00000000..46e4f78f --- /dev/null +++ b/rolling-api/src/main/java/rolling/rollingapi/auth/RefreshTokenRequest.java @@ -0,0 +1,5 @@ +package rolling.rollingapi.auth; + +import jakarta.validation.constraints.NotBlank; + +record RefreshTokenRequest(@NotBlank String refreshToken) {} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncConfig.java b/rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncConfig.java similarity index 95% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncConfig.java rename to rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncConfig.java index bad22ff2..63f3a6f0 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncConfig.java +++ b/rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncConfig.java @@ -1,4 +1,4 @@ -package com.stubee.rollingapi.global.async.handler; +package rolling.rollingapi.common.async; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncExceptionHandler.java b/rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncExceptionHandler.java similarity index 91% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncExceptionHandler.java rename to rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncExceptionHandler.java index 355db7a7..c1c8b8fc 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/async/handler/AsyncExceptionHandler.java +++ b/rolling-api/src/main/java/rolling/rollingapi/common/async/AsyncExceptionHandler.java @@ -1,4 +1,4 @@ -package com.stubee.rollingapi.global.async.handler; +package rolling.rollingapi.common.async; import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/exception/GlobalExceptionHandler.java b/rolling-api/src/main/java/rolling/rollingapi/common/exception/GlobalExceptionHandler.java similarity index 95% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/global/exception/GlobalExceptionHandler.java rename to rolling-api/src/main/java/rolling/rollingapi/common/exception/GlobalExceptionHandler.java index 8226678c..64640e91 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/exception/GlobalExceptionHandler.java +++ b/rolling-api/src/main/java/rolling/rollingapi/common/exception/GlobalExceptionHandler.java @@ -1,8 +1,5 @@ -package com.stubee.rollingapi.global.exception; +package rolling.rollingapi.common.exception; -import com.stubee.rollingdomains.common.error.ErrorResponse; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; import lombok.extern.slf4j.Slf4j; import org.springframework.core.NestedRuntimeException; import org.springframework.http.ResponseEntity; @@ -14,6 +11,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.multipart.support.MissingServletRequestPartException; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; +import rolling.domain.common.error.ErrorResponse; import java.io.IOException; diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/swagger/SwaggerConfig.java b/rolling-api/src/main/java/rolling/rollingapi/common/swagger/SwaggerConfig.java similarity index 86% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/global/swagger/SwaggerConfig.java rename to rolling-api/src/main/java/rolling/rollingapi/common/swagger/SwaggerConfig.java index a086a3a8..0b11e7a6 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/global/swagger/SwaggerConfig.java +++ b/rolling-api/src/main/java/rolling/rollingapi/common/swagger/SwaggerConfig.java @@ -1,4 +1,4 @@ -package com.stubee.rollingapi.global.swagger; +package rolling.rollingapi.common.swagger; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; @@ -12,7 +12,7 @@ class SwaggerConfig { @Bean public GroupedOpenApi swaggerApi() { return GroupedOpenApi.builder() - .group("v2") + .group("v1") .pathsToMatch("/**") .build(); } @@ -27,7 +27,7 @@ private Info info() { return new Info() .title("Rolling") .description("Rolling API Docs") - .version("V2"); + .version("V1"); } } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/CommandCompanyController.java b/rolling-api/src/main/java/rolling/rollingapi/company/CommandCompanyController.java similarity index 79% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/CommandCompanyController.java rename to rolling-api/src/main/java/rolling/rollingapi/company/CommandCompanyController.java index a9d1b2e1..534dc095 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/CommandCompanyController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/company/CommandCompanyController.java @@ -1,19 +1,16 @@ -package com.stubee.rollingapi.domain.company; - -import com.stubee.rollingdomains.common.model.TSID; -import com.stubee.companyapplication.usecases.command.ModifyCompanyUseCase; -import com.stubee.companyapplication.usecases.command.ModifyCompanyStatusCommand; -import com.stubee.companyapplication.usecases.command.DeleteCompanyCommand; -import com.stubee.companyapplication.usecases.command.DeleteCompanyUseCase; -import com.stubee.companyapplication.usecases.command.RegisterCompanyUseCase; +package rolling.rollingapi.company; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import rolling.application.company.interactor.command.*; +import rolling.domain.common.model.TSID; -import static org.springframework.http.HttpStatus.*; +import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.NO_CONTENT; @Tag(name = "Command Company", description = "Command Company API") @RestController @@ -22,8 +19,8 @@ public class CommandCompanyController { private final RegisterCompanyUseCase registerCompanyUseCase; - private final DeleteCompanyUseCase deleteCompanyUseCase; private final ModifyCompanyUseCase modifyCompanyUseCase; + private final DeleteCompanyUseCase deleteCompanyUseCase; @Operation(description = "Company 등록") @PostMapping @@ -46,6 +43,12 @@ public void deny(final @PathVariable @NotNull Long companyId) { modifyCompanyUseCase.modify(ModifyCompanyStatusCommand.deny(companyId)); } + @Operation(description = "Company 수정") + @PatchMapping("/{companyId}") + public void modify(final @RequestBody @Validated ModifyCompanyRequest request, final @PathVariable Long companyId) { + modifyCompanyUseCase.modify(request.toCommand(companyId)); + } + @Operation(description = "Company 삭제 (ADMIN)") @DeleteMapping("/{companyId}") @ResponseStatus(NO_CONTENT) @@ -53,10 +56,4 @@ public void delete(final @PathVariable @NotNull Long companyId) { deleteCompanyUseCase.delete(DeleteCompanyCommand.toCommand(companyId)); } - @Operation(description = "Company 수정") - @PatchMapping("/{companyId}") - public void modify(final @RequestBody @Validated ModifyCompanyRequest request, final @PathVariable Long companyId) { - modifyCompanyUseCase.modify(request.toCommand(companyId)); - } - } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/ModifyCompanyRequest.java b/rolling-api/src/main/java/rolling/rollingapi/company/ModifyCompanyRequest.java similarity index 70% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/ModifyCompanyRequest.java rename to rolling-api/src/main/java/rolling/rollingapi/company/ModifyCompanyRequest.java index b43875fb..7e46aa65 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/ModifyCompanyRequest.java +++ b/rolling-api/src/main/java/rolling/rollingapi/company/ModifyCompanyRequest.java @@ -1,7 +1,7 @@ -package com.stubee.rollingapi.domain.company; +package rolling.rollingapi.company; -import com.stubee.companyapplication.usecases.command.ModifyCompanyDetailsCommand; import jakarta.validation.constraints.NotBlank; +import rolling.application.company.interactor.command.ModifyCompanyDetailsCommand; record ModifyCompanyRequest( @NotBlank @@ -13,7 +13,7 @@ record ModifyCompanyRequest( String addressEtc, String imgUrl, Integer rgb) { - public ModifyCompanyDetailsCommand toCommand(Long id) { + public ModifyCompanyDetailsCommand toCommand(final Long id) { return new ModifyCompanyDetailsCommand(id, name, description, address, addressEtc, imgUrl, rgb); } } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/QueryCompanyController.java b/rolling-api/src/main/java/rolling/rollingapi/company/QueryCompanyController.java similarity index 59% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/QueryCompanyController.java rename to rolling-api/src/main/java/rolling/rollingapi/company/QueryCompanyController.java index 9ab23954..b8cd55ac 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/QueryCompanyController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/company/QueryCompanyController.java @@ -1,14 +1,12 @@ -package com.stubee.rollingapi.domain.company; +package rolling.rollingapi.company; -import com.stubee.companyapplication.usecases.query.*; -import com.stubee.companyapplication.usecases.query.CompanyQueryResponse; -import com.stubee.companyapplication.usecases.query.CompanyResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.applicationcommons.model.response.PageDataResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import rolling.application.common.response.PageDataResponse; +import rolling.application.company.interactor.query.*; +import rolling.domain.common.model.PageRequest; import java.util.List; @@ -18,34 +16,34 @@ @RequiredArgsConstructor public class QueryCompanyController { - private final QueryAllCompanyListUseCase queryAllCompanyListUseCase; - private final QueryCompanyInfoByIdUseCase queryCompanyInfoByIdUseCase; - private final SearchCompanyListByNameUseCase searchCompanyListByNameUseCase; - private final QueryCompanyListByGradesUseCase queryCompanyListByGradesUseCase; + private final QueryCompanyInfoUseCase queryCompanyInfoUseCase; + private final SearchCompanyByNameUseCase searchCompanyByNameUseCase; + private final QueryAllCompanyUseCase queryAllCompanyUseCase; + private final QueryTop10CompanyUseCase queryTop10CompanyUseCase; @Operation(description = "Company id로 Company 정보 조회") @GetMapping("/info/{id}") public CompanyQueryResponse getInfo(final @PathVariable("id") Long companyId) { - return queryCompanyInfoByIdUseCase.get(companyId); + return queryCompanyInfoUseCase.query(companyId); } @Operation(description = "Company Name으로 Company 검색") @GetMapping("/search") public PageDataResponse> searchByName(final @RequestParam(name = "name") String companyName, final @ModelAttribute PageRequest pageRequest) { - return searchCompanyListByNameUseCase.get(companyName, pageRequest); + return searchCompanyByNameUseCase.query(companyName, pageRequest); } @Operation(description = "모든 Company List 조회 (MEMBER & ADMIN)") @GetMapping("/list/all") public PageDataResponse> getAll(final @ModelAttribute PageRequest pageRequest) { - return queryAllCompanyListUseCase.get(pageRequest); + return queryAllCompanyUseCase.query(pageRequest); } @Operation(description = "Company Top 10 By Grade (total, salary-benefits, balance, culture, career)") @GetMapping("/rank/{gradeType}") public List getByGrade(final @PathVariable String gradeType) { - return queryCompanyListByGradesUseCase.get(gradeType); + return queryTop10CompanyUseCase.query(gradeType); } } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/RegisterCompanyRequest.java b/rolling-api/src/main/java/rolling/rollingapi/company/RegisterCompanyRequest.java similarity index 79% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/RegisterCompanyRequest.java rename to rolling-api/src/main/java/rolling/rollingapi/company/RegisterCompanyRequest.java index a0288b72..9c17d560 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/company/RegisterCompanyRequest.java +++ b/rolling-api/src/main/java/rolling/rollingapi/company/RegisterCompanyRequest.java @@ -1,7 +1,7 @@ -package com.stubee.rollingapi.domain.company; +package rolling.rollingapi.company; -import com.stubee.companyapplication.usecases.command.RegisterCompanyCommand; import jakarta.validation.constraints.NotBlank; +import rolling.application.company.interactor.command.RegisterCompanyCommand; record RegisterCompanyRequest( @NotBlank String name, diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/file/FileController.java b/rolling-api/src/main/java/rolling/rollingapi/file/FileController.java similarity index 60% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/file/FileController.java rename to rolling-api/src/main/java/rolling/rollingapi/file/FileController.java index 17162e07..e443c6a2 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/file/FileController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/file/FileController.java @@ -1,13 +1,12 @@ -package com.stubee.rollingapi.domain.file; +package rolling.rollingapi.file; -import com.stubee.fileapplication.usecases.FileUploadUseCase; -import com.stubee.fileapplication.usecases.FileResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import rolling.application.file.interactor.FileResponse; +import rolling.application.file.interactor.UploadFileUseCase; @Tag(name = "File", description = "File API") @RestController @@ -15,13 +14,12 @@ @RequiredArgsConstructor public class FileController { - private final FileUploadUseCase fileUploadUseCase; + private final UploadFileUseCase uploadFileUseCase; @Operation(description = "file 업로드") @PostMapping - @ResponseStatus(HttpStatus.CREATED) public FileResponse upload(final @RequestPart("file") MultipartFile file) { - return fileUploadUseCase.uploadFile(file); + return uploadFileUseCase.upload(file); } } \ No newline at end of file diff --git a/rolling-api/src/main/java/rolling/rollingapi/member/MemberController.java b/rolling-api/src/main/java/rolling/rollingapi/member/MemberController.java new file mode 100644 index 00000000..dc6723c0 --- /dev/null +++ b/rolling-api/src/main/java/rolling/rollingapi/member/MemberController.java @@ -0,0 +1,42 @@ +package rolling.rollingapi.member; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import rolling.application.member.interactor.command.ModifyNicknameUseCase; +import rolling.application.member.interactor.query.MemberResponse; +import rolling.application.member.interactor.query.QueryMemberInfoUseCase; + +import static org.springframework.http.HttpStatus.NO_CONTENT; + +@Tag(name = "Command Member", description = "Command Member API") +@RestController +@RequestMapping(value = "/member") +@RequiredArgsConstructor +public class MemberController { + + private final ModifyNicknameUseCase modifyNicknameUseCase; + private final QueryMemberInfoUseCase queryMemberInfoUseCase; + + @Operation(description = "Member NickName 수정") + @PatchMapping("/nickName") + @ResponseStatus(NO_CONTENT) + public void modify(final @RequestBody @Validated ModifyNicknameRequest request) { + modifyNicknameUseCase.modify(request.toCommand()); + } + + @Operation(description = "내 정보 조회") + @GetMapping("/my") + public MemberResponse getMy() { + return queryMemberInfoUseCase.query(); + } + + @Operation(description = "MemberId로 Member 정보 조회") + @GetMapping("/{id}") + public MemberResponse getMemberById(final @PathVariable("id") Long memberId) { + return queryMemberInfoUseCase.query(memberId); + } + +} \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/ModifyNicknameRequest.java b/rolling-api/src/main/java/rolling/rollingapi/member/ModifyNicknameRequest.java similarity index 52% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/ModifyNicknameRequest.java rename to rolling-api/src/main/java/rolling/rollingapi/member/ModifyNicknameRequest.java index 4ab80ec0..1472ed52 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/member/ModifyNicknameRequest.java +++ b/rolling-api/src/main/java/rolling/rollingapi/member/ModifyNicknameRequest.java @@ -1,11 +1,11 @@ -package com.stubee.rollingapi.domain.member; +package rolling.rollingapi.member; -import com.stubee.memberapplication.usecases.command.ModifyNicknameCommand; import jakarta.validation.constraints.NotBlank; +import rolling.application.member.interactor.command.ModifyNicknameCommand; record ModifyNicknameRequest( @NotBlank String nickName) { public ModifyNicknameCommand toCommand() { - return ModifyNicknameCommand.create(nickName); + return new ModifyNicknameCommand(nickName); } } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/CommandStoryController.java b/rolling-api/src/main/java/rolling/rollingapi/story/CommandStoryController.java similarity index 68% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/CommandStoryController.java rename to rolling-api/src/main/java/rolling/rollingapi/story/CommandStoryController.java index c598e91d..c363276b 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/CommandStoryController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/story/CommandStoryController.java @@ -1,17 +1,19 @@ -package com.stubee.rollingapi.domain.story; +package rolling.rollingapi.story; -import com.stubee.reviewapplication.usecases.command.ModifyStoryUseCase; -import com.stubee.reviewapplication.usecases.command.DeleteStoryCommand; -import com.stubee.reviewapplication.usecases.command.DeleteStoryUseCase; -import com.stubee.reviewapplication.usecases.command.RegisterStoryUseCase; -import com.stubee.rollingdomains.domain.story.model.Story; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import rolling.application.story.interactor.command.DeleteStoryCommand; +import rolling.application.story.interactor.command.DeleteStoryUseCase; +import rolling.application.story.interactor.command.ModifyStoryUseCase; +import rolling.application.story.interactor.command.RegisterStoryUseCase; +import rolling.domain.story.model.Story; +import rolling.domain.story.model.StoryId; -import static org.springframework.http.HttpStatus.*; +import static org.springframework.http.HttpStatus.CREATED; +import static org.springframework.http.HttpStatus.NO_CONTENT; @Tag(name = "Command Story", description = "Command Story API") @RestController @@ -34,7 +36,7 @@ public Story register(final @RequestBody @Validated RegisterStoryRequest request @DeleteMapping("/{storyId}") @ResponseStatus(NO_CONTENT) public void delete(final @PathVariable Long storyId) { - deleteStoryUseCase.delete(DeleteStoryCommand.toCommand(storyId)); + deleteStoryUseCase.delete(new DeleteStoryCommand(StoryId.of(storyId))); } @Operation(description = "Story 수정") diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/ModifyStoryRequest.java b/rolling-api/src/main/java/rolling/rollingapi/story/ModifyStoryRequest.java similarity index 87% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/ModifyStoryRequest.java rename to rolling-api/src/main/java/rolling/rollingapi/story/ModifyStoryRequest.java index 6c2c3501..6b71d8a6 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/ModifyStoryRequest.java +++ b/rolling-api/src/main/java/rolling/rollingapi/story/ModifyStoryRequest.java @@ -1,11 +1,11 @@ -package com.stubee.rollingapi.domain.story; +package rolling.rollingapi.story; -import com.stubee.rollingdomains.domain.story.model.StoryId; -import com.stubee.reviewapplication.usecases.command.ModifyStoryCommand; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import rolling.application.story.interactor.command.ModifyStoryCommand; +import rolling.domain.story.model.StoryId; record ModifyStoryRequest( @NotBlank diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/QueryStoryController.java b/rolling-api/src/main/java/rolling/rollingapi/story/QueryStoryController.java similarity index 63% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/QueryStoryController.java rename to rolling-api/src/main/java/rolling/rollingapi/story/QueryStoryController.java index 1f3e54c4..1cd299c9 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/QueryStoryController.java +++ b/rolling-api/src/main/java/rolling/rollingapi/story/QueryStoryController.java @@ -1,15 +1,12 @@ -package com.stubee.rollingapi.domain.story; +package rolling.rollingapi.story; -import com.stubee.applicationcommons.model.response.PageDataResponse; -import com.stubee.reviewapplication.usecases.query.*; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.StoryQueryByMemberResponse; -import com.stubee.reviewapplication.usecases.query.StoryStatusResponse; -import com.stubee.rollingdomains.common.model.PageRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; +import rolling.application.common.response.PageDataResponse; +import rolling.application.story.interactor.query.*; +import rolling.domain.common.model.PageRequest; import java.util.List; @@ -21,31 +18,30 @@ @RequiredArgsConstructor public class QueryStoryController { - private final QueryStoryInfoByIdUseCase queryStoryInfoByIdUseCase; - private final QueryMyStoryListUseCase queryMyStoryListUseCase; + private final QueryStoryInfoUseCase queryStoryInfoUseCase; private final QueryMyStoryStatusUseCase queryMyStoryStatusUseCase; - private final QueryStoryListByMemberUseCase queryStoryListByMemberUseCase; - private final QueryStoryInfoListByCompanyUseCase queryStoryInfoListByCompanyUseCase; + private final QueryStoryByMemberUseCase queryStoryByMemberUseCase; + private final QueryStoryByCompanyUseCase queryStoryByCompanyUseCase; @Operation(description = "id로 Review 단건 조회") @GetMapping("/info/{id}") @ResponseStatus(OK) public StoryQueryByCompanyResponse getInfo(@PathVariable("id") Long reviewId) { - return queryStoryInfoByIdUseCase.get(reviewId); - } - - @Operation(description = "내가 쓴 Story List 조회") - @GetMapping("/my") - @ResponseStatus(OK) - public PageDataResponse> getMy(@ModelAttribute PageRequest pageRequest) { - return queryMyStoryListUseCase.get(pageRequest); + return queryStoryInfoUseCase.query(reviewId); } @Operation(description = "내 Story Status 조회") @GetMapping("/my/status") @ResponseStatus(OK) public StoryStatusResponse getMyStatus() { - return queryMyStoryStatusUseCase.get(); + return queryMyStoryStatusUseCase.query(); + } + + @Operation(description = "내가 쓴 Story List 조회") + @GetMapping("/my") + @ResponseStatus(OK) + public PageDataResponse> getMy(@ModelAttribute PageRequest pageRequest) { + return queryStoryByMemberUseCase.query(pageRequest); } @Operation(description = "Member Id로 Story List 조회") @@ -53,7 +49,7 @@ public StoryStatusResponse getMyStatus() { @ResponseStatus(OK) public PageDataResponse> getReviewByMember(@PathVariable("id") Long memberId, @ModelAttribute PageRequest pageRequest) { - return queryStoryListByMemberUseCase.get(memberId, pageRequest); + return queryStoryByMemberUseCase.query(memberId, pageRequest); } @Operation(description = "Company Id로 Story List 조회") @@ -61,7 +57,7 @@ public PageDataResponse> getReviewByMember(@Pat @ResponseStatus(OK) public PageDataResponse> getReviewByCompany(@PathVariable("id") Long companyID, @ModelAttribute PageRequest pageRequest) { - return queryStoryInfoListByCompanyUseCase.get(companyID, pageRequest); + return queryStoryByCompanyUseCase.query(companyID, pageRequest); } } \ No newline at end of file diff --git a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/RegisterStoryRequest.java b/rolling-api/src/main/java/rolling/rollingapi/story/RegisterStoryRequest.java similarity index 92% rename from Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/RegisterStoryRequest.java rename to rolling-api/src/main/java/rolling/rollingapi/story/RegisterStoryRequest.java index 205c10cd..4880fb07 100644 --- a/Rolling-Api/src/main/java/com/stubee/rollingapi/domain/story/RegisterStoryRequest.java +++ b/rolling-api/src/main/java/rolling/rollingapi/story/RegisterStoryRequest.java @@ -1,9 +1,9 @@ -package com.stubee.rollingapi.domain.story; +package rolling.rollingapi.story; -import com.stubee.reviewapplication.usecases.command.RegisterStoryCommand; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; +import rolling.application.story.interactor.command.RegisterStoryCommand; record RegisterStoryRequest( @NotNull Long companyId, diff --git a/rolling-api/src/main/resources/application.yml b/rolling-api/src/main/resources/application.yml new file mode 100644 index 00000000..4127ac41 --- /dev/null +++ b/rolling-api/src/main/resources/application.yml @@ -0,0 +1,94 @@ +server: + + port: 8080 + + tomcat: + use-relative-redirects: true + protocol-header: x-forwarded-proto + remoteip: + remote-ip-header: x-forwarded-for + forward-headers-strategy: native + +spring: + + mvc: + pathmatch: + matching-strategy: ant_path_matcher + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: update + open-in-view: false + properties: + hibernate: + show_sql: false + format_sql: true + + security: + oauth2: + client: + registration: + github: + client-id: ${GITHUB_CLIENT_ID} + client-secret: ${GITHUB_CLIENT_SECRET} + google: + client-id: ${GOOGLE_CLIENT_ID} + client-secret: ${GOOGLE_CLIENT_SECRET} + scope: + - profile + - email + mail: + host: smtp.gmail.com + port: 587 + username: ${MAIL_USERNAME} + password: ${MAIL_PASSWORD} + properties: + mail: + smtp: + connection-timeout: 5000 + auth: false + starttls: + enable: true + ssl: + enable: false + + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + +app: + jwt: + access-key: ${JWT_ACCESS_KEY} + secret-key: ${JWT_SECRET_KEY} + access-expire: ${JWT_ACCESS_EXPIRE} + refresh-expire: ${JWT_REFRESH_EXPIRE} + s3: + bucket: ${S3_BUCKET} + region: ${S3_REGION} + access-key: ${S3_ACCESS_KEY} + secret-key: ${S3_SECRET_KEY} + certify: + housemasterList: + - ${HOUSE_MASTER_1} + - ${HOUSE_MASTER_2} + - ${HOUSE_MASTER_3} + naver: + base-url: https://openapi.naver.com/v1/search/news.json + client-id: ${NAVER_CLIENT_ID} + client-secret: ${NAVER_CLIENT_SECRET} + oauth: + redirect-url: ${OAUTH_REDIRECT_URL} + +cloud: + aws: + region: + static: ${S3_REGION} + stack: + auto: false \ No newline at end of file diff --git a/rolling-api/src/test/java/rolling/RollingApiApplicationTests.java b/rolling-api/src/test/java/rolling/RollingApiApplicationTests.java new file mode 100644 index 00000000..036463a1 --- /dev/null +++ b/rolling-api/src/test/java/rolling/RollingApiApplicationTests.java @@ -0,0 +1,7 @@ +package rolling; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class RollingApiApplicationTests { +} \ No newline at end of file diff --git a/rolling-batch/Dockerfile b/rolling-batch/Dockerfile new file mode 100644 index 00000000..02d3a2ea --- /dev/null +++ b/rolling-batch/Dockerfile @@ -0,0 +1,5 @@ +FROM openjdk:17-jdk-alpine + +COPY build/libs/rolling-batch-0.0.1-SNAPSHOT.jar batch.jar + +ENTRYPOINT ["java", "-jar", "batch.jar", "-x", "test"] \ No newline at end of file diff --git a/rolling-batch/build.gradle b/rolling-batch/build.gradle new file mode 100644 index 00000000..1e9b5220 --- /dev/null +++ b/rolling-batch/build.gradle @@ -0,0 +1,14 @@ +dependencies { + implementation project(':rolling-core:domain') + implementation project(':rolling-core:application') + + implementation project(':rolling-adapter:jpa-mysql') + implementation project(':rolling-adapter:s3') + implementation project(':rolling-adapter:security') + implementation project(':rolling-adapter:smtp') + + implementation 'org.springframework.boot:spring-boot-starter-batch' + implementation 'org.springframework.boot:spring-boot-starter-tomcat' + + runtimeOnly 'mysql:mysql-connector-java:8.0.33' +} \ No newline at end of file diff --git a/rolling-batch/src/main/java/rolling/RollingBatchApplication.java b/rolling-batch/src/main/java/rolling/RollingBatchApplication.java new file mode 100644 index 00000000..cf0e1801 --- /dev/null +++ b/rolling-batch/src/main/java/rolling/RollingBatchApplication.java @@ -0,0 +1,13 @@ +package rolling; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class RollingBatchApplication { + + public static void main(String[] args) { + SpringApplication.run(RollingBatchApplication.class, args); + } + +} \ No newline at end of file diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/config/CalculateCompanyGradesAvgJobConfig.java b/rolling-batch/src/main/java/rolling/rollingbatch/job/config/CalculateCompanyGradesAvgJobConfig.java similarity index 79% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/config/CalculateCompanyGradesAvgJobConfig.java rename to rolling-batch/src/main/java/rolling/rollingbatch/job/config/CalculateCompanyGradesAvgJobConfig.java index d9f3bc8b..eb161eb2 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/config/CalculateCompanyGradesAvgJobConfig.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/job/config/CalculateCompanyGradesAvgJobConfig.java @@ -1,9 +1,5 @@ -package com.stubee.companyaveragebatch.job.config; +package rolling.rollingbatch.job.config; -import com.stubee.companyaveragebatch.processor.CompanyGradesAvgProcessor; -import com.stubee.companyaveragebatch.reader.CompanyListReader; -import com.stubee.companyaveragebatch.writer.CompanyListWriter; -import com.stubee.rollingdomains.domain.company.model.Company; import lombok.RequiredArgsConstructor; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; @@ -13,10 +9,14 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; +import rolling.domain.company.model.Company; +import rolling.rollingbatch.processor.CompanyGradesAvgProcessor; +import rolling.rollingbatch.reader.CompanyListReader; +import rolling.rollingbatch.writer.CompanyListWriter; import java.util.List; -import static com.stubee.companyaveragebatch.job.consts.BatchConstants.*; +import static rolling.rollingbatch.job.consts.BatchConstants.CHUNK_SIZE; @Configuration @RequiredArgsConstructor diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/consts/BatchConstants.java b/rolling-batch/src/main/java/rolling/rollingbatch/job/consts/BatchConstants.java similarity index 70% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/consts/BatchConstants.java rename to rolling-batch/src/main/java/rolling/rollingbatch/job/consts/BatchConstants.java index 8b014969..89307c24 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/job/consts/BatchConstants.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/job/consts/BatchConstants.java @@ -1,4 +1,4 @@ -package com.stubee.companyaveragebatch.job.consts; +package rolling.rollingbatch.job.consts; public class BatchConstants { diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/processor/CompanyGradesAvgProcessor.java b/rolling-batch/src/main/java/rolling/rollingbatch/processor/CompanyGradesAvgProcessor.java similarity index 78% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/processor/CompanyGradesAvgProcessor.java rename to rolling-batch/src/main/java/rolling/rollingbatch/processor/CompanyGradesAvgProcessor.java index a03b5523..684b0642 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/processor/CompanyGradesAvgProcessor.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/processor/CompanyGradesAvgProcessor.java @@ -1,26 +1,26 @@ -package com.stubee.companyaveragebatch.processor; - -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.batchcommons.annotations.Processor; -import com.stubee.reviewapplication.usecases.query.StoryQueryByCompanyResponse; -import com.stubee.reviewapplication.usecases.query.QueryStoryInfoListByCompanyUseCase; -import com.stubee.rollingdomains.domain.company.model.CompanyGrades; -import com.stubee.rollingdomains.domain.company.model.Company; +package rolling.rollingbatch.processor; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.item.ItemProcessor; +import org.springframework.stereotype.Component; +import rolling.application.story.interactor.query.QueryStoryByCompanyUseCase; +import rolling.application.story.interactor.query.StoryQueryByCompanyResponse; +import rolling.domain.common.model.PageRequest; +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyGrades; import java.util.ArrayList; import java.util.List; -import static com.stubee.companyaveragebatch.job.consts.BatchConstants.PAGE_SIZE; +import static rolling.rollingbatch.job.consts.BatchConstants.PAGE_SIZE; -@Processor +@Component @Slf4j @RequiredArgsConstructor public class CompanyGradesAvgProcessor implements ItemProcessor, List> { - private final QueryStoryInfoListByCompanyUseCase queryReviewInfoListByCompanyUseCase; + private final QueryStoryByCompanyUseCase queryStoryByCompanyUseCase; private double salaryAndBenefitsSum; private double workLifeBalanceSum; @@ -34,19 +34,15 @@ public List process(final List readCompanyList) { log.info("-----Processor Start-----"); final List processedCompanyList = new ArrayList<>(); - readCompanyList.forEach(company -> { - this.init(); - log.info("Company Name : {}", company.companyDetails().name()); + this.init(); this.calculateSums(company.companyId().getId()); - final CompanyGrades updatedGrades = this.calculateAverages(); - - final Company updatedCompany = company.update(updatedGrades); + company.modify(this.calculateAverages()); - processedCompanyList.add(updatedCompany); + processedCompanyList.add(company); }); log.info("-----Processor End-----"); @@ -56,7 +52,7 @@ public List process(final List readCompanyList) { private void calculateSums(final Long companyId) { while (true) { - final List reviewList = queryReviewInfoListByCompanyUseCase.get(companyId, + final List reviewList = queryStoryByCompanyUseCase.query(companyId, PageRequest.of(reviewPage, PAGE_SIZE)).data(); log.info("ReviewList Size : {}", reviewList.size()); @@ -95,7 +91,7 @@ private CompanyGrades calculateAverages() { log.info("workLifeBalanceAvg : {}", workLifeBalanceAvg); log.info("organizationalCultureAvg : {}", organizationalCultureAvg); log.info("careerAdvancementAvg : {}", careerAdvancementAvg); - log.info("-----"); + log.info("----------"); return updatedGrades; } diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/reader/CompanyListReader.java b/rolling-batch/src/main/java/rolling/rollingbatch/reader/CompanyListReader.java similarity index 62% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/reader/CompanyListReader.java rename to rolling-batch/src/main/java/rolling/rollingbatch/reader/CompanyListReader.java index ad6f0ca7..db8041fb 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/reader/CompanyListReader.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/reader/CompanyListReader.java @@ -1,25 +1,25 @@ -package com.stubee.companyaveragebatch.reader; - -import com.stubee.companyapplication.usecases.query.CompanyResponse; -import com.stubee.rollingdomains.common.model.PageRequest; -import com.stubee.batchcommons.annotations.Reader; -import com.stubee.companyapplication.usecases.query.QueryAllCompanyListUseCase; -import com.stubee.rollingdomains.domain.company.model.Company; -import com.stubee.rollingdomains.domain.company.model.CompanyId; +package rolling.rollingbatch.reader; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.item.ItemReader; +import org.springframework.stereotype.Component; +import rolling.application.company.interactor.query.CompanyResponse; +import rolling.application.company.interactor.query.QueryAllCompanyUseCase; +import rolling.domain.common.model.PageRequest; +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyId; import java.util.List; -import static com.stubee.companyaveragebatch.job.consts.BatchConstants.*; +import static rolling.rollingbatch.job.consts.BatchConstants.PAGE_SIZE; -@Reader +@Component @Slf4j @RequiredArgsConstructor public class CompanyListReader implements ItemReader> { - private final QueryAllCompanyListUseCase queryCompanyUseCase; + private final QueryAllCompanyUseCase queryAllCompanyUseCase; private long currentPage = 1; @@ -28,7 +28,7 @@ public List read() { log.info("-----Reader Start-----"); log.info("CurrentPage : {}", currentPage); - return determineItems(queryCompanyUseCase.get(PageRequest.of(currentPage, PAGE_SIZE)).data().stream() + return determineItems(queryAllCompanyUseCase.query(PageRequest.of(currentPage, PAGE_SIZE)).data().stream() .map(this::toDomain) .toList()); } diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/scheduler/CompanyGradesAvgScheduler.java b/rolling-batch/src/main/java/rolling/rollingbatch/scheduler/CompanyGradesAvgScheduler.java similarity index 95% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/scheduler/CompanyGradesAvgScheduler.java rename to rolling-batch/src/main/java/rolling/rollingbatch/scheduler/CompanyGradesAvgScheduler.java index 4067ca85..ba790dd6 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/scheduler/CompanyGradesAvgScheduler.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/scheduler/CompanyGradesAvgScheduler.java @@ -1,4 +1,4 @@ -package com.stubee.companyaveragebatch.scheduler; +package rolling.rollingbatch.scheduler; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/writer/CompanyListWriter.java b/rolling-batch/src/main/java/rolling/rollingbatch/writer/CompanyListWriter.java similarity index 59% rename from Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/writer/CompanyListWriter.java rename to rolling-batch/src/main/java/rolling/rollingbatch/writer/CompanyListWriter.java index b3968d86..c3269483 100644 --- a/Rolling-Batch/company-average-batch/src/main/java/com/stubee/companyaveragebatch/writer/CompanyListWriter.java +++ b/rolling-batch/src/main/java/rolling/rollingbatch/writer/CompanyListWriter.java @@ -1,28 +1,28 @@ -package com.stubee.companyaveragebatch.writer; +package rolling.rollingbatch.writer; -import com.stubee.batchcommons.annotations.Writer; -import com.stubee.companyapplication.usecases.command.UpdateCompanyUseCase; -import com.stubee.rollingdomains.domain.company.model.Company; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.item.Chunk; import org.springframework.batch.item.ItemWriter; +import org.springframework.stereotype.Component; +import rolling.application.company.interactor.command.UpdateCompanyUseCase; +import rolling.domain.company.model.Company; import java.util.List; -@Writer +@Component @Slf4j @RequiredArgsConstructor public class CompanyListWriter implements ItemWriter> { - private final UpdateCompanyUseCase commandCompanyUseCase; + private final UpdateCompanyUseCase updateCompanyUseCase; @Override public void write(final Chunk> chunk) { log.info("-----Writer Start-----"); log.info("chunk size : {}", chunk.size()); - chunk.getItems().forEach(commandCompanyUseCase::updateAll); + chunk.getItems().forEach(updateCompanyUseCase::update); log.info("-----Writer End-----"); } diff --git a/rolling-batch/src/main/resources/application.yml b/rolling-batch/src/main/resources/application.yml new file mode 100644 index 00000000..d39f8881 --- /dev/null +++ b/rolling-batch/src/main/resources/application.yml @@ -0,0 +1,56 @@ +server: + + port: 8082 + +spring: + + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: ${DB_URL} + username: ${DB_USERNAME} + password: ${DB_PASSWORD} + + jpa: + hibernate: + ddl-auto: update + open-in-view: false + properties: + hibernate: + show_sql: false + format_sql: true + + security: + oauth2: + client: + registration: + github: + client-id: ${GITHUB_CLIENT_ID} + client-secret: ${GITHUB_CLIENT_SECRET} + mail: + host: smtp.gmail.com + port: 587 + username: ${MAIL_USERNAME} + password: ${MAIL_PASSWORD} + properties: + mail: + smtp: + connection-timeout: 5000 + auth: false + starttls: + enable: true + ssl: + enable: false + +app: + s3: + bucket: ${S3_BUCKET} + region: ${S3_REGION} + access-key: ${S3_ACCESS_KEY} + secret-key: ${S3_SECRET_KEY} + +cloud: + aws: + region: + static: ${S3_REGION} + stack: + auto: false \ No newline at end of file diff --git a/rolling-batch/src/test/java/rolling/rollingbatch/RollingBatchApplicationTests.java b/rolling-batch/src/test/java/rolling/rollingbatch/RollingBatchApplicationTests.java new file mode 100644 index 00000000..eb12a176 --- /dev/null +++ b/rolling-batch/src/test/java/rolling/rollingbatch/RollingBatchApplicationTests.java @@ -0,0 +1,7 @@ +package rolling.rollingbatch; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class RollingBatchApplicationTests { +} \ No newline at end of file diff --git a/rolling-core/application/build.gradle b/rolling-core/application/build.gradle new file mode 100644 index 00000000..a63c671d --- /dev/null +++ b/rolling-core/application/build.gradle @@ -0,0 +1,9 @@ +dependencies { + implementation project(':rolling-core:domain') + + implementation 'org.springframework:spring-tx:6.0.6' + implementation 'org.springframework:spring-web:6.0.6' + implementation 'org.springframework:spring-context:6.0.9' + + implementation 'io.projectreactor:reactor-core:3.5.3' +} \ No newline at end of file diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/CertifyAlumniApi.java b/rolling-core/application/src/main/java/rolling/application/auth/interactor/CertifyAlumniUseCase.java similarity index 52% rename from Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/CertifyAlumniApi.java rename to rolling-core/application/src/main/java/rolling/application/auth/interactor/CertifyAlumniUseCase.java index a0ae0bed..cbde6f6a 100644 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/impl/CertifyAlumniApi.java +++ b/rolling-core/application/src/main/java/rolling/application/auth/interactor/CertifyAlumniUseCase.java @@ -1,20 +1,18 @@ -package com.stubee.authapplication.usecases.impl; +package rolling.application.auth.interactor; -import com.stubee.applicationcommons.annotations.CommandService; -import com.stubee.authapplication.outports.CertifyAlumniPort; -import com.stubee.authapplication.usecases.CertifyAlumniUseCase; -import com.stubee.rollingdomains.domain.member.events.MemberCertifiedEvent; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; +import rolling.application.auth.outport.CertifyAlumniPort; +import rolling.domain.member.events.MemberCertifiedEvent; -@CommandService +@Component @RequiredArgsConstructor -class CertifyAlumniApi implements CertifyAlumniUseCase { +public class CertifyAlumniUseCase { private final CertifyAlumniPort certifyAlumniPort; private final ApplicationEventPublisher applicationEventPublisher; - @Override public void certify(final String housemaster) { certifyAlumniPort.certify(housemaster); diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenResponse.java b/rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenResponse.java similarity index 81% rename from Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenResponse.java rename to rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenResponse.java index 3a2ea3ba..0b8c0f92 100644 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/usecases/RefreshTokenResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenResponse.java @@ -1,4 +1,4 @@ -package com.stubee.authapplication.usecases; +package rolling.application.auth.interactor; public record RefreshTokenResponse( String accessToken) { diff --git a/rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenUseCase.java b/rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenUseCase.java new file mode 100644 index 00000000..b7d9f6e8 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/auth/interactor/RefreshTokenUseCase.java @@ -0,0 +1,28 @@ +package rolling.application.auth.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import rolling.application.auth.outport.ParseTokenPort; +import rolling.application.auth.outport.ProvideTokenPort; +import rolling.application.member.outport.QueryMemberPort; +import rolling.domain.member.model.Member; + +@Component +@RequiredArgsConstructor +public class RefreshTokenUseCase { + + private final ProvideTokenPort provideJwtPort; + private final ParseTokenPort parseJwtPort; + private final QueryMemberPort queryMemberPort; + + public RefreshTokenResponse refresh(final String refreshToken) { + final Long memberId = parseJwtPort.getSubjectFromRefreshToken(refreshToken); + + final Member member = queryMemberPort.getBy(memberId); + + final String accessToken = provideJwtPort.generateAccessToken(member.memberId().getId(), member.memberDetails().memberRole()); + + return RefreshTokenResponse.of(accessToken); + } + +} \ No newline at end of file diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/CertifyAlumniPort.java b/rolling-core/application/src/main/java/rolling/application/auth/outport/CertifyAlumniPort.java similarity index 63% rename from Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/CertifyAlumniPort.java rename to rolling-core/application/src/main/java/rolling/application/auth/outport/CertifyAlumniPort.java index eb686f53..00de2704 100644 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/CertifyAlumniPort.java +++ b/rolling-core/application/src/main/java/rolling/application/auth/outport/CertifyAlumniPort.java @@ -1,4 +1,4 @@ -package com.stubee.authapplication.outports; +package rolling.application.auth.outport; public interface CertifyAlumniPort { diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ParseTokenPort.java b/rolling-core/application/src/main/java/rolling/application/auth/outport/ParseTokenPort.java similarity index 77% rename from Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ParseTokenPort.java rename to rolling-core/application/src/main/java/rolling/application/auth/outport/ParseTokenPort.java index 2ef8f7f0..a76910d7 100644 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ParseTokenPort.java +++ b/rolling-core/application/src/main/java/rolling/application/auth/outport/ParseTokenPort.java @@ -1,4 +1,4 @@ -package com.stubee.authapplication.outports; +package rolling.application.auth.outport; public interface ParseTokenPort { diff --git a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ProvideTokenPort.java b/rolling-core/application/src/main/java/rolling/application/auth/outport/ProvideTokenPort.java similarity index 60% rename from Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ProvideTokenPort.java rename to rolling-core/application/src/main/java/rolling/application/auth/outport/ProvideTokenPort.java index d167f5e6..e5bbdafc 100644 --- a/Rolling-Application/auth-application/src/main/java/com/stubee/authapplication/outports/ProvideTokenPort.java +++ b/rolling-core/application/src/main/java/rolling/application/auth/outport/ProvideTokenPort.java @@ -1,6 +1,6 @@ -package com.stubee.authapplication.outports; +package rolling.application.auth.outport; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; +import rolling.domain.member.consts.MemberRole; public interface ProvideTokenPort { diff --git a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/model/response/PageDataResponse.java b/rolling-core/application/src/main/java/rolling/application/common/response/PageDataResponse.java similarity index 59% rename from Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/model/response/PageDataResponse.java rename to rolling-core/application/src/main/java/rolling/application/common/response/PageDataResponse.java index 85ad60d3..3e357b16 100644 --- a/Rolling-Application/application-commons/src/main/java/com/stubee/applicationcommons/model/response/PageDataResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/common/response/PageDataResponse.java @@ -1,6 +1,6 @@ -package com.stubee.applicationcommons.model.response; +package rolling.application.common.response; -public record PageDataResponse ( +public record PageDataResponse ( T data) { public static PageDataResponse of(final T data) { return new PageDataResponse<>(data); diff --git a/rolling-core/application/src/main/java/rolling/application/company/CompanyServiceImpl.java b/rolling-core/application/src/main/java/rolling/application/company/CompanyServiceImpl.java new file mode 100644 index 00000000..a82b7b52 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/CompanyServiceImpl.java @@ -0,0 +1,18 @@ +package rolling.application.company; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.domain.company.service.CompanyService; + +@Service +@RequiredArgsConstructor +class CompanyServiceImpl implements CompanyService { + + private final QueryCompanyPort queryCompanyPort; + + public boolean isNameDuplicate(final String name) { + return queryCompanyPort.existsBy(name); + } + +} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapper.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/CompanyMapper.java similarity index 57% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapper.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/command/CompanyMapper.java index d7660d8b..020b202c 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/impl/CompanyMapper.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/CompanyMapper.java @@ -1,15 +1,13 @@ -package com.stubee.companyapplication.usecases.command.impl; +package rolling.application.company.interactor.command; -import com.stubee.rollingdomains.domain.company.model.*; -import com.stubee.companyapplication.usecases.command.RegisterCompanyCommand; -import com.stubee.companyapplication.usecases.command.ModifyCompanyDetailsCommand; -import com.stubee.rollingdomains.domain.member.model.MemberId; +import rolling.domain.company.model.*; +import rolling.domain.member.model.MemberId; abstract class CompanyMapper { - public static Company toDomain(final RegisterCompanyCommand command, final MemberId memberId) { + static Company toDomain(final RegisterCompanyCommand command, final MemberId memberId) { return Company.ExceptIdBuilder() - .companyDetails(CompanyDetails.ExceptDateBuilder() + .companyDetails(CompanyDetails.builder() .registrantId(RegistrantId.of(memberId)) .name(command.name()) .description(command.description()) @@ -20,8 +18,8 @@ public static Company toDomain(final RegisterCompanyCommand command, final Membe .build(); } - public static CompanyDetails toDetails(final ModifyCompanyDetailsCommand command, final MemberId memberId) { - return CompanyDetails.ExceptDateBuilder() + static CompanyDetails toDetails(final ModifyCompanyDetailsCommand command, final MemberId memberId) { + return CompanyDetails.builder() .registrantId(RegistrantId.of(memberId)) .name(command.name()) .description(command.description()) diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyCommand.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyCommand.java similarity index 63% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyCommand.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyCommand.java index 014e6722..cf770439 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/DeleteCompanyCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyCommand.java @@ -1,6 +1,6 @@ -package com.stubee.companyapplication.usecases.command; +package rolling.application.company.interactor.command; -import com.stubee.rollingdomains.domain.company.model.CompanyId; +import rolling.domain.company.model.CompanyId; public record DeleteCompanyCommand( CompanyId companyId) { diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyUseCase.java new file mode 100644 index 00000000..c348ad0c --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/DeleteCompanyUseCase.java @@ -0,0 +1,19 @@ +package rolling.application.company.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.CommandCompanyPort; + +@Component +@Transactional +@RequiredArgsConstructor +public class DeleteCompanyUseCase { + + private final CommandCompanyPort commandCompanyPort; + + public void delete(final DeleteCompanyCommand command) { + commandCompanyPort.deleteById(command.companyId()); + } + +} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyDetailsCommand.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyDetailsCommand.java similarity index 79% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyDetailsCommand.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyDetailsCommand.java index 7fc0041a..fd188267 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyDetailsCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyDetailsCommand.java @@ -1,4 +1,4 @@ -package com.stubee.companyapplication.usecases.command; +package rolling.application.company.interactor.command; public record ModifyCompanyDetailsCommand( Long id, diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyStatusCommand.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyStatusCommand.java similarity index 70% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyStatusCommand.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyStatusCommand.java index 693552d5..7f2d4693 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/ModifyCompanyStatusCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyStatusCommand.java @@ -1,7 +1,7 @@ -package com.stubee.companyapplication.usecases.command; +package rolling.application.company.interactor.command; -import com.stubee.rollingdomains.domain.company.consts.CompanyStatus; -import com.stubee.rollingdomains.domain.company.model.CompanyId; +import rolling.domain.company.consts.CompanyStatus; +import rolling.domain.company.model.CompanyId; public record ModifyCompanyStatusCommand( CompanyId companyId, diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyUseCase.java new file mode 100644 index 00000000..18fe0182 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/ModifyCompanyUseCase.java @@ -0,0 +1,42 @@ +package rolling.application.company.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.CommandCompanyPort; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyDetails; +import rolling.domain.company.service.CompanyService; +import rolling.domain.member.model.MemberId; + +@Component +@Transactional +@RequiredArgsConstructor +public class ModifyCompanyUseCase { + + private final MemberSessionPort memberSessionPort; + private final CommandCompanyPort commandCompanyPort; + private final QueryCompanyPort queryCompanyPort; + private final CompanyService companyService; + + public void modify(final ModifyCompanyDetailsCommand command) { + final MemberId memberId = memberSessionPort.currentId(); + final CompanyDetails companyDetails = CompanyMapper.toDetails(command, memberId); + final Company company = queryCompanyPort.getBy(command.id()); + + company.modify(companyDetails, companyService); + + commandCompanyPort.save(company); + } + + public void modify(final ModifyCompanyStatusCommand command) { + final Company company = queryCompanyPort.getBy(command.companyId().getId()); + + company.modify(command.status()); + + commandCompanyPort.save(company); + } + +} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyCommand.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyCommand.java similarity index 90% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyCommand.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyCommand.java index 11ef2851..b8aab13e 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/command/RegisterCompanyCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyCommand.java @@ -1,4 +1,4 @@ -package com.stubee.companyapplication.usecases.command; +package rolling.application.company.interactor.command; public record RegisterCompanyCommand( String name, diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyUseCase.java new file mode 100644 index 00000000..fc71f431 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/RegisterCompanyUseCase.java @@ -0,0 +1,34 @@ +package rolling.application.company.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.CommandCompanyPort; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.common.model.TSID; +import rolling.domain.company.exception.DuplicatedCompanyNameException; +import rolling.domain.company.model.Company; +import rolling.domain.member.model.MemberId; + +@Component +@Transactional +@RequiredArgsConstructor +public class RegisterCompanyUseCase { + + private final CommandCompanyPort commandCompanyPort; + private final QueryCompanyPort queryCompanyPort; + private final MemberSessionPort memberSessionPort; + + public TSID register(final RegisterCompanyCommand command) { + if(queryCompanyPort.existsBy(command.name())) { + throw DuplicatedCompanyNameException.EXCEPTION; + } + + final MemberId memberId = memberSessionPort.currentId(); + final Company company = CompanyMapper.toDomain(command, memberId); + + return TSID.of(commandCompanyPort.save(company).companyId()); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/command/UpdateCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/UpdateCompanyUseCase.java new file mode 100644 index 00000000..bc1a8ea4 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/command/UpdateCompanyUseCase.java @@ -0,0 +1,22 @@ +package rolling.application.company.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.CommandCompanyPort; +import rolling.domain.company.model.Company; + +import java.util.List; + +@Component +@Transactional +@RequiredArgsConstructor +public class UpdateCompanyUseCase { + + private final CommandCompanyPort commandCompanyPort; + + public void update(final List companyList) { + commandCompanyPort.updateAll(companyList); + } + +} \ No newline at end of file diff --git a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyQueryResponse.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyQueryResponse.java similarity index 92% rename from Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyQueryResponse.java rename to rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyQueryResponse.java index 9033bcb7..f0069725 100644 --- a/Rolling-Application/company-application/src/main/java/com/stubee/companyapplication/usecases/query/CompanyQueryResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyQueryResponse.java @@ -1,4 +1,4 @@ -package com.stubee.companyapplication.usecases.query; +package rolling.application.company.interactor.query; import java.time.LocalDateTime; diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyResponse.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyResponse.java new file mode 100644 index 00000000..233b1d13 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/CompanyResponse.java @@ -0,0 +1,14 @@ +package rolling.application.company.interactor.query; + +import rolling.domain.common.model.TSID; +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyDetails; +import rolling.domain.company.model.CompanyGrades; + +public record CompanyResponse(TSID companyId, CompanyDetails companyDetails, CompanyGrades companyGrades, + TSID registrantId) { + public static CompanyResponse of(final Company company) { + return new CompanyResponse(TSID.of(company.companyId()), company.companyDetails(), + company.companyGrades(), TSID.of(company.companyDetails().registrantId())); + } +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryAllCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryAllCompanyUseCase.java new file mode 100644 index 00000000..741e20fb --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryAllCompanyUseCase.java @@ -0,0 +1,27 @@ +package rolling.application.company.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.common.response.PageDataResponse; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.domain.common.model.PageRequest; + +import java.util.List; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryAllCompanyUseCase { + + private final QueryCompanyPort queryCompanyPort; + + public PageDataResponse> query(final PageRequest pageRequest) { + pageRequest.validate(); + + return PageDataResponse.of(queryCompanyPort.getAll(pageRequest).stream() + .map(CompanyResponse::of) + .toList()); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryCompanyInfoUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryCompanyInfoUseCase.java new file mode 100644 index 00000000..9442f067 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryCompanyInfoUseCase.java @@ -0,0 +1,26 @@ +package rolling.application.company.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.domain.company.events.CompanyViewedEvent; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryCompanyInfoUseCase { + + private final QueryCompanyPort queryCompanyPort; + private final ApplicationEventPublisher applicationEventPublisher; + + public CompanyQueryResponse query(final Long companyId) { + final CompanyQueryResponse response = queryCompanyPort.getInfoBy(companyId); + + applicationEventPublisher.publishEvent(CompanyViewedEvent.of(companyId)); + + return response; + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryTop10CompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryTop10CompanyUseCase.java new file mode 100644 index 00000000..7cb57a54 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/QueryTop10CompanyUseCase.java @@ -0,0 +1,23 @@ +package rolling.application.company.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.QueryCompanyPort; + +import java.util.List; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryTop10CompanyUseCase { + + private final QueryCompanyPort queryCompanyPort; + + public List query(final String gradeType) { + return queryCompanyPort.getOrderBy(gradeType).stream() + .map(CompanyResponse::of) + .toList(); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/interactor/query/SearchCompanyByNameUseCase.java b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/SearchCompanyByNameUseCase.java new file mode 100644 index 00000000..b0ed49d5 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/interactor/query/SearchCompanyByNameUseCase.java @@ -0,0 +1,27 @@ +package rolling.application.company.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.common.response.PageDataResponse; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.domain.common.model.PageRequest; + +import java.util.List; + +@Component +@Transactional +@RequiredArgsConstructor +public class SearchCompanyByNameUseCase { + + private final QueryCompanyPort queryCompanyPort; + + public PageDataResponse> query(final String name, final PageRequest pageRequest) { + pageRequest.validate(); + + return PageDataResponse.of(queryCompanyPort.searchByName(name, pageRequest).stream() + .map(CompanyResponse::of) + .toList()); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/outport/CommandCompanyPort.java b/rolling-core/application/src/main/java/rolling/application/company/outport/CommandCompanyPort.java new file mode 100644 index 00000000..6e413d44 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/outport/CommandCompanyPort.java @@ -0,0 +1,16 @@ +package rolling.application.company.outport; + +import rolling.domain.company.model.Company; +import rolling.domain.company.model.CompanyId; + +import java.util.List; + +public interface CommandCompanyPort { + + Company save(Company company); + + void updateAll(List companyList); + + void deleteById(CompanyId companyId); + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/company/outport/QueryCompanyPort.java b/rolling-core/application/src/main/java/rolling/application/company/outport/QueryCompanyPort.java new file mode 100644 index 00000000..11f2d816 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/company/outport/QueryCompanyPort.java @@ -0,0 +1,38 @@ +package rolling.application.company.outport; + +import rolling.application.company.interactor.query.CompanyQueryResponse; +import rolling.domain.common.model.PageRequest; +import rolling.domain.company.exception.CompanyNotFoundException; +import rolling.domain.company.model.Company; + +import java.util.List; +import java.util.Optional; + +public interface QueryCompanyPort { + + boolean existsBy(Long id); + boolean existsBy(String name); + + Optional findBy(Long id); + + default Company getBy(final Long id) { + return findBy(id) + .orElseThrow(() -> CompanyNotFoundException.EXCEPTION); + } + + Optional findInfoBy(Long id); + + default CompanyQueryResponse getInfoBy(final Long id) { + return findInfoBy(id) + .orElseThrow(() -> CompanyNotFoundException.EXCEPTION); + } + + List getOrderBy(String gradeType); + + List searchByName(String name, PageRequest pageRequest); + + List getByRegistrant(Long registrantId, PageRequest pageRequest); + + List getAll(PageRequest pageRequest); + +} \ No newline at end of file diff --git a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileResponse.java b/rolling-core/application/src/main/java/rolling/application/file/interactor/FileResponse.java similarity index 80% rename from Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileResponse.java rename to rolling-core/application/src/main/java/rolling/application/file/interactor/FileResponse.java index cbb35728..0fc68b4e 100644 --- a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/usecases/FileResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/file/interactor/FileResponse.java @@ -1,4 +1,4 @@ -package com.stubee.fileapplication.usecases; +package rolling.application.file.interactor; public record FileResponse( String url, diff --git a/rolling-core/application/src/main/java/rolling/application/file/interactor/UploadFileUseCase.java b/rolling-core/application/src/main/java/rolling/application/file/interactor/UploadFileUseCase.java new file mode 100644 index 00000000..bc3ffeeb --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/file/interactor/UploadFileUseCase.java @@ -0,0 +1,28 @@ +package rolling.application.file.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; +import rolling.application.file.outport.UploadFilePort; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class UploadFileUseCase { + + private final UploadFilePort uploadFilePort; + + public FileResponse upload(final MultipartFile multipartFile) { + return uploadFilePort.upload(multipartFile); + } + + public List upload(final List multipartFileList) { + return uploadFilePort.uploadList(multipartFileList); + } + + public void delete(final String path) { + uploadFilePort.delete(path); + } + +} \ No newline at end of file diff --git a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/outports/UploadImagePort.java b/rolling-core/application/src/main/java/rolling/application/file/outport/UploadFilePort.java similarity index 64% rename from Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/outports/UploadImagePort.java rename to rolling-core/application/src/main/java/rolling/application/file/outport/UploadFilePort.java index 4d89bb1d..f19c4f1e 100644 --- a/Rolling-Application/file-application/src/main/java/com/stubee/fileapplication/outports/UploadImagePort.java +++ b/rolling-core/application/src/main/java/rolling/application/file/outport/UploadFilePort.java @@ -1,11 +1,11 @@ -package com.stubee.fileapplication.outports; +package rolling.application.file.outport; -import com.stubee.fileapplication.usecases.FileResponse; import org.springframework.web.multipart.MultipartFile; +import rolling.application.file.interactor.FileResponse; import java.util.List; -public interface UploadImagePort { +public interface UploadFilePort { FileResponse upload(MultipartFile multipartFile); diff --git a/rolling-core/application/src/main/java/rolling/application/logging/interactor/CompanyViewLoggingEventListener.java b/rolling-core/application/src/main/java/rolling/application/logging/interactor/CompanyViewLoggingEventListener.java new file mode 100644 index 00000000..d04d1297 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/logging/interactor/CompanyViewLoggingEventListener.java @@ -0,0 +1,40 @@ +package rolling.application.logging.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.logging.outport.CommandLoggingPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.company.events.CompanyViewedEvent; +import rolling.domain.company.model.CompanyId; +import rolling.domain.logging.model.CompanyViewLogging; +import rolling.domain.member.model.MemberId; + +@Component +@RequiredArgsConstructor +class CompanyViewLoggingEventListener { + + private final CommandLoggingPort commandLoggingPort; + private final MemberSessionPort memberSessionPort; + + @Async + @Transactional + @EventListener + public void listen(final CompanyViewedEvent event) { + MemberId memberId; + + try { + memberId = memberSessionPort.currentId(); + } catch (Exception e) { + memberId = MemberId.of(-1L); + } + + commandLoggingPort.save(CompanyViewLogging.ExceptIdBuilder() + .memberId(memberId) + .companyId(CompanyId.of(event.companyId())) + .build()); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/logging/interactor/PileUpHistoryLoggingUseCase.java b/rolling-core/application/src/main/java/rolling/application/logging/interactor/PileUpHistoryLoggingUseCase.java new file mode 100644 index 00000000..7d26d70a --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/logging/interactor/PileUpHistoryLoggingUseCase.java @@ -0,0 +1,21 @@ +package rolling.application.logging.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.logging.outport.CommandLoggingPort; +import rolling.application.logging.outport.PileUpHistoryLoggingCommand; +import rolling.domain.logging.model.HistoryLogging; + +@Component +@Transactional +@RequiredArgsConstructor +public class PileUpHistoryLoggingUseCase { + + private final CommandLoggingPort commandLoggingPort; + + public HistoryLogging pileUp(final PileUpHistoryLoggingCommand command) { + return commandLoggingPort.save(command.toDomain()); + } + +} \ No newline at end of file diff --git a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/CommandLoggingPort.java b/rolling-core/application/src/main/java/rolling/application/logging/outport/CommandLoggingPort.java similarity index 58% rename from Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/CommandLoggingPort.java rename to rolling-core/application/src/main/java/rolling/application/logging/outport/CommandLoggingPort.java index 934e5b71..be1fe288 100644 --- a/Rolling-Application/logging-application/src/main/java/com/stubee/loggingapplication/outports/CommandLoggingPort.java +++ b/rolling-core/application/src/main/java/rolling/application/logging/outport/CommandLoggingPort.java @@ -1,4 +1,4 @@ -package com.stubee.loggingapplication.outports; +package rolling.application.logging.outport; public interface CommandLoggingPort { diff --git a/rolling-core/application/src/main/java/rolling/application/logging/outport/PileUpHistoryLoggingCommand.java b/rolling-core/application/src/main/java/rolling/application/logging/outport/PileUpHistoryLoggingCommand.java new file mode 100644 index 00000000..72c8b538 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/logging/outport/PileUpHistoryLoggingCommand.java @@ -0,0 +1,17 @@ +package rolling.application.logging.outport; + +import rolling.domain.logging.model.HistoryLogging; +import rolling.domain.member.model.MemberId; + +public record PileUpHistoryLoggingCommand( + String description, + String module, + Long memberId) { + public HistoryLogging toDomain() { + return HistoryLogging.ExceptIdBuilder() + .description(description) + .module(module) + .memberId(MemberId.of(memberId)) + .build(); + } +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/mail/interactor/MailEventListener.java b/rolling-core/application/src/main/java/rolling/application/mail/interactor/MailEventListener.java new file mode 100644 index 00000000..e575b4b5 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/mail/interactor/MailEventListener.java @@ -0,0 +1,25 @@ +package rolling.application.mail.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionalEventListener; +import rolling.application.mail.outport.SendMailPort; +import rolling.domain.member.events.MemberRegisteredEvent; + +@Component +@RequiredArgsConstructor +class MailEventListener { + + private final SendMailPort sendEmailPort; + + @Async + @Transactional(propagation = Propagation.NEVER) + @TransactionalEventListener + public void listen(final MemberRegisteredEvent event) { + sendEmailPort.sendWelcome(event.receiverEmail()); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/mail/outport/SendMailPort.java b/rolling-core/application/src/main/java/rolling/application/mail/outport/SendMailPort.java new file mode 100644 index 00000000..f5134572 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/mail/outport/SendMailPort.java @@ -0,0 +1,7 @@ +package rolling.application.mail.outport; + +public interface SendMailPort { + + void sendWelcome(String receiver); + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/member/interactor/MemberServiceImpl.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/MemberServiceImpl.java new file mode 100644 index 00000000..4f65968c --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/MemberServiceImpl.java @@ -0,0 +1,18 @@ +package rolling.application.member.interactor; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import rolling.application.member.outport.QueryMemberPort; +import rolling.domain.member.service.MemberService; + +@Service +@RequiredArgsConstructor +class MemberServiceImpl implements MemberService { + + private final QueryMemberPort queryMemberPort; + + public boolean isNicknameDuplicate(final String nickname) { + return queryMemberPort.existsBy(nickname); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/member/interactor/command/MemberEventListener.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/MemberEventListener.java new file mode 100644 index 00000000..357db2d9 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/MemberEventListener.java @@ -0,0 +1,31 @@ +package rolling.application.member.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.CommandMemberPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.member.events.MemberCertifiedEvent; +import rolling.domain.member.model.Member; + +@Component +@RequiredArgsConstructor +class MemberEventListener { + + private final MemberSessionPort memberSessionPort; + private final CommandMemberPort commandMemberPort; + + @Async + @Transactional + @EventListener + public void listen(final MemberCertifiedEvent event) { + final Member member = memberSessionPort.current(); + + member.elevateToMember(); + + commandMemberPort.saveWithId(member); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameCommand.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameCommand.java new file mode 100644 index 00000000..56290dbf --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameCommand.java @@ -0,0 +1,3 @@ +package rolling.application.member.interactor.command; + +public record ModifyNicknameCommand(String nickname) {} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameUseCase.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameUseCase.java new file mode 100644 index 00000000..10c9f8b7 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/command/ModifyNicknameUseCase.java @@ -0,0 +1,28 @@ +package rolling.application.member.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.CommandMemberPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.domain.member.model.Member; +import rolling.domain.member.service.MemberService; + +@Component +@Transactional +@RequiredArgsConstructor +public class ModifyNicknameUseCase { + + private final MemberSessionPort memberSessionPort; + private final CommandMemberPort commandMemberPort; + private final MemberService memberService; + + public void modify(final ModifyNicknameCommand command) { + final Member member = memberSessionPort.current(); + + member.modifyNickname(command.nickname(), memberService); + + commandMemberPort.saveWithId(member); + } + +} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/MemberResponse.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/query/MemberResponse.java similarity index 50% rename from Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/MemberResponse.java rename to rolling-core/application/src/main/java/rolling/application/member/interactor/query/MemberResponse.java index 95516a22..7787fadc 100644 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/usecases/query/MemberResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/query/MemberResponse.java @@ -1,9 +1,9 @@ -package com.stubee.memberapplication.usecases.query; +package rolling.application.member.interactor.query; -import com.stubee.rollingdomains.common.model.TSID; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberDetails; -import com.stubee.rollingdomains.domain.member.model.SocialDetails; +import rolling.domain.common.model.TSID; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberDetails; +import rolling.domain.member.model.SocialDetails; public record MemberResponse( TSID memberId, diff --git a/rolling-core/application/src/main/java/rolling/application/member/interactor/query/QueryMemberInfoUseCase.java b/rolling-core/application/src/main/java/rolling/application/member/interactor/query/QueryMemberInfoUseCase.java new file mode 100644 index 00000000..89c0b35a --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/interactor/query/QueryMemberInfoUseCase.java @@ -0,0 +1,25 @@ +package rolling.application.member.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.member.outport.QueryMemberPort; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryMemberInfoUseCase { + + private final MemberSessionPort memberSessionPort; + private final QueryMemberPort queryMemberPort; + + public MemberResponse query() { + return MemberResponse.of(memberSessionPort.current()); + } + + public MemberResponse query(final Long memberId) { + return MemberResponse.of(queryMemberPort.getBy(memberId)); + } + +} \ No newline at end of file diff --git a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CommandMemberPort.java b/rolling-core/application/src/main/java/rolling/application/member/outport/CommandMemberPort.java similarity index 50% rename from Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CommandMemberPort.java rename to rolling-core/application/src/main/java/rolling/application/member/outport/CommandMemberPort.java index 085e6696..e6063fb5 100644 --- a/Rolling-Application/member-application/src/main/java/com/stubee/memberapplication/outports/CommandMemberPort.java +++ b/rolling-core/application/src/main/java/rolling/application/member/outport/CommandMemberPort.java @@ -1,7 +1,7 @@ -package com.stubee.memberapplication.outports; +package rolling.application.member.outport; -import com.stubee.rollingdomains.domain.member.model.Member; -import com.stubee.rollingdomains.domain.member.model.MemberProfile; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberProfile; public interface CommandMemberPort { diff --git a/rolling-core/application/src/main/java/rolling/application/member/outport/MemberSessionPort.java b/rolling-core/application/src/main/java/rolling/application/member/outport/MemberSessionPort.java new file mode 100644 index 00000000..838933be --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/outport/MemberSessionPort.java @@ -0,0 +1,12 @@ +package rolling.application.member.outport; + +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberId; + +public interface MemberSessionPort { + + Member current(); + + MemberId currentId(); + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/member/outport/QueryMemberPort.java b/rolling-core/application/src/main/java/rolling/application/member/outport/QueryMemberPort.java new file mode 100644 index 00000000..4b96c552 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/member/outport/QueryMemberPort.java @@ -0,0 +1,19 @@ +package rolling.application.member.outport; + +import rolling.domain.member.exception.MemberNotFoundException; +import rolling.domain.member.model.Member; + +import java.util.Optional; + +public interface QueryMemberPort { + + Optional findBy(Long id); + + default Member getBy(final Long id) { + return findBy(id) + .orElseThrow(() -> MemberNotFoundException.EXCEPTION); + } + + boolean existsBy(String nickname); + +} \ No newline at end of file diff --git a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NaverNewsResponse.java b/rolling-core/application/src/main/java/rolling/application/news/interactor/NaverNewsResponse.java similarity index 88% rename from Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NaverNewsResponse.java rename to rolling-core/application/src/main/java/rolling/application/news/interactor/NaverNewsResponse.java index 3b932b22..1bf338f0 100644 --- a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/usecases/NaverNewsResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/news/interactor/NaverNewsResponse.java @@ -1,4 +1,4 @@ -package com.stubee.newsapplication.usecases; +package rolling.application.news.interactor; import java.util.List; diff --git a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/outports/NewsPort.java b/rolling-core/application/src/main/java/rolling/application/news/outport/NewsPort.java similarity index 58% rename from Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/outports/NewsPort.java rename to rolling-core/application/src/main/java/rolling/application/news/outport/NewsPort.java index 37a9436c..08668485 100644 --- a/Rolling-Application/news-application/src/main/java/com/stubee/newsapplication/outports/NewsPort.java +++ b/rolling-core/application/src/main/java/rolling/application/news/outport/NewsPort.java @@ -1,7 +1,7 @@ -package com.stubee.newsapplication.outports; +package rolling.application.news.outport; -import com.stubee.rollingdomains.common.model.PageRequest; import reactor.core.publisher.Mono; +import rolling.domain.common.model.PageRequest; public interface NewsPort { diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryCommand.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryCommand.java new file mode 100644 index 00000000..aa031820 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryCommand.java @@ -0,0 +1,5 @@ +package rolling.application.story.interactor.command; + +import rolling.domain.story.model.StoryId; + +public record DeleteStoryCommand(StoryId storyId) {} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryUseCase.java new file mode 100644 index 00000000..87171cc5 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/DeleteStoryUseCase.java @@ -0,0 +1,30 @@ +package rolling.application.story.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.story.outport.CommandStoryPort; +import rolling.application.story.outport.QueryStoryPort; +import rolling.domain.member.model.MemberId; +import rolling.domain.story.model.Story; + +@Component +@Transactional +@RequiredArgsConstructor +public class DeleteStoryUseCase { + + private final CommandStoryPort commandStoryPort; + private final QueryStoryPort queryStoryPort; + private final MemberSessionPort memberSessionPort; + + public void delete(final DeleteStoryCommand command) { + final MemberId memberId = memberSessionPort.currentId(); + final Story story = queryStoryPort.getBy(command.storyId().getId()); + + story.isAuthor(memberId); + + commandStoryPort.deleteById(story.storyId()); + } + +} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryCommand.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryCommand.java similarity index 81% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryCommand.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryCommand.java index e0013887..d8c9045a 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/ModifyStoryCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryCommand.java @@ -1,6 +1,6 @@ -package com.stubee.reviewapplication.usecases.command; +package rolling.application.story.interactor.command; -import com.stubee.rollingdomains.domain.story.model.StoryId; +import rolling.domain.story.model.StoryId; public record ModifyStoryCommand( StoryId id, diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryUseCase.java new file mode 100644 index 00000000..0a29a512 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/ModifyStoryUseCase.java @@ -0,0 +1,34 @@ +package rolling.application.story.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.story.outport.CommandStoryPort; +import rolling.application.story.outport.QueryStoryPort; +import rolling.domain.story.model.CorporationDetails; +import rolling.domain.story.model.EmploymentDetails; +import rolling.domain.story.model.ReviewGrades; +import rolling.domain.story.model.Story; + +@Component +@Transactional +@RequiredArgsConstructor +public class ModifyStoryUseCase { + + private final CommandStoryPort commandStoryPort; + private final QueryStoryPort queryStoryPort; + private final MemberSessionPort memberSessionPort; + + public void modify(final ModifyStoryCommand command) { + final EmploymentDetails employmentDetails = StoryMapper.toEmploymentDetails(command); + final CorporationDetails corporationDetails = StoryMapper.toCorporationDetails(command); + final ReviewGrades reviewGrades = StoryMapper.toReviewGrades(command); + final Story story = queryStoryPort.getBy(command.id().getId()); + + story.modify(employmentDetails, corporationDetails, reviewGrades, memberSessionPort.currentId()); + + commandStoryPort.save(story); + } + +} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryCommand.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryCommand.java similarity index 97% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryCommand.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryCommand.java index 3ea6391e..240af00b 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/RegisterStoryCommand.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryCommand.java @@ -1,4 +1,4 @@ -package com.stubee.reviewapplication.usecases.command; +package rolling.application.story.interactor.command; public record RegisterStoryCommand( Long companyId, diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryUseCase.java new file mode 100644 index 00000000..d0209bc4 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/RegisterStoryUseCase.java @@ -0,0 +1,33 @@ +package rolling.application.story.interactor.command; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.company.outport.QueryCompanyPort; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.story.outport.CommandStoryPort; +import rolling.domain.company.exception.CompanyNotFoundException; +import rolling.domain.member.model.MemberId; +import rolling.domain.story.model.Story; + +@Component +@Transactional +@RequiredArgsConstructor +public class RegisterStoryUseCase { + + private final QueryCompanyPort queryCompanyPort; + private final CommandStoryPort commandStoryPort; + private final MemberSessionPort memberSessionPort; + + public Story register(final RegisterStoryCommand command) { + if(!queryCompanyPort.existsBy(command.companyId())) { + throw CompanyNotFoundException.EXCEPTION; + } + + final MemberId memberId = memberSessionPort.currentId(); + final Story story = StoryMapper.toDomain(command, memberId); + + return commandStoryPort.save(story); + } + +} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/StoryMapper.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/StoryMapper.java similarity index 74% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/StoryMapper.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/command/StoryMapper.java index 5f7ac65e..8d8faf22 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/command/impl/StoryMapper.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/command/StoryMapper.java @@ -1,16 +1,14 @@ -package com.stubee.reviewapplication.usecases.command.impl; +package rolling.application.story.interactor.command; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.domain.member.model.MemberId; -import com.stubee.rollingdomains.domain.story.model.*; -import com.stubee.reviewapplication.usecases.command.RegisterStoryCommand; -import com.stubee.reviewapplication.usecases.command.ModifyStoryCommand; +import rolling.domain.company.model.CompanyId; +import rolling.domain.member.model.MemberId; +import rolling.domain.story.model.*; -public abstract class StoryMapper { +abstract class StoryMapper { - public static Story toDomain(final RegisterStoryCommand command, final MemberId memberId) { + static Story toDomain(final RegisterStoryCommand command, final MemberId memberId) { return Story.ExceptIdBuilder() - .storyDetails(StoryDetails.ExceptDateBuilder() + .storyDetails(StoryDetails.builder() .authorId(AuthorId.of(memberId)) .companyId(CompanyId.of(command.companyId())) .employmentDetails(EmploymentDetails.builder() @@ -30,7 +28,7 @@ public static Story toDomain(final RegisterStoryCommand command, final MemberId .etc(command.corporationEtc()) .build()) .build()) - .reviewGrades(ReviewGrades.ExceptTotalBuilder() + .reviewGrades(ReviewGrades.builder() .salaryAndBenefits(Double.valueOf(command.salaryAndBenefits())) .workLifeBalance(Double.valueOf(command.workLifeBalance())) .organizationalCulture(Double.valueOf(command.organizationalCulture())) @@ -39,7 +37,7 @@ public static Story toDomain(final RegisterStoryCommand command, final MemberId .build(); } - public static EmploymentDetails toEmploymentDetails(final ModifyStoryCommand command) { + static EmploymentDetails toEmploymentDetails(final ModifyStoryCommand command) { return EmploymentDetails.builder() .schoolLife(command.schoolLife()) .preparationCourse(command.preparationCourse()) @@ -49,7 +47,7 @@ public static EmploymentDetails toEmploymentDetails(final ModifyStoryCommand com .build(); } - public static CorporationDetails toCorporationDetails(final ModifyStoryCommand command) { + static CorporationDetails toCorporationDetails(final ModifyStoryCommand command) { return CorporationDetails.builder() .position(command.position()) .welfare(command.welfare()) @@ -61,8 +59,8 @@ public static CorporationDetails toCorporationDetails(final ModifyStoryCommand c .build(); } - public static ReviewGrades toReviewGrades(final ModifyStoryCommand command) { - return ReviewGrades.ExceptTotalBuilder() + static ReviewGrades toReviewGrades(final ModifyStoryCommand command) { + return ReviewGrades.builder() .salaryAndBenefits(Double.valueOf(command.salaryAndBenefits())) .workLifeBalance(Double.valueOf(command.workLifeBalance())) .organizationalCulture(Double.valueOf(command.organizationalCulture())) diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryMyStoryStatusUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryMyStoryStatusUseCase.java new file mode 100644 index 00000000..d35e9d5c --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryMyStoryStatusUseCase.java @@ -0,0 +1,23 @@ +package rolling.application.story.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.story.outport.QueryStoryPort; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryMyStoryStatusUseCase { + + private final MemberSessionPort memberSessionPort; + private final QueryStoryPort queryStoryPort; + + public StoryStatusResponse query() { + final Long memberId = memberSessionPort.currentId().getId(); + + return queryStoryPort.getStatusBy(memberId); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByCompanyUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByCompanyUseCase.java new file mode 100644 index 00000000..2bc7df21 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByCompanyUseCase.java @@ -0,0 +1,25 @@ +package rolling.application.story.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.common.response.PageDataResponse; +import rolling.application.story.outport.QueryStoryPort; +import rolling.domain.common.model.PageRequest; + +import java.util.List; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryStoryByCompanyUseCase { + + private final QueryStoryPort queryStoryPort; + + public PageDataResponse> query(Long companyId, PageRequest pageRequest) { + pageRequest.validate(); + + return PageDataResponse.of(queryStoryPort.findByCompany(companyId, pageRequest)); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByMemberUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByMemberUseCase.java new file mode 100644 index 00000000..cfa14686 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryByMemberUseCase.java @@ -0,0 +1,33 @@ +package rolling.application.story.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.common.response.PageDataResponse; +import rolling.application.member.outport.MemberSessionPort; +import rolling.application.story.outport.QueryStoryPort; +import rolling.domain.common.model.PageRequest; + +import java.util.List; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryStoryByMemberUseCase { + + private final MemberSessionPort memberSessionPort; + private final QueryStoryPort queryStoryPort; + + public PageDataResponse> query(final PageRequest pageRequest) { + final Long memberId = memberSessionPort.currentId().getId(); + + return query(memberId, pageRequest); + } + + public PageDataResponse> query(final Long memberId, final PageRequest pageRequest) { + pageRequest.validate(); + + return PageDataResponse.of(queryStoryPort.findByMember(memberId, pageRequest)); + } + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryInfoUseCase.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryInfoUseCase.java new file mode 100644 index 00000000..0cc5d9dd --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/QueryStoryInfoUseCase.java @@ -0,0 +1,19 @@ +package rolling.application.story.interactor.query; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import rolling.application.story.outport.QueryStoryPort; + +@Component +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class QueryStoryInfoUseCase { + + private final QueryStoryPort queryStoryPort; + + public StoryQueryByCompanyResponse query(final Long reviewId) { + return queryStoryPort.getInfoBy(reviewId); + } + +} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByCompanyResponse.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByCompanyResponse.java similarity index 93% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByCompanyResponse.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByCompanyResponse.java index 4abd3176..5e9c8ef8 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByCompanyResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByCompanyResponse.java @@ -1,4 +1,4 @@ -package com.stubee.reviewapplication.usecases.query; +package rolling.application.story.interactor.query; import java.time.LocalDateTime; diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByMemberResponse.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByMemberResponse.java similarity index 84% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByMemberResponse.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByMemberResponse.java index a9e29155..3f94e785 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryQueryByMemberResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryQueryByMemberResponse.java @@ -1,4 +1,4 @@ -package com.stubee.reviewapplication.usecases.query; +package rolling.application.story.interactor.query; import java.time.LocalDateTime; @@ -29,6 +29,4 @@ public record StoryQueryByMemberResponse( String companyId, String companyName, - String companyImgUrl/*, - - EmploymentStatus employmentStatus*/) {} \ No newline at end of file + String companyImgUrl) {} \ No newline at end of file diff --git a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryStatusResponse.java b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryStatusResponse.java similarity index 71% rename from Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryStatusResponse.java rename to rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryStatusResponse.java index 7ab16b66..c0c0bf17 100644 --- a/Rolling-Application/review-application/src/main/java/com/stubee/reviewapplication/usecases/query/StoryStatusResponse.java +++ b/rolling-core/application/src/main/java/rolling/application/story/interactor/query/StoryStatusResponse.java @@ -1,4 +1,4 @@ -package com.stubee.reviewapplication.usecases.query; +package rolling.application.story.interactor.query; import java.time.LocalDateTime; diff --git a/rolling-core/application/src/main/java/rolling/application/story/outport/CommandStoryPort.java b/rolling-core/application/src/main/java/rolling/application/story/outport/CommandStoryPort.java new file mode 100644 index 00000000..f86dfa59 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/outport/CommandStoryPort.java @@ -0,0 +1,14 @@ +package rolling.application.story.outport; + +import rolling.domain.story.model.Story; +import rolling.domain.story.model.StoryId; + +public interface CommandStoryPort { + + Story save(Story story); + + Story update(Story story); + + void deleteById(StoryId storyId); + +} \ No newline at end of file diff --git a/rolling-core/application/src/main/java/rolling/application/story/outport/QueryStoryPort.java b/rolling-core/application/src/main/java/rolling/application/story/outport/QueryStoryPort.java new file mode 100644 index 00000000..ffb7e8b6 --- /dev/null +++ b/rolling-core/application/src/main/java/rolling/application/story/outport/QueryStoryPort.java @@ -0,0 +1,35 @@ +package rolling.application.story.outport; + +import rolling.application.story.interactor.query.StoryQueryByCompanyResponse; +import rolling.application.story.interactor.query.StoryQueryByMemberResponse; +import rolling.application.story.interactor.query.StoryStatusResponse; +import rolling.domain.common.model.PageRequest; +import rolling.domain.story.exception.StoryNotFoundException; +import rolling.domain.story.model.Story; + +import java.util.List; +import java.util.Optional; + +public interface QueryStoryPort { + + Optional findBy(Long id); + + default Story getBy(final Long id) { + return findBy(id) + .orElseThrow(() -> StoryNotFoundException.EXCEPTION); + } + + Optional findInfoBy(Long id); + + default StoryQueryByCompanyResponse getInfoBy(final Long id) { + return findInfoBy(id) + .orElseThrow(() -> StoryNotFoundException.EXCEPTION); + } + + StoryStatusResponse getStatusBy(Long memberId); + + List findByMember(Long memberId, PageRequest pageRequest); + + List findByCompany(Long companyId, PageRequest pageRequest); + +} \ No newline at end of file diff --git a/Rolling-Adapters/build.gradle b/rolling-core/build.gradle similarity index 100% rename from Rolling-Adapters/build.gradle rename to rolling-core/build.gradle diff --git a/Rolling-Adapters/thirdparty/build.gradle b/rolling-core/domain/build.gradle similarity index 100% rename from Rolling-Adapters/thirdparty/build.gradle rename to rolling-core/domain/build.gradle diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/Assert.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/Assert.java similarity index 80% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/Assert.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/Assert.java index 00773fdc..9659a21b 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/Assert.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/Assert.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.error; +package rolling.domain.common.error; public abstract class Assert { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/CustomException.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/CustomException.java similarity index 80% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/CustomException.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/CustomException.java index 36c7f6bf..1d90e45f 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/CustomException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/CustomException.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.error; +package rolling.domain.common.error; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorCode.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorCode.java similarity index 97% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorCode.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorCode.java index dc85da7a..ed091993 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorCode.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorCode.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.error; +package rolling.domain.common.error; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorResponse.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorResponse.java similarity index 88% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorResponse.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorResponse.java index ea6ae3d6..9ad77cd2 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/ErrorResponse.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/ErrorResponse.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.error; +package rolling.domain.common.error; public record ErrorResponse( int status, diff --git a/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/InternalServerException.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/InternalServerException.java new file mode 100644 index 00000000..00b22578 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/InternalServerException.java @@ -0,0 +1,14 @@ +package rolling.domain.common.error.exception; + +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; + +public class InternalServerException extends CustomException { + + public static final CustomException EXCEPTION = new InternalServerException(); + + private InternalServerException() { + super(ErrorCode.INTERNAL_SERVER_ERROR); + } + +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/NotMatchedIdException.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/NotMatchedIdException.java similarity index 56% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/NotMatchedIdException.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/exception/NotMatchedIdException.java index b1e8d99c..a558759b 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/NotMatchedIdException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/NotMatchedIdException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.common.error.exception; +package rolling.domain.common.error.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class NotMatchedIdException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/WrongCalculationException.java b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/WrongCalculationException.java similarity index 58% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/WrongCalculationException.java rename to rolling-core/domain/src/main/java/rolling/domain/common/error/exception/WrongCalculationException.java index f6e4c5f3..efd47199 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/error/exception/WrongCalculationException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/error/exception/WrongCalculationException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.common.error.exception; +package rolling.domain.common.error.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class WrongCalculationException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/BaseId.java b/rolling-core/domain/src/main/java/rolling/domain/common/model/BaseId.java similarity index 76% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/BaseId.java rename to rolling-core/domain/src/main/java/rolling/domain/common/model/BaseId.java index f9da8c54..2cbab2b8 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/BaseId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/model/BaseId.java @@ -1,10 +1,10 @@ -package com.stubee.rollingdomains.common.model; +package rolling.domain.common.model; -import com.stubee.rollingdomains.common.error.exception.NotMatchedIdException; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; +import rolling.domain.common.error.exception.NotMatchedIdException; @Getter @RequiredArgsConstructor(access = AccessLevel.PROTECTED) diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/Grades.java b/rolling-core/domain/src/main/java/rolling/domain/common/model/Grades.java similarity index 92% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/Grades.java rename to rolling-core/domain/src/main/java/rolling/domain/common/model/Grades.java index 51799e09..3f2df31c 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/Grades.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/model/Grades.java @@ -1,8 +1,8 @@ -package com.stubee.rollingdomains.common.model; +package rolling.domain.common.model; -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.common.error.exception.WrongCalculationException; import lombok.Getter; +import rolling.domain.common.error.Assert; +import rolling.domain.common.error.exception.WrongCalculationException; import java.util.Objects; @@ -17,7 +17,6 @@ public abstract class Grades { protected Grades(Double total, Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { - Assert.notNull(total, "Total must not be null"); assertIfObjectIsNull(salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); this.salaryAndBenefits = salaryAndBenefits; diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/PageRequest.java b/rolling-core/domain/src/main/java/rolling/domain/common/model/PageRequest.java similarity index 90% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/PageRequest.java rename to rolling-core/domain/src/main/java/rolling/domain/common/model/PageRequest.java index 5c2230f9..ea16e221 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/PageRequest.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/model/PageRequest.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.model; +package rolling.domain.common.model; public record PageRequest( Long page, diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/TSID.java b/rolling-core/domain/src/main/java/rolling/domain/common/model/TSID.java similarity index 82% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/TSID.java rename to rolling-core/domain/src/main/java/rolling/domain/common/model/TSID.java index 7830925d..b736731c 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/common/model/TSID.java +++ b/rolling-core/domain/src/main/java/rolling/domain/common/model/TSID.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.common.model; +package rolling.domain.common.model; public record TSID( String id diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/consts/CompanyStatus.java b/rolling-core/domain/src/main/java/rolling/domain/company/consts/CompanyStatus.java similarity index 75% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/consts/CompanyStatus.java rename to rolling-core/domain/src/main/java/rolling/domain/company/consts/CompanyStatus.java index 5b8908b7..f75c03b6 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/consts/CompanyStatus.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/consts/CompanyStatus.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.domain.company.consts; +package rolling.domain.company.consts; public enum CompanyStatus { ACCEPTED, PENDING, DECLINED; diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/events/CompanyViewedEvent.java b/rolling-core/domain/src/main/java/rolling/domain/company/events/CompanyViewedEvent.java similarity index 75% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/events/CompanyViewedEvent.java rename to rolling-core/domain/src/main/java/rolling/domain/company/events/CompanyViewedEvent.java index 9985fb24..bba6d9a8 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/events/CompanyViewedEvent.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/events/CompanyViewedEvent.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.domain.company.events; +package rolling.domain.company.events; public record CompanyViewedEvent( Long companyId) { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/CompanyNotFoundException.java b/rolling-core/domain/src/main/java/rolling/domain/company/exception/CompanyNotFoundException.java similarity index 57% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/CompanyNotFoundException.java rename to rolling-core/domain/src/main/java/rolling/domain/company/exception/CompanyNotFoundException.java index 3b3b706e..7dbef457 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/CompanyNotFoundException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/exception/CompanyNotFoundException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.company.exception; +package rolling.domain.company.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class CompanyNotFoundException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/DuplicatedCompanyNameException.java b/rolling-core/domain/src/main/java/rolling/domain/company/exception/DuplicatedCompanyNameException.java similarity index 59% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/DuplicatedCompanyNameException.java rename to rolling-core/domain/src/main/java/rolling/domain/company/exception/DuplicatedCompanyNameException.java index 1688ef83..db6a08af 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/exception/DuplicatedCompanyNameException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/exception/DuplicatedCompanyNameException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.company.exception; +package rolling.domain.company.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class DuplicatedCompanyNameException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Address.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/Address.java similarity index 69% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Address.java rename to rolling-core/domain/src/main/java/rolling/domain/company/model/Address.java index 7da77cb3..d581f739 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/Address.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/Address.java @@ -1,6 +1,6 @@ -package com.stubee.rollingdomains.domain.company.model; +package rolling.domain.company.model; -import com.stubee.rollingdomains.common.error.Assert; +import rolling.domain.common.error.Assert; public record Address( String address, diff --git a/rolling-core/domain/src/main/java/rolling/domain/company/model/Company.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/Company.java new file mode 100644 index 00000000..e0e31a8b --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/Company.java @@ -0,0 +1,69 @@ +package rolling.domain.company.model; + +import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.company.consts.CompanyStatus; +import rolling.domain.company.exception.DuplicatedCompanyNameException; +import rolling.domain.company.service.CompanyService; +import rolling.domain.member.model.MemberId; + +import java.util.Objects; + +public final class Company { + + private final CompanyId companyId; + private CompanyDetails companyDetails; + private CompanyGrades companyGrades; + + @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") + public Company(CompanyDetails companyDetails, CompanyGrades companyGrades) { + this(null, companyDetails, companyGrades); + } + + @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") + public Company(CompanyId companyId, CompanyDetails companyDetails, CompanyGrades companyGrades) { + Assert.notNull(companyDetails, "CompanyDetails must not be null"); + Assert.notNull(companyGrades, "CompanyGrades must not be null"); + this.companyId = companyId; + this.companyDetails = companyDetails; + this.companyGrades = companyGrades; + } + + public void modify(final CompanyDetails companyDetails, final CompanyService companyService) { + isAuthor(companyDetails.registrantId()); + + if(!Objects.equals(this.companyDetails.name(), companyDetails.name())) { + if(companyService.isNameDuplicate(companyDetails.name())) { + throw DuplicatedCompanyNameException.EXCEPTION; + } + } + + this.companyDetails = this.companyDetails.cover(companyDetails); + } + + public void modify(final CompanyStatus status) { + this.companyDetails = new CompanyDetails(companyDetails.registrantId(), companyDetails.name(), companyDetails.description(), + companyDetails.companyAddress(), companyDetails.companyLogo(), status, companyDetails.createdAt(), companyDetails.modifiedAt()); + } + + public void modify(final CompanyGrades companyGrades) { + this.companyGrades = companyGrades; + } + + public void isAuthor(final MemberId memberId) { + companyDetails.registrantId().isEqual(memberId); + } + + public CompanyId companyId() { + return companyId; + } + + public CompanyDetails companyDetails() { + return companyDetails; + } + + public CompanyGrades companyGrades() { + return companyGrades; + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyDetails.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyDetails.java new file mode 100644 index 00000000..223977d6 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyDetails.java @@ -0,0 +1,30 @@ +package rolling.domain.company.model; + +import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.company.consts.CompanyStatus; + +import java.time.LocalDateTime; + +public record CompanyDetails( + RegistrantId registrantId, + String name, + String description, + Address companyAddress, + CompanyLogo companyLogo, + CompanyStatus companyStatus, + LocalDateTime createdAt, + LocalDateTime modifiedAt) { + @Builder + public CompanyDetails { + } + + CompanyDetails cover(final CompanyDetails companyDetails) { + Assert.notNull(companyDetails.name, "Name must not be null"); + Assert.notNull(companyDetails.companyAddress, "CompanyAddress must not be null"); + Assert.notNull(companyDetails.description, "Description must not be null"); + + return new CompanyDetails(registrantId, companyDetails.name, companyDetails.description, companyDetails.companyAddress, + companyDetails.companyLogo, companyStatus, createdAt, modifiedAt); + } +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyGrades.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyGrades.java similarity index 51% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyGrades.java rename to rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyGrades.java index b4f182f0..a48639df 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyGrades.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyGrades.java @@ -1,24 +1,22 @@ -package com.stubee.rollingdomains.domain.company.model; +package rolling.domain.company.model; -import com.stubee.rollingdomains.common.model.Grades; import lombok.Builder; +import rolling.domain.common.model.Grades; -public class CompanyGrades extends Grades { - - @Builder(builderClassName = "WithTotalBuilder", builderMethodName = "WithTotalBuilder") - public CompanyGrades(Double total, Double salaryAndBenefits, Double workLifeBalance, - Double organizationalCulture, Double careerAdvancement) { - super(total, salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); - } +public final class CompanyGrades extends Grades { @Builder(builderClassName = "ExceptTotalBuilder", builderMethodName = "ExceptTotalBuilder") - public CompanyGrades(Double salaryAndBenefits, Double workLifeBalance, - Double organizationalCulture, Double careerAdvancement) { + public CompanyGrades(Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { super(salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); } + @Builder + public CompanyGrades(Double total, Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { + super(total, salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); + } + public static CompanyGrades zero() { - return new CompanyGrades(0.0, 0.0, 0.0, 0.0, 0.0); + return new CompanyGrades(0.0, 0.0, 0.0, 0.0); } } \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyId.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyId.java similarity index 63% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyId.java rename to rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyId.java index 418530df..9624eb0e 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyId.java @@ -1,6 +1,6 @@ -package com.stubee.rollingdomains.domain.company.model; +package rolling.domain.company.model; -import com.stubee.rollingdomains.common.model.BaseId; +import rolling.domain.common.model.BaseId; public class CompanyId extends BaseId { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyLogo.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyLogo.java similarity index 76% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyLogo.java rename to rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyLogo.java index 35ec22e3..b74d63ad 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/CompanyLogo.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/CompanyLogo.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.domain.company.model; +package rolling.domain.company.model; public record CompanyLogo( String url, diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/RegistrantId.java b/rolling-core/domain/src/main/java/rolling/domain/company/model/RegistrantId.java similarity index 65% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/RegistrantId.java rename to rolling-core/domain/src/main/java/rolling/domain/company/model/RegistrantId.java index 6b9f605f..da1f24de 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/company/model/RegistrantId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/company/model/RegistrantId.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.company.model; +package rolling.domain.company.model; -import com.stubee.rollingdomains.common.model.BaseId; -import com.stubee.rollingdomains.domain.member.model.MemberId; +import rolling.domain.common.model.BaseId; +import rolling.domain.member.model.MemberId; public final class RegistrantId extends MemberId { diff --git a/rolling-core/domain/src/main/java/rolling/domain/company/service/CompanyService.java b/rolling-core/domain/src/main/java/rolling/domain/company/service/CompanyService.java new file mode 100644 index 00000000..37d6e8be --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/company/service/CompanyService.java @@ -0,0 +1,7 @@ +package rolling.domain.company.service; + +public interface CompanyService { + + boolean isNameDuplicate(String name); + +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/CompanyViewLogging.java b/rolling-core/domain/src/main/java/rolling/domain/logging/model/CompanyViewLogging.java similarity index 79% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/CompanyViewLogging.java rename to rolling-core/domain/src/main/java/rolling/domain/logging/model/CompanyViewLogging.java index b36f8370..0b3a2352 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/CompanyViewLogging.java +++ b/rolling-core/domain/src/main/java/rolling/domain/logging/model/CompanyViewLogging.java @@ -1,9 +1,9 @@ -package com.stubee.rollingdomains.logging.model; +package rolling.domain.logging.model; -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.company.model.CompanyId; -import com.stubee.rollingdomains.domain.member.model.MemberId; import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.company.model.CompanyId; +import rolling.domain.member.model.MemberId; import java.time.LocalDateTime; diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/HistoryLogging.java b/rolling-core/domain/src/main/java/rolling/domain/logging/model/HistoryLogging.java similarity index 83% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/HistoryLogging.java rename to rolling-core/domain/src/main/java/rolling/domain/logging/model/HistoryLogging.java index 553dfcbc..49ff83a3 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/logging/model/HistoryLogging.java +++ b/rolling-core/domain/src/main/java/rolling/domain/logging/model/HistoryLogging.java @@ -1,8 +1,8 @@ -package com.stubee.rollingdomains.logging.model; +package rolling.domain.logging.model; -import com.stubee.rollingdomains.common.error.Assert; -import com.stubee.rollingdomains.domain.member.model.MemberId; import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.member.model.MemberId; import java.time.LocalDateTime; diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/consts/LoginType.java b/rolling-core/domain/src/main/java/rolling/domain/member/consts/LoginType.java new file mode 100644 index 00000000..abc0235d --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/consts/LoginType.java @@ -0,0 +1,5 @@ +package rolling.domain.member.consts; + +public enum LoginType { + GITHUB, GOOGLE +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/MemberRole.java b/rolling-core/domain/src/main/java/rolling/domain/member/consts/MemberRole.java similarity index 79% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/MemberRole.java rename to rolling-core/domain/src/main/java/rolling/domain/member/consts/MemberRole.java index 11ca13d3..91190beb 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/consts/MemberRole.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/consts/MemberRole.java @@ -1,4 +1,4 @@ -package com.stubee.rollingdomains.domain.member.consts; +package rolling.domain.member.consts; import lombok.Getter; import lombok.RequiredArgsConstructor; diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/events/MemberCertifiedEvent.java b/rolling-core/domain/src/main/java/rolling/domain/member/events/MemberCertifiedEvent.java new file mode 100644 index 00000000..1a5189a4 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/events/MemberCertifiedEvent.java @@ -0,0 +1,3 @@ +package rolling.domain.member.events; + +public record MemberCertifiedEvent() {} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberRegisteredEvent.java b/rolling-core/domain/src/main/java/rolling/domain/member/events/MemberRegisteredEvent.java similarity index 73% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberRegisteredEvent.java rename to rolling-core/domain/src/main/java/rolling/domain/member/events/MemberRegisteredEvent.java index 987194b3..bbe9ad96 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/events/MemberRegisteredEvent.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/events/MemberRegisteredEvent.java @@ -1,10 +1,10 @@ -package com.stubee.rollingdomains.domain.member.events; +package rolling.domain.member.events; public record MemberRegisteredEvent( String receiverEmail, String title, String content) { - public static MemberRegisteredEvent create(final String receiverEmail) { + public static MemberRegisteredEvent of(final String receiverEmail) { return new MemberRegisteredEvent(receiverEmail, getTitle(), getContent()); } diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/DuplicatedNicknameException.java b/rolling-core/domain/src/main/java/rolling/domain/member/exception/DuplicatedNicknameException.java similarity index 58% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/DuplicatedNicknameException.java rename to rolling-core/domain/src/main/java/rolling/domain/member/exception/DuplicatedNicknameException.java index bfd826a6..fbce4a4d 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/DuplicatedNicknameException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/exception/DuplicatedNicknameException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.member.exception; +package rolling.domain.member.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class DuplicatedNicknameException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/MemberNotFoundException.java b/rolling-core/domain/src/main/java/rolling/domain/member/exception/MemberNotFoundException.java similarity index 57% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/MemberNotFoundException.java rename to rolling-core/domain/src/main/java/rolling/domain/member/exception/MemberNotFoundException.java index b39d03e7..0efb30e2 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/MemberNotFoundException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/exception/MemberNotFoundException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.member.exception; +package rolling.domain.member.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class MemberNotFoundException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/WrongLoginTypeException.java b/rolling-core/domain/src/main/java/rolling/domain/member/exception/WrongLoginTypeException.java similarity index 57% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/WrongLoginTypeException.java rename to rolling-core/domain/src/main/java/rolling/domain/member/exception/WrongLoginTypeException.java index 03cc6647..be51249f 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/exception/WrongLoginTypeException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/exception/WrongLoginTypeException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.member.exception; +package rolling.domain.member.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class WrongLoginTypeException extends CustomException { diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/model/Member.java b/rolling-core/domain/src/main/java/rolling/domain/member/model/Member.java new file mode 100644 index 00000000..64c3d503 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/model/Member.java @@ -0,0 +1,74 @@ +package rolling.domain.member.model; + +import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.consts.MemberRole; +import rolling.domain.member.exception.DuplicatedNicknameException; +import rolling.domain.member.exception.WrongLoginTypeException; +import rolling.domain.member.service.MemberService; + +import java.util.Objects; + +public final class Member { + + private final MemberId memberId; + private SocialDetails socialDetails; + private MemberDetails memberDetails; + + @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") + public Member(SocialDetails socialDetails, MemberDetails memberDetails) { + this(null, socialDetails, memberDetails); + } + + @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") + public Member(MemberId memberId, SocialDetails socialDetails, MemberDetails memberDetails) { + Assert.notNull(socialDetails, "SocialDetails must not be null"); + Assert.notNull(memberDetails, "MemberDetails must not be null"); + this.memberId = memberId; + this.socialDetails = socialDetails; + this.memberDetails = memberDetails; + } + + public void modifyLoginId(final String socialLoginId, final LoginType loginType) { + isEqualLoginType(loginType); + + this.socialDetails = new SocialDetails(socialDetails.socialId(), socialLoginId, socialDetails.loginType(), + socialDetails.name(), socialDetails.email(), socialDetails.imageUrl()); + } + + public void modifyNickname(final String nickname, final MemberService memberService) { + if(!Objects.equals(memberDetails.nickName(), nickname)) { + if(memberService.isNicknameDuplicate(nickname)) { + throw DuplicatedNicknameException.EXCEPTION; + } + } + + this.memberDetails = new MemberDetails(nickname, memberDetails.memberRole(), + memberDetails.createdAt(), memberDetails.modifiedAt()); + } + + public void elevateToMember() { + this.memberDetails = new MemberDetails(memberDetails.nickName(), MemberRole.MEMBER, + memberDetails.createdAt(), memberDetails.modifiedAt()); + } + + private void isEqualLoginType(final LoginType loginType) { + if (socialDetails.loginType() != loginType) { + throw WrongLoginTypeException.EXCEPTION; + } + } + + public MemberId memberId() { + return memberId; + } + + public SocialDetails socialDetails() { + return socialDetails; + } + + public MemberDetails memberDetails() { + return memberDetails; + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberDetails.java b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberDetails.java new file mode 100644 index 00000000..9c9e602f --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberDetails.java @@ -0,0 +1,12 @@ +package rolling.domain.member.model; + +import rolling.domain.member.consts.MemberRole; + +import java.time.LocalDateTime; + +public record MemberDetails( + String nickName, + MemberRole memberRole, + LocalDateTime createdAt, + LocalDateTime modifiedAt) { +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberId.java b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberId.java similarity index 77% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberId.java rename to rolling-core/domain/src/main/java/rolling/domain/member/model/MemberId.java index 3a01ad2a..6d7d5add 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberId.java @@ -1,6 +1,6 @@ -package com.stubee.rollingdomains.domain.member.model; +package rolling.domain.member.model; -import com.stubee.rollingdomains.common.model.BaseId; +import rolling.domain.common.model.BaseId; public class MemberId extends BaseId { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberProfile.java b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberProfile.java similarity index 60% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberProfile.java rename to rolling-core/domain/src/main/java/rolling/domain/member/model/MemberProfile.java index b574c746..941d79b5 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/member/model/MemberProfile.java +++ b/rolling-core/domain/src/main/java/rolling/domain/member/model/MemberProfile.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.member.model; +package rolling.domain.member.model; -import com.stubee.rollingdomains.domain.member.consts.LoginType; -import com.stubee.rollingdomains.domain.member.consts.MemberRole; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.consts.MemberRole; public record MemberProfile ( String socialId, @@ -13,7 +13,7 @@ public record MemberProfile ( LoginType loginType) { public Member toMember() { return Member.ExceptIdBuilder() - .socialDetails(SocialDetails.AllArgsBuilder() + .socialDetails(SocialDetails.builder() .socialId(socialId) .socialLoginId(socialLoginId) .loginType(loginType) @@ -21,9 +21,7 @@ public Member toMember() { .email(email) .imageUrl(imageUrl) .build()) - .memberDetails(MemberDetails.OnlyWithRoleBuilder() - .memberRole(memberRole) - .build()) + .memberDetails(new MemberDetails(null, memberRole, null, null)) .build(); } } \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/model/SocialDetails.java b/rolling-core/domain/src/main/java/rolling/domain/member/model/SocialDetails.java new file mode 100644 index 00000000..edeb8f22 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/model/SocialDetails.java @@ -0,0 +1,16 @@ +package rolling.domain.member.model; + +import lombok.Builder; +import rolling.domain.member.consts.LoginType; + +public record SocialDetails( + String socialId, + String socialLoginId, + LoginType loginType, + String name, + String email, + String imageUrl) { + @Builder + public SocialDetails { + } +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/member/service/MemberService.java b/rolling-core/domain/src/main/java/rolling/domain/member/service/MemberService.java new file mode 100644 index 00000000..9a429a39 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/member/service/MemberService.java @@ -0,0 +1,7 @@ +package rolling.domain.member.service; + +public interface MemberService { + + boolean isNicknameDuplicate(String nickname); + +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/exception/StoryNotFoundException.java b/rolling-core/domain/src/main/java/rolling/domain/story/exception/StoryNotFoundException.java similarity index 57% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/exception/StoryNotFoundException.java rename to rolling-core/domain/src/main/java/rolling/domain/story/exception/StoryNotFoundException.java index 4a4744be..1cd9ba4c 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/exception/StoryNotFoundException.java +++ b/rolling-core/domain/src/main/java/rolling/domain/story/exception/StoryNotFoundException.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.story.exception; +package rolling.domain.story.exception; -import com.stubee.rollingdomains.common.error.CustomException; -import com.stubee.rollingdomains.common.error.ErrorCode; +import rolling.domain.common.error.CustomException; +import rolling.domain.common.error.ErrorCode; public class StoryNotFoundException extends CustomException { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/AuthorId.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/AuthorId.java similarity index 63% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/AuthorId.java rename to rolling-core/domain/src/main/java/rolling/domain/story/model/AuthorId.java index 3d9d1142..81f14dbd 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/AuthorId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/AuthorId.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.story.model; +package rolling.domain.story.model; -import com.stubee.rollingdomains.common.model.BaseId; -import com.stubee.rollingdomains.domain.member.model.MemberId; +import rolling.domain.common.model.BaseId; +import rolling.domain.member.model.MemberId; public final class AuthorId extends MemberId { diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/CorporationDetails.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/CorporationDetails.java similarity index 82% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/CorporationDetails.java rename to rolling-core/domain/src/main/java/rolling/domain/story/model/CorporationDetails.java index db753d4a..1ace761f 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/CorporationDetails.java +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/CorporationDetails.java @@ -1,7 +1,7 @@ -package com.stubee.rollingdomains.domain.story.model; +package rolling.domain.story.model; -import com.stubee.rollingdomains.common.error.Assert; import lombok.Builder; +import rolling.domain.common.error.Assert; public record CorporationDetails( String position, diff --git a/rolling-core/domain/src/main/java/rolling/domain/story/model/EmploymentDetails.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/EmploymentDetails.java new file mode 100644 index 00000000..b0c5e51c --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/EmploymentDetails.java @@ -0,0 +1,14 @@ +package rolling.domain.story.model; + +import lombok.Builder; + +public record EmploymentDetails( + String schoolLife, + String preparationCourse, + String employmentProcess, + String interviewQuestion, + String mostImportantThing) { + @Builder + public EmploymentDetails { + } +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/story/model/ReviewGrades.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/ReviewGrades.java new file mode 100644 index 00000000..00d0a9d8 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/ReviewGrades.java @@ -0,0 +1,13 @@ +package rolling.domain.story.model; + +import lombok.Builder; +import rolling.domain.common.model.Grades; + +public final class ReviewGrades extends Grades { + + @Builder + public ReviewGrades(Double total, Double salaryAndBenefits, Double workLifeBalance, Double organizationalCulture, Double careerAdvancement) { + super(total, salaryAndBenefits, workLifeBalance, organizationalCulture, careerAdvancement); + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/story/model/Story.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/Story.java new file mode 100644 index 00000000..c11f6869 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/Story.java @@ -0,0 +1,53 @@ +package rolling.domain.story.model; + +import lombok.Builder; +import rolling.domain.common.error.Assert; +import rolling.domain.member.model.MemberId; + +public final class Story { + + private final StoryId storyId; + private StoryDetails storyDetails; + private ReviewGrades reviewGrades; + + @Builder(builderClassName = "ExceptIdBuilder", builderMethodName = "ExceptIdBuilder") + public Story(StoryDetails storyDetails, ReviewGrades reviewGrades) { + this(null, storyDetails, reviewGrades); + } + + @Builder(builderClassName = "WithIdBuilder", builderMethodName = "WithIdBuilder") + public Story(StoryId storyId, StoryDetails storyDetails, ReviewGrades reviewGrades) { + Assert.notNull(storyDetails, "StoryDetails must not be null"); + Assert.notNull(reviewGrades, "ReviewGrades must not be null"); + + this.storyId = storyId; + this.storyDetails = storyDetails; + this.reviewGrades = reviewGrades; + } + + public void modify(final EmploymentDetails employmentDetails, final CorporationDetails corporationDetails, + final ReviewGrades reviewGrades, final MemberId memberId) { + isAuthor(memberId); + + this.storyDetails = new StoryDetails(storyDetails.authorId(), storyDetails.companyId(), employmentDetails, corporationDetails, + storyDetails.createdAt(), storyDetails.modifiedAt()); + this.reviewGrades = reviewGrades; + } + + public void isAuthor(final MemberId memberId) { + storyDetails.authorId().isEqual(memberId); + } + + public StoryId storyId() { + return storyId; + } + + public StoryDetails storyDetails() { + return storyDetails; + } + + public ReviewGrades reviewGrades() { + return reviewGrades; + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/main/java/rolling/domain/story/model/StoryDetails.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/StoryDetails.java new file mode 100644 index 00000000..77d864f0 --- /dev/null +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/StoryDetails.java @@ -0,0 +1,18 @@ +package rolling.domain.story.model; + +import lombok.Builder; +import rolling.domain.company.model.CompanyId; + +import java.time.LocalDateTime; + +public record StoryDetails( + AuthorId authorId, + CompanyId companyId, + EmploymentDetails employmentDetails, + CorporationDetails corporationDetails, + LocalDateTime createdAt, + LocalDateTime modifiedAt) { + @Builder + public StoryDetails { + } +} \ No newline at end of file diff --git a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryId.java b/rolling-core/domain/src/main/java/rolling/domain/story/model/StoryId.java similarity index 63% rename from Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryId.java rename to rolling-core/domain/src/main/java/rolling/domain/story/model/StoryId.java index f9d87101..a274d4f0 100644 --- a/Rolling-Domains/src/main/java/com/stubee/rollingdomains/domain/story/model/StoryId.java +++ b/rolling-core/domain/src/main/java/rolling/domain/story/model/StoryId.java @@ -1,6 +1,6 @@ -package com.stubee.rollingdomains.domain.story.model; +package rolling.domain.story.model; -import com.stubee.rollingdomains.common.model.BaseId; +import rolling.domain.common.model.BaseId; public class StoryId extends BaseId { diff --git a/rolling-core/domain/src/test/java/rolling/domain/member/FakeMemberService.java b/rolling-core/domain/src/test/java/rolling/domain/member/FakeMemberService.java new file mode 100644 index 00000000..c813d4a7 --- /dev/null +++ b/rolling-core/domain/src/test/java/rolling/domain/member/FakeMemberService.java @@ -0,0 +1,12 @@ +package rolling.domain.member; + +import rolling.domain.member.service.MemberService; + +public class FakeMemberService implements MemberService { + + @Override + public boolean isNicknameDuplicate(String nickname) { + return true; + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/test/java/rolling/domain/member/MemberTest.java b/rolling-core/domain/src/test/java/rolling/domain/member/MemberTest.java new file mode 100644 index 00000000..c48b111a --- /dev/null +++ b/rolling-core/domain/src/test/java/rolling/domain/member/MemberTest.java @@ -0,0 +1,48 @@ +package rolling.domain.member; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import rolling.domain.member.consts.LoginType; +import rolling.domain.member.consts.MemberRole; +import rolling.domain.member.exception.DuplicatedNicknameException; +import rolling.domain.member.model.Member; +import rolling.domain.member.model.MemberDetails; +import rolling.domain.member.model.MemberId; +import rolling.domain.member.model.SocialDetails; +import rolling.domain.member.service.MemberService; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.*; + +public class MemberTest { + + private Member member; + private MemberService memberService; + + @BeforeEach + void init() { + member = Member.WithIdBuilder() + .memberId(MemberId.of(1L)) + .memberDetails(new MemberDetails("suzzing", MemberRole.ADMIN, LocalDateTime.now(), LocalDateTime.now())) + .socialDetails(SocialDetails.builder() + .socialId("123456789") + .socialLoginId("suw0n") + .loginType(LoginType.GITHUB) + .email("test@gmail.com") + .imageUrl("rolling.kr") + .build()) + .build(); + memberService = new FakeMemberService(); + } + + @Test + @DisplayName(value = "중복된 Nickname 일 경우 수정 실패") + void 중복된_NICKNAME_일_경우_수정_실패() { + final String newNickname = "suzzing9999"; + + assertThrows(DuplicatedNicknameException.class, () -> member.modifyNickname(newNickname, memberService)); + } + +} \ No newline at end of file diff --git a/rolling-core/domain/src/test/java/rolling/domain/story/StoryTest.java b/rolling-core/domain/src/test/java/rolling/domain/story/StoryTest.java new file mode 100644 index 00000000..ec279c53 --- /dev/null +++ b/rolling-core/domain/src/test/java/rolling/domain/story/StoryTest.java @@ -0,0 +1,71 @@ +package rolling.domain.story; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import rolling.domain.common.error.exception.NotMatchedIdException; +import rolling.domain.company.model.CompanyId; +import rolling.domain.member.model.MemberId; +import rolling.domain.story.model.*; + +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.*; + +public class StoryTest { + + private Story story; + private AuthorId authorId; + + @BeforeEach + void init() { + authorId = AuthorId.of(1L); + story = Story.WithIdBuilder() + .storyId(StoryId.of(1L)) + .storyDetails(StoryDetails.builder() + .authorId(authorId) + .companyId(CompanyId.of(1L)) + .employmentDetails(EmploymentDetails.builder() + .build()) + .corporationDetails(CorporationDetails.builder() + .position("Product Manager") + .welfare("매주 금요일 조기 퇴근") + .pros("조기퇴근!") + .cons("없음") + .build()) + .createdAt(LocalDateTime.now()) + .modifiedAt(LocalDateTime.now()) + .build()) + .reviewGrades(ReviewGrades.builder() + .total(4.0) + .salaryAndBenefits(4.0) + .careerAdvancement(4.0) + .organizationalCulture(4.0) + .workLifeBalance(4.0) + .build()) + .build(); + } + + @Test + @DisplayName(value = "Author 가 아닐 경우 수정 실패") + void AUTHOR_가_아닐_경우_수정_실패() { + final EmploymentDetails employmentDetails = EmploymentDetails.builder().build(); + final CorporationDetails corporationDetails = CorporationDetails.builder() + .position("Product Manager") + .welfare("매주 금요일 조기 퇴근") + .pros("조기퇴근!") + .cons("없음") + .build(); + final ReviewGrades reviewGrades = ReviewGrades.builder() + .total(5.0) + .salaryAndBenefits(5.0) + .careerAdvancement(5.0) + .organizationalCulture(5.0) + .workLifeBalance(5.0) + .build(); + final MemberId memberId = MemberId.of(2L); + + assertThrows(NotMatchedIdException.class, () -> story.modify(employmentDetails, corporationDetails, reviewGrades, memberId)); + } + +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 2b2da617..7b136083 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,37 +6,16 @@ pluginManagement { rootProject.name = 'Rolling_BackEnd' -include 'Rolling-Api' -include 'Rolling-Batch:company-average-batch' -include 'Rolling-Batch:batch-commons' - -include 'Rolling-Domains' - -include 'Rolling-Application:member-application' -include 'Rolling-Application:company-application' -include 'Rolling-Application:employment-application' -include 'Rolling-Application:review-application' -include 'Rolling-Application:logging-application' -include 'Rolling-Application:news-application' -include 'Rolling-Application:file-application' -include 'Rolling-Application:notification-application' -include 'Rolling-Application:auth-application' -include 'Rolling-Application:application-commons' - -include 'Rolling-Adapters:persistence:member-persistence' -include 'Rolling-Adapters:persistence:company-persistence' -include 'Rolling-Adapters:persistence:employment-persistence' -include 'Rolling-Adapters:persistence:review-persistence' -include 'Rolling-Adapters:persistence:logging-persistence' -include 'Rolling-Adapters:persistence:persistence-commons' - -include 'Rolling-Adapters:thirdparty:naver-news' -include 'Rolling-Adapters:thirdparty:s3-file' -include 'Rolling-Adapters:thirdparty:email-notification' - -include 'Rolling-Adapters:security:auth' -include 'Rolling-Adapters:security:jwt' -include 'Rolling-Adapters:security:oauth' -include 'Rolling-Adapters:security:security-commons' - -include 'Rolling-Adapters:adapters-commons' \ No newline at end of file +include 'rolling-api' +include 'rolling-batch' + +include 'rolling-core' +include 'rolling-core:domain' +include 'rolling-core:application' + +include 'rolling-adapter' +include 'rolling-adapter:jpa-mysql' +include 'rolling-adapter:naver-news-client' +include 'rolling-adapter:s3' +include 'rolling-adapter:security' +include 'rolling-adapter:smtp' \ No newline at end of file