diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 40bfbb9b..794337b9 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -7,11 +7,11 @@ assignees: '' --- -๐Ÿž Describe - +๐Ÿž Describe โœ… Tasks -- [ ] 1. +- [ ] + 1. ๐Ÿ™‹๐Ÿป ํ•  ๋ง diff --git a/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md index 5ced59a2..1672fcfc 100644 --- a/.github/ISSUE_TEMPLATE/feature.md +++ b/.github/ISSUE_TEMPLATE/feature.md @@ -9,9 +9,9 @@ assignees: '' โœจ Describe - โœ… Tasks -- [ ] 1. +- [ ] + 1. ๐Ÿ™‹๐Ÿป ํ•  ๋ง diff --git a/.github/ISSUE_TEMPLATE/refactore.md b/.github/ISSUE_TEMPLATE/refactore.md index 3567c6ed..c8575c14 100644 --- a/.github/ISSUE_TEMPLATE/refactore.md +++ b/.github/ISSUE_TEMPLATE/refactore.md @@ -7,11 +7,11 @@ assignees: '' --- -๐Ÿ”จ Describe - +๐Ÿ”จ Describe โœ… Tasks -- [ ] 1. +- [ ] + 1. ๐Ÿ™‹๐Ÿป ํ•  ๋ง diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 3d302952..629e60f8 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -13,18 +13,18 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'temurin' - - - name: Grant execute permission for gradlew - run: chmod +x gradlew + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' - - name: checkStyle - run: ./gradlew check + - name: Grant execute permission for gradlew + run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew build + - name: checkStyle + run: ./gradlew check + + - name: Build with Gradle + run: ./gradlew build diff --git a/.github/workflows/sonar_cloud.yml b/.github/workflows/sonar_cloud.yml index 94f3051f..97ca4d01 100644 --- a/.github/workflows/sonar_cloud.yml +++ b/.github/workflows/sonar_cloud.yml @@ -4,7 +4,7 @@ on: branches: - master pull_request: - types: [opened, synchronize, reopened] + types: [ opened, synchronize, reopened ] jobs: build: name: Build and analyze diff --git a/README.md b/README.md index ef9ad908..c73ac319 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,13 @@ # ๋ถ€๋งˆ์œ„ํ‚ค #### ์›น์‚ฌ์ดํŠธ ๋ฐ”๋กœ๊ฐ€๊ธฐ : bumawiki.kro.kr + #### ์ธ์Šคํƒ€๊ทธ๋žจ ๋ฐ”๋กœ๊ฐ€๊ธฐ : @bssm.wiki + #### BSM OAuth ๋ฐ”๋กœ๊ฐ€๊ธฐ : github.com/BSSM-BSM ## ๋ถ€๋งˆ์œ„ํ‚ค + ๋ถ€๋งˆ์œ„ํ‚ค๋Š” ๋ถ€์‚ฐ์†Œํ”„ํŠธ์›จ์–ด๋งˆ์ด์Šคํ„ฐ๊ณ ๋“ฑํ•™๊ต์˜ ์—ญ์‚ฌ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์œ„ํ‚ค์ž…๋‹ˆ๋‹ค. ํ•™์ƒ, ์„ ์ƒ๋‹˜, ์‚ฌ๊ฑด์‚ฌ๊ณ , ๋™์•„๋ฆฌ ๋“ฑ์˜ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๊ต๋‚ด ํ•™์ƒ์ด๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋ฌธ์„œ๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @@ -23,10 +26,13 @@ ## Made By #### ๊น€ํ˜ธํ˜„ - ๋ผ๋–ผํŒ๋‹ค ๋ฐฐํฌ ๋ฐ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„ + #### ์ด์ฐฝ๋ณด - ์„œ๋ฒ„ ๊ตฌ์ถ• ๋ฐ ์ฃผ์š” ๊ธฐ๋Šฅ ๊ตฌํ˜„ + #### ๊ถŒ์„ธ์›, ๋ฐ•์šฐ๋นˆ - api ํ†ต์‹  ๋ฐ ํด๋ผ์ด์–ธํŠธ ํ™”๋ฉด ๊ตฌํ˜„ ### Server Developer +
@@ -47,6 +53,7 @@
### Client Developer +
@@ -67,4 +74,5 @@
### Thanks. + PS. ๋ถ€๋งˆ์œ„ํ‚ค ๋งŽ์ด ์ด์šฉํ•ด์ฃผ์„ธ์šฉ diff --git a/src/main/java/com/project/bumawiki/domain/contribute/domain/Contribute.java b/src/main/java/com/project/bumawiki/domain/contribute/domain/Contribute.java deleted file mode 100644 index d40031f8..00000000 --- a/src/main/java/com/project/bumawiki/domain/contribute/domain/Contribute.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.project.bumawiki.domain.contribute.domain; - -import java.time.LocalDateTime; - -import org.springframework.data.annotation.CreatedDate; - -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.user.domain.User; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.OneToOne; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; - -@Entity -@Getter -@Builder -@AllArgsConstructor(access = AccessLevel.PRIVATE) -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Contribute { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "contribute_id") - private Long id; - - @CreatedDate - private LocalDateTime createdAt; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "user_id") - private User contributor; - - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "docs_id") - private Docs docs; - - @OneToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "version_docs_id") - private VersionDocs versionDocs; -} diff --git a/src/main/java/com/project/bumawiki/domain/contribute/domain/repository/ContributeRepository.java b/src/main/java/com/project/bumawiki/domain/contribute/domain/repository/ContributeRepository.java deleted file mode 100644 index bdff9a17..00000000 --- a/src/main/java/com/project/bumawiki/domain/contribute/domain/repository/ContributeRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.project.bumawiki.domain.contribute.domain.repository; - -import java.util.List; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; - -import com.project.bumawiki.domain.contribute.domain.Contribute; -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.user.domain.User; - -public interface ContributeRepository extends JpaRepository { - @Query("select distinct c.contributor from Contribute c where c.docs = :docs") - List findUserAllByDocs(Docs docs); -} diff --git a/src/main/java/com/project/bumawiki/domain/contribute/dto/ContributeResponseDto.java b/src/main/java/com/project/bumawiki/domain/contribute/dto/ContributeResponseDto.java deleted file mode 100644 index e2d08e22..00000000 --- a/src/main/java/com/project/bumawiki/domain/contribute/dto/ContributeResponseDto.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.project.bumawiki.domain.contribute.dto; - -import java.time.LocalDateTime; - -import com.project.bumawiki.domain.contribute.domain.Contribute; - -import lombok.Getter; - -@Getter -public class ContributeResponseDto { - - private final Long userId; - private final String userNickName; - private final Long docsId; - private final LocalDateTime createTime; - private final String title; - private final Long versionDocsId; - - public ContributeResponseDto(Contribute contribute) { - this.userId = contribute.getContributor().getId(); - this.userNickName = contribute.getContributor().getNickName(); - this.docsId = contribute.getDocs().getId(); - this.createTime = contribute.getCreatedAt(); - this.title = contribute.getDocs().getTitle(); - this.versionDocsId = contribute.getVersionDocs().getId(); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/contribute/service/ContributeService.java b/src/main/java/com/project/bumawiki/domain/contribute/service/ContributeService.java deleted file mode 100644 index a3379388..00000000 --- a/src/main/java/com/project/bumawiki/domain/contribute/service/ContributeService.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.project.bumawiki.domain.contribute.service; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - -import org.springframework.transaction.annotation.Transactional; - -import com.project.bumawiki.domain.contribute.domain.Contribute; -import com.project.bumawiki.domain.contribute.domain.repository.ContributeRepository; -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.docs.domain.repository.DocsRepository; -import com.project.bumawiki.domain.docs.exception.DocsNotFoundException; -import com.project.bumawiki.domain.user.domain.User; -import com.project.bumawiki.domain.user.domain.repository.UserRepository; -import com.project.bumawiki.domain.user.exception.UserNotFoundException; -import com.project.bumawiki.global.annotation.ServiceWithTransactionalReadOnly; -import com.project.bumawiki.global.util.SecurityUtil; - -import jakarta.validation.constraints.NotNull; -import lombok.RequiredArgsConstructor; - -@ServiceWithTransactionalReadOnly -@RequiredArgsConstructor -public class ContributeService { - - private final DocsRepository docsRepository; - private final UserRepository userRepository; - private final ContributeRepository contributeRepository; - - @Transactional - public Contribute setContribute(VersionDocs versionDocs) { - - User user = findUser(); - - Docs docs = docsRepository.findById(versionDocs.getDocsId()) - .orElseThrow(() -> DocsNotFoundException.EXCEPTION); - - return setContributeAtUserAndDocs(versionDocs, user, docs); - } - - @NotNull - private Contribute setContributeAtUserAndDocs(VersionDocs versionDocs, User user, Docs docs) { - Contribute contribute = createContribute(docs, user, versionDocs); - - ArrayList contributes = new ArrayList<>(); - contributes.add(contribute); - - setFirstContribute(contributes, user); - docs.updateContributor(contributes); - return contribute; - } - - @Transactional - public Contribute updateContribute(final VersionDocs versionDocs) { - - User user = findUser(); - - Docs docs = docsRepository.findById(versionDocs.getDocsId()) - .orElseThrow(() -> DocsNotFoundException.EXCEPTION); - - Contribute contribute = createContribute(docs, user, versionDocs); - - if (user.getContributeDocs() == null) { - ArrayList contributes = new ArrayList<>(); - contributes.add(contribute); - - setFirstContribute(contributes, user); - } - docs.getContributor().add(contribute); - - return contribute; - } - - @Transactional - public void setFirstContribute(final List contributes, final User user) { - user.updateContributeDocs(contributes); - } - - @Transactional - private Contribute createContribute(Docs docs, User user, VersionDocs versionDocs) { - return contributeRepository.save( - Contribute.builder() - .docs(docs) - .contributor(user) - .versionDocs(versionDocs) - .createdAt(LocalDateTime.now()) - .build() - ); - } - - private User findUser() { - User user = SecurityUtil.getCurrentUserWithLogin(); - - return userRepository.findById(user.getId()) - .orElseThrow(() -> UserNotFoundException.EXCEPTION); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/domain/Docs.java b/src/main/java/com/project/bumawiki/domain/docs/domain/Docs.java index 1e7aae6c..75028385 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/domain/Docs.java +++ b/src/main/java/com/project/bumawiki/domain/docs/domain/Docs.java @@ -1,17 +1,21 @@ package com.project.bumawiki.domain.docs.domain; import java.time.LocalDateTime; +import java.util.List; import com.project.bumawiki.domain.docs.domain.type.DocsType; import com.project.bumawiki.domain.docs.domain.type.Status; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -39,6 +43,13 @@ public class Docs { @Enumerated(EnumType.STRING) private Status status; + @OneToMany( + mappedBy = "docs", + cascade = CascadeType.REMOVE, + fetch = FetchType.LAZY + ) + private List versionDocs; + public Docs(String title, int enroll, DocsType docsType) { this.title = title; this.enroll = enroll; diff --git a/src/main/java/com/project/bumawiki/domain/docs/domain/VersionDocs.java b/src/main/java/com/project/bumawiki/domain/docs/domain/VersionDocs.java index ab9adf61..c00e49ab 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/domain/VersionDocs.java +++ b/src/main/java/com/project/bumawiki/domain/docs/domain/VersionDocs.java @@ -35,7 +35,7 @@ public class VersionDocs { private String contents; @CreatedDate - private LocalDateTime thisVersionCreatedAt; + private LocalDateTime createdAt; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "user_id") diff --git a/src/main/java/com/project/bumawiki/domain/docs/domain/repository/CustomDocsRepositoryImpl.java b/src/main/java/com/project/bumawiki/domain/docs/domain/repository/CustomDocsRepositoryImpl.java index 1d4ac345..d1fda8b3 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/domain/repository/CustomDocsRepositoryImpl.java +++ b/src/main/java/com/project/bumawiki/domain/docs/domain/repository/CustomDocsRepositoryImpl.java @@ -1,6 +1,5 @@ package com.project.bumawiki.domain.docs.domain.repository; -import static com.project.bumawiki.domain.contribute.domain.QContribute.*; import static com.project.bumawiki.domain.docs.domain.QDocs.*; import static com.project.bumawiki.domain.docs.domain.QVersionDocs.*; import static com.project.bumawiki.domain.thumbsup.domain.QThumbsUp.*; @@ -28,15 +27,14 @@ public class CustomDocsRepositoryImpl implements CustomDocsRepository { @Override public VersionResponseDto getDocsVersion(Docs findDocs) { List versionDocsResponseDto = jpaQueryFactory - .select(constructor(VersionDocsResponseDto.class, versionDocs.thisVersionCreatedAt, user.id, - user.nickName)) + .select(constructor(VersionDocsResponseDto.class, versionDocs.createdAt, user.id, + user.nickName, versionDocs.version)) .from(docs) - .join(docs.docsVersion, versionDocs) - .join(versionDocs.contributor, contribute) - .join(contribute.contributor, user) + .join(docs.versionDocs, versionDocs) + .join(versionDocs.user, user) .where(docs.id.eq(findDocs.getId())) .distinct() - .orderBy(versionDocs.thisVersionCreatedAt.desc()) + .orderBy(versionDocs.createdAt.desc()) .fetch(); return new VersionResponseDto(versionDocsResponseDto, findDocs); @@ -48,7 +46,7 @@ public List findByThumbsUpsDesc() { .select( constructor(DocsPopularResponseDto.class, docs.title, docs.enroll, docs.docsType, thumbsUp.id.count())) .from(docs) - .innerJoin(docs.thumbsUps, thumbsUp) + .innerJoin(docs, thumbsUp.docs) .groupBy(docs.title, docs.enroll, docs.docsType) .orderBy(thumbsUp.id.count().desc()) .limit(25) diff --git a/src/main/java/com/project/bumawiki/domain/docs/domain/repository/VersionDocsRepository.java b/src/main/java/com/project/bumawiki/domain/docs/domain/repository/VersionDocsRepository.java index 86aeba3c..e9fbf04e 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/domain/repository/VersionDocsRepository.java +++ b/src/main/java/com/project/bumawiki/domain/docs/domain/repository/VersionDocsRepository.java @@ -8,6 +8,7 @@ import com.project.bumawiki.domain.docs.domain.Docs; import com.project.bumawiki.domain.docs.domain.VersionDocs; +import com.project.bumawiki.domain.user.domain.User; public interface VersionDocsRepository extends JpaRepository { @@ -19,4 +20,6 @@ public interface VersionDocsRepository extends JpaRepository List findByDocs(Docs docs); Optional findByDocsAndVersion(Docs docs, Integer version); + + List findAllByUser(User user); } diff --git a/src/main/java/com/project/bumawiki/domain/docs/domain/type/DocsType.java b/src/main/java/com/project/bumawiki/domain/docs/domain/type/DocsType.java index eb7f3d69..743c72fc 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/domain/type/DocsType.java +++ b/src/main/java/com/project/bumawiki/domain/docs/domain/type/DocsType.java @@ -4,7 +4,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import com.project.bumawiki.domain.docs.exception.DocsTypeNotFoundException; +import com.project.bumawiki.global.error.exception.BumawikiException; +import com.project.bumawiki.global.error.exception.ErrorCode; import lombok.AllArgsConstructor; import lombok.Getter; @@ -32,7 +33,7 @@ public static DocsType valueOfLabel(String stringDocsType) { DocsType docsType = BY_LABEL.get(stringDocsType); if (docsType == null) { - throw DocsTypeNotFoundException.EXCEPTION; + throw new BumawikiException(ErrorCode.DOCS_TYPE_NOT_FOUND); } return docsType; diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/CannotChangeYourDocsException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/CannotChangeYourDocsException.java deleted file mode 100644 index e1cbbb28..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/CannotChangeYourDocsException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class CannotChangeYourDocsException extends BumawikiException { - - public static final CannotChangeYourDocsException EXCEPTION = new CannotChangeYourDocsException( - ErrorCode.CANNOT_CHANGE_YOUR_DOCS); - - public CannotChangeYourDocsException(ErrorCode errorCode) { - super(errorCode); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsConflictedException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/DocsConflictedException.java deleted file mode 100644 index 2415e5d3..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsConflictedException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class DocsConflictedException extends BumawikiException { - public DocsConflictedException() { - super(ErrorCode.DOCS_CONFLICTED); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsNotFoundException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/DocsNotFoundException.java deleted file mode 100644 index 9237009d..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsNotFoundException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class DocsNotFoundException extends BumawikiException { - - public static final DocsNotFoundException EXCEPTION = new DocsNotFoundException(ErrorCode.DOCS_NOT_FOUND); - - public DocsNotFoundException(ErrorCode errorCode) { - super(errorCode); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsTypeNotFoundException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/DocsTypeNotFoundException.java deleted file mode 100644 index f3a2c419..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/DocsTypeNotFoundException.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class DocsTypeNotFoundException extends BumawikiException { - - public static final DocsTypeNotFoundException EXCEPTION = new DocsTypeNotFoundException( - ErrorCode.DOCS_TYPE_NOT_FOUND); - - public DocsTypeNotFoundException(ErrorCode errorCode) { - super(errorCode); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/NoSuchVersionException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/NoSuchVersionException.java deleted file mode 100644 index 17774f85..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/NoSuchVersionException.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class NoSuchVersionException extends BumawikiException { - public NoSuchVersionException() { - super(ErrorCode.NO_SUCH_VERSION); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/NoUpdatableDocsException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/NoUpdatableDocsException.java deleted file mode 100644 index 8653e961..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/NoUpdatableDocsException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class NoUpdatableDocsException extends BumawikiException { - - public static final NoUpdatableDocsException EXCEPTION = new NoUpdatableDocsException(ErrorCode.NO_UPDATABLE_DOCS); - - public NoUpdatableDocsException(ErrorCode errorCode) { - super(errorCode); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/exception/VersionNotExistException.java b/src/main/java/com/project/bumawiki/domain/docs/exception/VersionNotExistException.java deleted file mode 100644 index 93af5780..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/exception/VersionNotExistException.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.project.bumawiki.domain.docs.exception; - -import com.project.bumawiki.global.error.exception.BumawikiException; -import com.project.bumawiki.global.error.exception.ErrorCode; - -public class VersionNotExistException extends BumawikiException { - - public static final NoUpdatableDocsException EXCEPTION = new NoUpdatableDocsException(ErrorCode.VERSION_NOT_EXIST); - - public VersionNotExistException(ErrorCode errorCode) { - super(errorCode); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsCreator.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsCreator.java index 28d87e63..02a930ef 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsCreator.java +++ b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsCreator.java @@ -14,10 +14,11 @@ public class DocsCreator { private final DocsRepository docsRepository; private final VersionDocsRepository versionDocsRepository; + private final DocsUpdater docsUpdater; + private final DocsReader docsReader; public void create(Docs docs, User user, String contents) { docsRepository.save(docs); - versionDocsRepository.save( new VersionDocs( 0, @@ -27,4 +28,17 @@ public void create(Docs docs, User user, String contents) { ) ); } + + public void createVersionDocs(Docs docs, User user, String contents) { + Integer lastVersion = docsReader.findLastVersion(docs).getVersion(); + VersionDocs versionDocs = versionDocsRepository.save( + new VersionDocs( + lastVersion + 1, + docs, + contents, + user + ) + ); + docsUpdater.updateModifiedAt(docs, versionDocs.getCreatedAt()); + } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsReader.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsReader.java index fef1a683..2df0e391 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsReader.java +++ b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsReader.java @@ -1,7 +1,11 @@ package com.project.bumawiki.domain.docs.implementation; +import java.util.List; + import com.project.bumawiki.domain.docs.domain.Docs; +import com.project.bumawiki.domain.docs.domain.VersionDocs; import com.project.bumawiki.domain.docs.domain.repository.DocsRepository; +import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository; import com.project.bumawiki.global.annotation.Implementation; import com.project.bumawiki.global.error.exception.BumawikiException; import com.project.bumawiki.global.error.exception.ErrorCode; @@ -13,6 +17,7 @@ public class DocsReader { private final DocsRepository docsRepository; + private final VersionDocsRepository versionDocsRepository; public Docs findById(Long docsId) { return docsRepository.findById(docsId) @@ -23,4 +28,12 @@ public Docs findByTitle(String title) { return docsRepository.findByTitle(title) .orElseThrow(() -> new BumawikiException(ErrorCode.DOCS_NOT_FOUND)); } + + public List findTop3ByDocs(Docs docs) { + return versionDocsRepository.findTop3ByDocsOrderByVersion(docs); + } + + public VersionDocs findLastVersion(Docs docs) { + return versionDocsRepository.findFirstByDocsOrderByVersionDesc(docs); + } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsValidator.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsValidator.java index 589630dd..6a359cd3 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsValidator.java +++ b/src/main/java/com/project/bumawiki/domain/docs/implementation/DocsValidator.java @@ -1,10 +1,10 @@ package com.project.bumawiki.domain.docs.implementation; import com.project.bumawiki.domain.docs.domain.Docs; +import com.project.bumawiki.domain.docs.domain.VersionDocs; import com.project.bumawiki.domain.docs.domain.repository.DocsRepository; import com.project.bumawiki.domain.docs.domain.type.DocsType; import com.project.bumawiki.domain.docs.domain.type.Status; -import com.project.bumawiki.domain.docs.exception.NoUpdatableDocsException; import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.global.annotation.Implementation; import com.project.bumawiki.global.error.exception.BumawikiException; @@ -16,6 +16,7 @@ @RequiredArgsConstructor public class DocsValidator { private final DocsRepository docsRepository; + private final DocsReader docsReader; public void checkTitleAlreadyExist(Docs docs) { if (docsRepository.existsByTitle(docs.getTitle())) { @@ -45,7 +46,7 @@ public void checkUpdateOneSelf(User user, Docs docs) { public void checkUpdatableDocsType(DocsType docsType) { if (docsType.equals(DocsType.READONLY)) { - throw NoUpdatableDocsException.EXCEPTION; + throw new BumawikiException(ErrorCode.NO_UPDATABLE_DOCS); } } @@ -60,4 +61,9 @@ public void checkConflicted(Docs docs) { throw new BumawikiException(ErrorCode.DOCS_IS_NOT_CONFLICTED); } } + + public boolean isConflict(Docs docs, Integer updatingVersion) { + VersionDocs lastVersionDocs = docsReader.findLastVersion(docs); + return !lastVersionDocs.getVersion().equals(updatingVersion); + } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/VersionDocsReader.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/VersionDocsReader.java deleted file mode 100644 index ca863e70..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/VersionDocsReader.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.project.bumawiki.domain.docs.implementation; - -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository; -import com.project.bumawiki.global.annotation.Implementation; - -import lombok.RequiredArgsConstructor; - -import java.util.List; - -@Implementation -@RequiredArgsConstructor -public class VersionDocsReader { - private final VersionDocsRepository versionDocsRepository; - - public List findTop3ByDocs(Docs docs) { - return versionDocsRepository.findTop3ByDocsOrderByVersion(docs); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsCreator.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsCreator.java deleted file mode 100644 index 16088de8..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsCreator.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.project.bumawiki.domain.docs.implementation.versiondocs; - -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository; -import com.project.bumawiki.domain.docs.implementation.DocsUpdater; -import com.project.bumawiki.domain.user.domain.User; -import com.project.bumawiki.global.annotation.Implementation; - -import lombok.RequiredArgsConstructor; - -@Implementation -@RequiredArgsConstructor -public class VersionDocsCreator { - private final VersionDocsReader versionDocsReader; - private final DocsUpdater docsUpdater; - private final VersionDocsRepository versionDocsRepository; - - public void create(Docs docs, User user, String contents) { - Integer lastVersion = versionDocsReader.findLastVersion(docs).getVersion(); - VersionDocs versionDocs = versionDocsRepository.save( - new VersionDocs( - lastVersion + 1, - docs, - contents, - user - ) - ); - docsUpdater.updateModifiedAt(docs, versionDocs.getThisVersionCreatedAt()); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsReader.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsReader.java deleted file mode 100644 index 542ba574..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsReader.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.project.bumawiki.domain.docs.implementation.versiondocs; - -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository; -import com.project.bumawiki.global.annotation.Implementation; - -import lombok.RequiredArgsConstructor; - -@Implementation -@RequiredArgsConstructor -public class VersionDocsReader { - private final VersionDocsRepository versionDocsRepository; - - public VersionDocs findLastVersion(Docs docs) { - return versionDocsRepository.findFirstByDocsOrderByVersionDesc(docs); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsValidator.java b/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsValidator.java deleted file mode 100644 index 85c2b7ff..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/implementation/versiondocs/VersionDocsValidator.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.project.bumawiki.domain.docs.implementation.versiondocs; - -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.global.annotation.Implementation; - -import lombok.RequiredArgsConstructor; - -@Implementation -@RequiredArgsConstructor -public class VersionDocsValidator { - private final VersionDocsReader versionDocsReader; - - public boolean isConflict(Docs docs, Integer updatingVersion) { - VersionDocs lastVersionDocs = versionDocsReader.findLastVersion(docs); - return !lastVersionDocs.getVersion().equals(updatingVersion); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/CommandDocsController.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/CommandDocsController.java index fb2ce415..45f150ab 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/CommandDocsController.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/CommandDocsController.java @@ -12,7 +12,7 @@ import com.project.bumawiki.domain.docs.presentation.dto.request.DocsCreateRequestDto; import com.project.bumawiki.domain.docs.presentation.dto.request.DocsTitleUpdateRequestDto; -import com.project.bumawiki.domain.docs.presentation.dto.request.DocsTypeUpdateDto; +import com.project.bumawiki.domain.docs.presentation.dto.request.DocsTypeUpdateRequestDto; import com.project.bumawiki.domain.docs.presentation.dto.request.DocsUpdateRequestDto; import com.project.bumawiki.domain.docs.service.CommandDocsService; import com.project.bumawiki.global.util.SecurityUtil; @@ -41,14 +41,14 @@ public void updateDocs(@PathVariable String title, request.updatingVersion()); } - @PutMapping("/{title}") + @PutMapping("/title/{title}") public void updateDocsTitle(@PathVariable String title, @RequestBody DocsTitleUpdateRequestDto request) { commandDocsService.titleUpdate(title, request.title()); } @PutMapping("/docsType") - public void updateDocsType(@RequestBody DocsTypeUpdateDto requestDto) { + public void updateDocsType(@RequestBody DocsTypeUpdateRequestDto requestDto) { commandDocsService.docsTypeUpdate(requestDto.id(), requestDto.docsType()); } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsInformationController.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsInformationController.java index 7fb51048..577fdeb7 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsInformationController.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsInformationController.java @@ -1,7 +1,6 @@ package com.project.bumawiki.domain.docs.presentation; import java.util.List; -import java.util.stream.Collectors; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; @@ -15,11 +14,11 @@ import org.springframework.web.bind.annotation.RestController; import com.project.bumawiki.domain.docs.domain.type.DocsType; -import com.project.bumawiki.domain.docs.presentation.dto.ClubResponseDto; -import com.project.bumawiki.domain.docs.presentation.dto.DocsTypeDto; -import com.project.bumawiki.domain.docs.presentation.dto.TeacherResponseDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.ClubResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.DocsNameAndEnrollResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.DocsResponseDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.DocsTypeResponseDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.TeacherResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.VersionDocsDiffResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.VersionResponseDto; import com.project.bumawiki.domain.docs.service.DocsInformationService; @@ -45,10 +44,10 @@ public ResponseEntity findAllClub() { } @GetMapping("/{stringDocsType}") - public DocsTypeDto findAllByDocsType( + public DocsTypeResponseDto findAllByDocsType( @PathVariable String stringDocsType) { DocsType docsType = DocsType.valueOfLabel(stringDocsType); - return DocsTypeDto.from(docsInformationService.findByDocsTypeOrderByEnroll(docsType)); + return DocsTypeResponseDto.from(docsInformationService.findByDocsTypeOrderByEnroll(docsType)); } @GetMapping("/find/all/title/{title}") @@ -56,7 +55,7 @@ public List findAllByTitle(@PathVariable String ti return docsInformationService.findAllByTitle(title) .stream() .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); + .toList(); } @GetMapping("/find/title/{title}") diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsMergeConflictController.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsMergeConflictController.java index ff380da4..9d63c42b 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsMergeConflictController.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/DocsMergeConflictController.java @@ -9,8 +9,8 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import com.project.bumawiki.domain.docs.presentation.dto.DocsConflictSolveDto; -import com.project.bumawiki.domain.docs.presentation.dto.MergeConflictDataResponse; +import com.project.bumawiki.domain.docs.presentation.dto.request.DocsConflictSolveRequestDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.MergeConflictDataResponseDto; import com.project.bumawiki.domain.docs.service.DocsMergeConflictService; import lombok.RequiredArgsConstructor; @@ -24,13 +24,13 @@ public class DocsMergeConflictController { @GetMapping("/{title}") @ResponseStatus(HttpStatus.OK) - public MergeConflictDataResponse getMergeConflictData(@PathVariable String title) { + public MergeConflictDataResponseDto getMergeConflictData(@PathVariable String title) { return mergeConflictService.getMergeConflict(title); } @PutMapping("/{title}") @ResponseStatus(HttpStatus.NO_CONTENT) - public void solveConflict(@PathVariable String title, @RequestBody DocsConflictSolveDto dto) { + public void solveConflict(@PathVariable String title, @RequestBody DocsConflictSolveRequestDto dto) { mergeConflictService.solveConflict(title, dto); } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/ClubResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/ClubResponseDto.java deleted file mode 100644 index c3c7ea95..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/ClubResponseDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.project.bumawiki.domain.docs.presentation.dto; - -import java.util.List; -import java.util.stream.Collectors; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.presentation.dto.response.DocsNameAndEnrollResponseDto; - -public class ClubResponseDto { - @JsonProperty - private List club; - @JsonProperty - private List freeClub; - - public ClubResponseDto(List club, List freeClub) { - this.club = club.stream() - .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); - this.freeClub = freeClub.stream() - .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsConflictSolveDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsConflictSolveDto.java deleted file mode 100644 index f6b75fcc..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsConflictSolveDto.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.project.bumawiki.domain.docs.presentation.dto; - -public record DocsConflictSolveDto( - String contents -) { - -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/TeacherResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/TeacherResponseDto.java deleted file mode 100644 index 06794a32..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/TeacherResponseDto.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.project.bumawiki.domain.docs.presentation.dto; - -import java.util.List; -import java.util.stream.Collectors; - -import com.fasterxml.jackson.annotation.JsonProperty; -import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.presentation.dto.response.DocsNameAndEnrollResponseDto; - -public class TeacherResponseDto { - @JsonProperty - private List teacher; - @JsonProperty - private List majorTeacher; - @JsonProperty - private List mentorTeacher; - - public TeacherResponseDto(List teacher, - List majorTeacher, List mentorTeacher) { - this.teacher = teacher.stream() - .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); - - this.majorTeacher = majorTeacher.stream() - .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); - - this.mentorTeacher = majorTeacher.stream() - .map(DocsNameAndEnrollResponseDto::new) - .collect(Collectors.toList()); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/VersionDocsSummaryDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/VersionDocsSummaryDto.java deleted file mode 100644 index dede042a..00000000 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/VersionDocsSummaryDto.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.project.bumawiki.domain.docs.presentation.dto; - -import java.time.LocalDateTime; - -import com.project.bumawiki.domain.docs.domain.VersionDocs; -import com.project.bumawiki.domain.user.domain.User; - -import lombok.Getter; - -@Getter -public class VersionDocsSummaryDto { - private final Integer version; - private final LocalDateTime thisVersionCreatedAt; - private final Long userId; - private final String nickName; - - public VersionDocsSummaryDto(VersionDocs versionDocs) { - User contributor = versionDocs.getUser(); - this.version = versionDocs.getVersion(); - this.thisVersionCreatedAt = versionDocs.getThisVersionCreatedAt(); - this.nickName = contributor.getNickName(); - this.userId = contributor.getId(); - } -} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsConflictSolveRequestDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsConflictSolveRequestDto.java new file mode 100644 index 00000000..860cb965 --- /dev/null +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsConflictSolveRequestDto.java @@ -0,0 +1,7 @@ +package com.project.bumawiki.domain.docs.presentation.dto.request; + +public record DocsConflictSolveRequestDto( + String contents +) { + +} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateRequestDto.java similarity index 85% rename from src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateDto.java rename to src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateRequestDto.java index 1e53c481..23880b8b 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/request/DocsTypeUpdateRequestDto.java @@ -4,7 +4,7 @@ import jakarta.validation.constraints.NotNull; -public record DocsTypeUpdateDto( +public record DocsTypeUpdateRequestDto( @NotNull Long id, @NotNull diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ClubResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ClubResponseDto.java new file mode 100644 index 00000000..662e6d70 --- /dev/null +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ClubResponseDto.java @@ -0,0 +1,27 @@ +package com.project.bumawiki.domain.docs.presentation.dto.response; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.project.bumawiki.domain.docs.domain.Docs; + +public record ClubResponseDto( + @JsonProperty + List club, + @JsonProperty + List freeClub +) { + public static ClubResponseDto from(List club, List freeClub) { + return new ClubResponseDto( + convertToDtoList(club), + convertToDtoList(freeClub) + ); + } + + private static List convertToDtoList(List docs) { + return docs.stream() + .map(DocsNameAndEnrollResponseDto::new) + .toList(); + } +} + diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ContributeDocsResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ContributeDocsResponseDto.java new file mode 100644 index 00000000..51afa27d --- /dev/null +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/ContributeDocsResponseDto.java @@ -0,0 +1,25 @@ +package com.project.bumawiki.domain.docs.presentation.dto.response; + +import java.time.LocalDateTime; + +import com.project.bumawiki.domain.docs.domain.VersionDocs; + +public record ContributeDocsResponseDto( + Long userId, + String userNickName, + Long docsId, + LocalDateTime createTime, + String title, + Integer version +) { + public ContributeDocsResponseDto(VersionDocs versionDocs) { + this( + versionDocs.getUser().getId(), + versionDocs.getUser().getNickName(), + versionDocs.getDocs().getId(), + versionDocs.getCreatedAt(), + versionDocs.getDocs().getTitle(), + versionDocs.getVersion() + ); + } +} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsNameAndEnrollResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsNameAndEnrollResponseDto.java index 7edfdbb5..60638ee3 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsNameAndEnrollResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsNameAndEnrollResponseDto.java @@ -8,37 +8,36 @@ import com.project.bumawiki.domain.docs.domain.type.DocsType; import com.project.bumawiki.domain.docs.util.DocsUtil; -import lombok.Getter; - -@Getter -public class DocsNameAndEnrollResponseDto { - - private final Long id; - private final String title; - private final int enroll; - private final String simpleContents; - private final DocsType docsType; - private final LocalDateTime lastModifiedAt; - private final String thumbnail; +public record DocsNameAndEnrollResponseDto( + Long id, + String title, + int enroll, + String simpleContents, + DocsType docsType, + LocalDateTime lastModifiedAt, + String thumbnail +) { public DocsNameAndEnrollResponseDto(Docs docs) { - this.id = docs.getId(); - this.title = docs.getTitle(); - this.enroll = docs.getEnroll(); - this.docsType = docs.getDocsType(); - this.lastModifiedAt = docs.getLastModifiedAt(); - this.simpleContents = getSimpleContents(docs); - this.thumbnail = DocsUtil.getThumbnail(getContents(docs)); + this( + docs.getId(), + docs.getTitle(), + docs.getEnroll(), + getSimpleContents(docs), + docs.getDocsType(), + docs.getLastModifiedAt(), + DocsUtil.getThumbnail(getContents(docs)) + ); } - private String getSimpleContents(Docs docs) { + private static String getSimpleContents(Docs docs) { String contents = getContents(docs); int endIndex = Math.min(contents.length(), 200); return contents.substring(0, endIndex); } - private String getContents(Docs docs) { - List docsVersion = docs.getDocsVersion(); + private static String getContents(Docs docs) { + List docsVersion = docs.getVersionDocs(); int currentDocsSize = docsVersion.size() - 1; return docsVersion.get(currentDocsSize).getContents(); } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsResponseDto.java index e1df90a1..db0dffdc 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsResponseDto.java @@ -2,7 +2,6 @@ import java.time.LocalDateTime; import java.util.List; -import java.util.stream.Collectors; import com.project.bumawiki.domain.docs.domain.Docs; import com.project.bumawiki.domain.docs.domain.VersionDocs; @@ -12,40 +11,36 @@ import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.domain.user.presentation.dto.SimpleUserDto; -import lombok.Getter; - -@Getter -public class DocsResponseDto { - - private final Long id; - private final String title; - private final String contents; - private final DocsType docsType; - private final LocalDateTime lastModifiedAt; - private final int enroll; - private final boolean isDocsDetail; - private final List contributors; - private final Status status; - private final int version; - private final String thumbnail; - - public DocsResponseDto(Docs docs, List contributors) { - int lastValueOfDocsVersion = docs.getDocsVersion().size() - 1; - VersionDocs versionDocs = docs.getDocsVersion().get(lastValueOfDocsVersion); - - this.id = docs.getId(); - this.title = docs.getTitle(); - this.contents = versionDocs.getContents(); - this.lastModifiedAt = docs.getLastModifiedAt(); - this.docsType = docs.getDocsType(); - this.enroll = docs.getEnroll(); - this.isDocsDetail = true; - this.contributors = contributors.stream() - .map(SimpleUserDto::new) - .collect(Collectors.toList()); - this.status = docs.getStatus(); - this.version = docs.getLastVersion(); - this.thumbnail = DocsUtil.getThumbnail(versionDocs.getContents()); +public record DocsResponseDto( + Long id, + String title, + String contents, + DocsType docsType, + LocalDateTime lastModifiedAt, + int enroll, + boolean isDocsDetail, + List contributors, + Status status, + int version, + String thumbnail +) { + + public DocsResponseDto(Docs docs, List contributors, VersionDocs versionDocs) { + this( + docs.getId(), + docs.getTitle(), + versionDocs.getContents(), + docs.getDocsType(), + docs.getLastModifiedAt(), + docs.getEnroll(), + true, + contributors.stream() + .map(SimpleUserDto::new) + .toList(), + docs.getStatus(), + versionDocs.getVersion(), + DocsUtil.getThumbnail(versionDocs.getContents()) + ); } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsTypeDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsTypeResponseDto.java similarity index 55% rename from src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsTypeDto.java rename to src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsTypeResponseDto.java index cc132f55..89b45334 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/DocsTypeDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/DocsTypeResponseDto.java @@ -1,4 +1,4 @@ -package com.project.bumawiki.domain.docs.presentation.dto; +package com.project.bumawiki.domain.docs.presentation.dto.response; import java.util.ArrayList; import java.util.Collections; @@ -8,20 +8,12 @@ import java.util.TreeMap; import com.project.bumawiki.domain.docs.domain.Docs; -import com.project.bumawiki.domain.docs.presentation.dto.response.DocsNameAndEnrollResponseDto; - -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Getter; - -@Getter -@AllArgsConstructor(access = AccessLevel.PRIVATE) -public class DocsTypeDto { - private Map> data; - private Set keys; - - public static DocsTypeDto from(List allDocs) { +public record DocsTypeResponseDto( + Map> data, + Set keys +) { + public static DocsTypeResponseDto from(List allDocs) { List docsList = allDocs.stream() .map(DocsNameAndEnrollResponseDto::new) .toList(); @@ -31,10 +23,10 @@ public static DocsTypeDto from(List allDocs) { // ๊ธฐ์กด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ enroll ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ Map์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. for (DocsNameAndEnrollResponseDto doc : docsList) { - enrollMap.computeIfAbsent(doc.getEnroll(), k -> new ArrayList<>()).add(doc); + enrollMap.computeIfAbsent(doc.enroll(), k -> new ArrayList<>()).add(doc); } - return new DocsTypeDto( + return new DocsTypeResponseDto( enrollMap, enrollMap.keySet() ); diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/MergeConflictDataResponse.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/MergeConflictDataResponseDto.java similarity index 69% rename from src/main/java/com/project/bumawiki/domain/docs/presentation/dto/MergeConflictDataResponse.java rename to src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/MergeConflictDataResponseDto.java index f1488b89..450d2110 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/MergeConflictDataResponse.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/MergeConflictDataResponseDto.java @@ -1,10 +1,10 @@ -package com.project.bumawiki.domain.docs.presentation.dto; +package com.project.bumawiki.domain.docs.presentation.dto.response; import java.util.LinkedList; import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch; -public record MergeConflictDataResponse( +public record MergeConflictDataResponseDto( String firstDocsContent, String secondDocsContent, String originalDocsContent, diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/TeacherResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/TeacherResponseDto.java new file mode 100644 index 00000000..19c5c178 --- /dev/null +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/TeacherResponseDto.java @@ -0,0 +1,26 @@ +package com.project.bumawiki.domain.docs.presentation.dto.response; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.project.bumawiki.domain.docs.domain.Docs; + +public record TeacherResponseDto( + @JsonProperty List teacher, + @JsonProperty List majorTeacher, + @JsonProperty List mentorTeacher +) { + public static TeacherResponseDto from(List teacher, List majorTeacher, List mentorTeacher) { + return new TeacherResponseDto( + convertToDtoList(teacher), + convertToDtoList(majorTeacher), + convertToDtoList(mentorTeacher) + ); + } + + private static List convertToDtoList(List docsList) { + return docsList.stream() + .map(DocsNameAndEnrollResponseDto::new) + .toList(); + } +} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsDiffResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsDiffResponseDto.java index 1ab5bc90..111d6116 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsDiffResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsDiffResponseDto.java @@ -5,15 +5,11 @@ import java.util.ArrayList; import com.project.bumawiki.domain.docs.domain.type.DocsType; -import com.project.bumawiki.domain.docs.presentation.dto.VersionDocsSummaryDto; -import lombok.Getter; - -@Getter public record VersionDocsDiffResponseDto( String title, DocsType docsType, - VersionDocsSummaryDto versionDocs, + VersionDocsSummaryResponseDto versionDocs, ArrayList diff ) { } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsResponseDto.java index 8e16c9f5..2f68119a 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsResponseDto.java @@ -2,23 +2,10 @@ import java.time.LocalDateTime; -import lombok.Getter; - -@Getter -public final class VersionDocsResponseDto { - private final LocalDateTime thisVersionCreatedAt; - private final Long userId; - private final String nickName; - private int index; - - public VersionDocsResponseDto(LocalDateTime thisVersionCreatedAt, Long userId, String nickName) { - this.thisVersionCreatedAt = thisVersionCreatedAt; - this.userId = userId; - this.nickName = nickName; - } - - public void updateIndex(int index) { - this.index = index; - } - +public record VersionDocsResponseDto( + LocalDateTime thisVersionCreatedAt, + Long userId, + String nickName, + int index +) { } diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsSummaryResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsSummaryResponseDto.java new file mode 100644 index 00000000..063b7b6a --- /dev/null +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionDocsSummaryResponseDto.java @@ -0,0 +1,21 @@ +package com.project.bumawiki.domain.docs.presentation.dto.response; + +import java.time.LocalDateTime; + +import com.project.bumawiki.domain.docs.domain.VersionDocs; + +public record VersionDocsSummaryResponseDto( + Integer version, + LocalDateTime thisVersionCreatedAt, + Long userId, + String nickName +) { + public VersionDocsSummaryResponseDto(VersionDocs versionDocs) { + this( + versionDocs.getVersion(), + versionDocs.getCreatedAt(), + versionDocs.getUser().getId(), + versionDocs.getUser().getNickName() + ); + } +} diff --git a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionResponseDto.java b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionResponseDto.java index e08d1d7c..cee53673 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/docs/presentation/dto/response/VersionResponseDto.java @@ -5,25 +5,19 @@ import com.project.bumawiki.domain.docs.domain.Docs; import com.project.bumawiki.domain.docs.domain.type.DocsType; -import lombok.Getter; - -@Getter -public class VersionResponseDto { - private final int length; - private final List versionDocsResponseDto; - private final DocsType docsType; - private final String title; +public record VersionResponseDto( + int length, + List versionDocsResponseDto, + DocsType docsType, + String title +) { public VersionResponseDto(List versionDocsResponseDto, Docs findDocs) { - length = versionDocsResponseDto.size(); - this.versionDocsResponseDto = versionDocsResponseDto; - this.docsType = findDocs.getDocsType(); - this.title = findDocs.getTitle(); - - int index = length; - for (VersionDocsResponseDto docsResponseDto : versionDocsResponseDto) { - docsResponseDto.updateIndex(index); - index -= 1; - } + this( + versionDocsResponseDto.size(), + versionDocsResponseDto, + findDocs.getDocsType(), + findDocs.getTitle() + ); } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/service/CommandDocsService.java b/src/main/java/com/project/bumawiki/domain/docs/service/CommandDocsService.java index 81f0027f..7316299c 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/service/CommandDocsService.java +++ b/src/main/java/com/project/bumawiki/domain/docs/service/CommandDocsService.java @@ -10,8 +10,6 @@ import com.project.bumawiki.domain.docs.implementation.DocsReader; import com.project.bumawiki.domain.docs.implementation.DocsUpdater; import com.project.bumawiki.domain.docs.implementation.DocsValidator; -import com.project.bumawiki.domain.docs.implementation.versiondocs.VersionDocsCreator; -import com.project.bumawiki.domain.docs.implementation.versiondocs.VersionDocsValidator; import com.project.bumawiki.domain.thumbsup.implementation.ThumbsUpDeleter; import com.project.bumawiki.domain.user.domain.User; @@ -28,9 +26,6 @@ public class CommandDocsService { private final DocsDeleter docsDeleter; private final DocsValidator docsValidator; - private final VersionDocsCreator versionDocsCreator; - private final VersionDocsValidator versionDocsValidator; - private final ThumbsUpDeleter thumbsUpDeleter; public void create(Docs docs, User user, String contents) { @@ -50,11 +45,11 @@ public void update(User user, String title, String contents, Integer updatingVer docsValidator.checkUpdateOneSelf(user, docs); docsValidator.checkGood(docs); - if (versionDocsValidator.isConflict(docs, updatingVersion)) { + if (docsValidator.isConflict(docs, updatingVersion)) { docsUpdater.updateStatus(docs, Status.CONFLICTED); } - versionDocsCreator.create(docs, user, contents); + docsCreator.createVersionDocs(docs, user, contents); } public void titleUpdate(String title, String changedTitle) { diff --git a/src/main/java/com/project/bumawiki/domain/docs/service/DocsInformationService.java b/src/main/java/com/project/bumawiki/domain/docs/service/DocsInformationService.java index dc92efb4..e48c5205 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/service/DocsInformationService.java +++ b/src/main/java/com/project/bumawiki/domain/docs/service/DocsInformationService.java @@ -15,11 +15,12 @@ import com.project.bumawiki.domain.docs.domain.repository.DocsRepository; import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository; import com.project.bumawiki.domain.docs.domain.type.DocsType; -import com.project.bumawiki.domain.docs.presentation.dto.ClubResponseDto; -import com.project.bumawiki.domain.docs.presentation.dto.TeacherResponseDto; -import com.project.bumawiki.domain.docs.presentation.dto.VersionDocsSummaryDto; +import com.project.bumawiki.domain.docs.implementation.DocsReader; +import com.project.bumawiki.domain.docs.presentation.dto.response.ClubResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.DocsResponseDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.TeacherResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.VersionDocsDiffResponseDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.VersionDocsSummaryResponseDto; import com.project.bumawiki.domain.docs.presentation.dto.response.VersionResponseDto; import com.project.bumawiki.domain.docs.util.DocsUtil; import com.project.bumawiki.domain.user.domain.User; @@ -34,6 +35,7 @@ public class DocsInformationService { private final DocsRepository docsRepository; private final VersionDocsRepository versionDocsRepository; + private final DocsReader docsReader; public List findAllByTitle(String title) { List docs = docsRepository.findAllByTitle(title); @@ -53,7 +55,7 @@ public DocsResponseDto findDocs(String title) { .map(VersionDocs::getUser) .toList(); - return new DocsResponseDto(docs, contributors); + return new DocsResponseDto(docs, contributors, docsReader.findLastVersion(docs)); } public VersionResponseDto findDocsVersion(String title) { @@ -79,7 +81,7 @@ public VersionDocsDiffResponseDto showVersionDocsDiff(String title, Integer vers LinkedList diff = getDiff(baseVersionDocs, targetVersionDocs); return new VersionDocsDiffResponseDto(docs.getTitle(), docs.getDocsType(), - new VersionDocsSummaryDto(targetVersionDocs), new ArrayList<>(diff)); + new VersionDocsSummaryResponseDto(targetVersionDocs), new ArrayList<>(diff)); } private LinkedList getDiff(Optional baseVersionDocs, @@ -99,7 +101,7 @@ public List findByDocsTypeOrderByEnroll(DocsType docsType) { } public TeacherResponseDto getAllTeacher() { - return new TeacherResponseDto( + return TeacherResponseDto.from( findByDocsType(DocsType.TEACHER), findByDocsType(DocsType.MAJOR_TEACHER), findByDocsType(DocsType.MENTOR_TEACHER) @@ -107,7 +109,7 @@ public TeacherResponseDto getAllTeacher() { } public ClubResponseDto getAllClub() { - return new ClubResponseDto( + return ClubResponseDto.from( findByDocsType(DocsType.CLUB), findByDocsType(DocsType.FREE_CLUB) ); @@ -117,4 +119,7 @@ private List findByDocsType(DocsType docsType) { return docsRepository.findByDocsType(docsType); } + public List findAllVersionDocsByUser(User user) { + return versionDocsRepository.findAllByUser(user); + } } diff --git a/src/main/java/com/project/bumawiki/domain/docs/service/DocsMergeConflictService.java b/src/main/java/com/project/bumawiki/domain/docs/service/DocsMergeConflictService.java index 5addd16c..0c2d94ff 100644 --- a/src/main/java/com/project/bumawiki/domain/docs/service/DocsMergeConflictService.java +++ b/src/main/java/com/project/bumawiki/domain/docs/service/DocsMergeConflictService.java @@ -3,24 +3,20 @@ import java.util.LinkedList; import java.util.List; -import com.project.bumawiki.domain.docs.implementation.DocsReader; - -import com.project.bumawiki.domain.docs.implementation.DocsUpdater; -import com.project.bumawiki.domain.docs.implementation.DocsValidator; -import com.project.bumawiki.domain.docs.implementation.VersionDocsReader; -import com.project.bumawiki.domain.docs.implementation.versiondocs.VersionDocsCreator; - -import com.project.bumawiki.domain.docs.util.DocsUtil; -import com.project.bumawiki.global.util.SecurityUtil; - import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch; import org.springframework.stereotype.Service; import com.project.bumawiki.domain.docs.domain.Docs; import com.project.bumawiki.domain.docs.domain.VersionDocs; import com.project.bumawiki.domain.docs.domain.type.Status; -import com.project.bumawiki.domain.docs.presentation.dto.DocsConflictSolveDto; -import com.project.bumawiki.domain.docs.presentation.dto.MergeConflictDataResponse; +import com.project.bumawiki.domain.docs.implementation.DocsCreator; +import com.project.bumawiki.domain.docs.implementation.DocsReader; +import com.project.bumawiki.domain.docs.implementation.DocsUpdater; +import com.project.bumawiki.domain.docs.implementation.DocsValidator; +import com.project.bumawiki.domain.docs.presentation.dto.request.DocsConflictSolveRequestDto; +import com.project.bumawiki.domain.docs.presentation.dto.response.MergeConflictDataResponseDto; +import com.project.bumawiki.domain.docs.util.DocsUtil; +import com.project.bumawiki.global.util.SecurityUtil; import lombok.RequiredArgsConstructor; @@ -28,18 +24,17 @@ @RequiredArgsConstructor public class DocsMergeConflictService { private final DocsReader docsReader; - private final VersionDocsReader versionDocsReader; - private final VersionDocsCreator versionDocsCreator; private final DocsValidator docsValidator; private final DocsUpdater docsUpdater; + private final DocsCreator docsCreator; - public MergeConflictDataResponse getMergeConflict(String title) { + public MergeConflictDataResponseDto getMergeConflict(String title) { Docs docs = docsReader.findByTitle(title); docsValidator.checkConflicted(docs); // ๋ฒ„์ „ ์ตœ์‹ ์ˆœ 3๊ฐ€์ง€ ์กฐํšŒ๊ฐ€ ์ „์ฒด์—์„œ ์ž๋ฅด๋Š”์ง€ 3๊ฐœ๋งŒ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ํ™•์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค - List docsVersion = versionDocsReader.findTop3ByDocs(docs); + List docsVersion = docsReader.findTop3ByDocs(docs); String firstDocsContent = docsVersion.get(0).getContents(); String secondDocsContent = docsVersion.get(1).getContents(); @@ -49,7 +44,7 @@ public MergeConflictDataResponse getMergeConflict(String title) { LinkedList diff1 = DocsUtil.getDiff(originalDocsContent, firstDocsContent); LinkedList diff2 = DocsUtil.getDiff(originalDocsContent, secondDocsContent); - return new MergeConflictDataResponse( + return new MergeConflictDataResponseDto( firstDocsContent, secondDocsContent, originalDocsContent, @@ -58,13 +53,12 @@ public MergeConflictDataResponse getMergeConflict(String title) { ); } - - public void solveConflict(String title, DocsConflictSolveDto dto) { + public void solveConflict(String title, DocsConflictSolveRequestDto dto) { Docs docs = docsReader.findByTitle(title); docsValidator.checkConflicted(docs); - versionDocsCreator.create( + docsCreator.create( docs, SecurityUtil.getCurrentUserWithLogin(), dto.contents() diff --git a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/ThumbsUpCheckController.java b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/ThumbsUpCheckController.java index 04972847..5e397f08 100644 --- a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/ThumbsUpCheckController.java +++ b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/ThumbsUpCheckController.java @@ -7,6 +7,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import com.project.bumawiki.domain.thumbsup.service.ThumbsUpCheckService; import com.project.bumawiki.global.util.SecurityUtil; import lombok.RequiredArgsConstructor; @@ -14,13 +15,13 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/docs/like") -public class DocsCheckYouLikeThisController { - private final DocsCheckYouLikeThisService docsCheckYouLikeThisService; +public class ThumbsUpCheckController { + private final ThumbsUpCheckService thumbsUpCheckService; @GetMapping("/{docsId}") @ResponseStatus(HttpStatus.OK) public Boolean checkYouLikeThis(@PathVariable Long docsId) { - return docsCheckYouLikeThisService.checkUserLikeThisDocs( + return thumbsUpCheckService.checkUserLikeThisDocs( docsId, SecurityUtil.getCurrentUserWithLogin() ); } diff --git a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpRequestDto.java b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpRequestDto.java index b0a31ff3..f2bbdda6 100644 --- a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpRequestDto.java +++ b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpRequestDto.java @@ -1,7 +1,6 @@ package com.project.bumawiki.domain.thumbsup.presentation.dto; import jakarta.validation.constraints.NotNull; -import lombok.Getter; public record ThumbsUpRequestDto( @NotNull diff --git a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpResponseDto.java b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpResponseDto.java index 815b0178..9f818c93 100644 --- a/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/thumbsup/presentation/dto/ThumbsUpResponseDto.java @@ -1,18 +1,17 @@ package com.project.bumawiki.domain.thumbsup.presentation.dto; -import com.fasterxml.jackson.annotation.JsonProperty; import com.project.bumawiki.domain.docs.domain.Docs; import com.project.bumawiki.domain.docs.domain.type.DocsType; -public class ThumbsUpResponseDto { - - @JsonProperty - private final String title; - @JsonProperty - private final DocsType docsType; +public record ThumbsUpResponseDto( + String title, + DocsType docsType +) { public ThumbsUpResponseDto(Docs docs) { - this.title = docs.getTitle(); - this.docsType = docs.getDocsType(); + this( + docs.getTitle(), + docs.getDocsType() + ); } } diff --git a/src/main/java/com/project/bumawiki/domain/thumbsup/service/ThumbsUpCheckService.java b/src/main/java/com/project/bumawiki/domain/thumbsup/service/ThumbsUpCheckService.java index 04621d44..bb53208c 100644 --- a/src/main/java/com/project/bumawiki/domain/thumbsup/service/ThumbsUpCheckService.java +++ b/src/main/java/com/project/bumawiki/domain/thumbsup/service/ThumbsUpCheckService.java @@ -12,7 +12,7 @@ @Service @RequiredArgsConstructor @Transactional(readOnly = true) -public class DocsCheckYouLikeThisService { +public class ThumbsUpCheckService { private final ThumbsUpReader thumbsUpReader; private final DocsValidator docsValidator; diff --git a/src/main/java/com/project/bumawiki/domain/user/UserFacade.java b/src/main/java/com/project/bumawiki/domain/user/UserFacade.java index 90fc32a9..d3673b5f 100644 --- a/src/main/java/com/project/bumawiki/domain/user/UserFacade.java +++ b/src/main/java/com/project/bumawiki/domain/user/UserFacade.java @@ -5,8 +5,6 @@ import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.domain.user.domain.repository.UserRepository; import com.project.bumawiki.domain.user.exception.UserNotFoundException; -import com.project.bumawiki.domain.user.exception.UserNotLoginException; -import com.project.bumawiki.global.util.SecurityUtil; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/com/project/bumawiki/domain/user/domain/User.java b/src/main/java/com/project/bumawiki/domain/user/domain/User.java index 2a34ceda..786b780c 100644 --- a/src/main/java/com/project/bumawiki/domain/user/domain/User.java +++ b/src/main/java/com/project/bumawiki/domain/user/domain/User.java @@ -2,9 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; -import com.project.bumawiki.domain.contribute.domain.Contribute; import com.project.bumawiki.domain.thumbsup.domain.ThumbsUp; import com.project.bumawiki.domain.thumbsup.exception.AlreadyThumbsUpException; import com.project.bumawiki.domain.thumbsup.exception.YouDontThumbsUpThisDocs; @@ -57,9 +55,6 @@ public class User { @Enumerated(EnumType.STRING) @Column(length = 16) private Authority authority; - @Builder.Default - @OneToMany(mappedBy = "contributor", cascade = CascadeType.ALL) - private List contributeDocs = new ArrayList<>(); public void cancelThumbsUp(ThumbsUp thumbsUp) { boolean removed = thumbsUps @@ -85,7 +80,7 @@ public List getList() { return this.thumbsUps .stream() .map(ThumbsUp::getDto) - .collect(Collectors.toList()); + .toList(); } public User update(BsmResourceResponse resource) { @@ -99,8 +94,4 @@ public User update(BsmResourceResponse resource) { public void changeUserAuthority(Authority authority) { this.authority = authority; } - - public void updateContributeDocs(List contribute) { - this.contributeDocs = contribute; - } } diff --git a/src/main/java/com/project/bumawiki/domain/user/presentation/UserInfoController.java b/src/main/java/com/project/bumawiki/domain/user/presentation/UserInfoController.java index 4ac18f2f..ac61679d 100644 --- a/src/main/java/com/project/bumawiki/domain/user/presentation/UserInfoController.java +++ b/src/main/java/com/project/bumawiki/domain/user/presentation/UserInfoController.java @@ -1,37 +1,41 @@ package com.project.bumawiki.domain.user.presentation; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import com.project.bumawiki.domain.docs.service.DocsInformationService; import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.domain.user.presentation.dto.UserResponseDto; import com.project.bumawiki.domain.user.service.UserInfoService; +import com.project.bumawiki.global.util.SecurityUtil; import lombok.RequiredArgsConstructor; -@Validated @RequiredArgsConstructor @RestController -@RequestMapping("/api") +@RequestMapping("/api/user") public class UserInfoController { private final UserInfoService userInfoService; + private final DocsInformationService docsInformationService; - @GetMapping("/user") - public ResponseEntity findUserInfo() { - User loginUser = userInfoService.getLoginUser(); - UserResponseDto response = new UserResponseDto(loginUser); - return ResponseEntity.ok().body(response); + @GetMapping + @ResponseStatus(HttpStatus.OK) + public UserResponseDto findUserInfo() { + User user = SecurityUtil.getCurrentUserWithLogin(); + return new UserResponseDto(user, docsInformationService.findAllVersionDocsByUser(user)); } - @GetMapping("/user/id/{id}") + @GetMapping("/{id}") public ResponseEntity findAnotherUserInFo(@PathVariable Long id) { User foundUser = userInfoService.findAnotherInfo(id); - UserResponseDto response = new UserResponseDto(foundUser); + UserResponseDto response = new UserResponseDto(foundUser, + docsInformationService.findAllVersionDocsByUser(foundUser)); return ResponseEntity.ok().body(response); } diff --git a/src/main/java/com/project/bumawiki/domain/user/presentation/dto/UserResponseDto.java b/src/main/java/com/project/bumawiki/domain/user/presentation/dto/UserResponseDto.java index 1b897d9e..05de6a9c 100644 --- a/src/main/java/com/project/bumawiki/domain/user/presentation/dto/UserResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/user/presentation/dto/UserResponseDto.java @@ -1,15 +1,12 @@ package com.project.bumawiki.domain.user.presentation.dto; -import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; -import com.project.bumawiki.domain.contribute.domain.Contribute; -import com.project.bumawiki.domain.contribute.dto.ContributeResponseDto; +import com.project.bumawiki.domain.docs.domain.VersionDocs; +import com.project.bumawiki.domain.docs.presentation.dto.response.ContributeDocsResponseDto; import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.domain.user.domain.authority.Authority; -import jakarta.validation.constraints.NotNull; import lombok.Getter; @Getter @@ -24,25 +21,17 @@ public class UserResponseDto { private final Authority authority; - private final List contributeDocs; + private final List contributeDocs; - public UserResponseDto(User user) { + public UserResponseDto(User user, List versionDocs) { this.id = user.getId(); this.email = user.getEmail(); this.nickName = user.getNickName(); this.authority = user.getAuthority(); this.name = user.getName(); - List contributeDocs = getContributeReversed(user); - this.contributeDocs = contributeDocs + this.contributeDocs = versionDocs .stream() - .map(ContributeResponseDto::new) - .collect(Collectors.toList()); - } - - @NotNull - private static List getContributeReversed(User user) { - List contributeDocs = user.getContributeDocs(); - Collections.reverse(contributeDocs); - return contributeDocs; + .map(ContributeDocsResponseDto::new) + .toList(); } } diff --git a/src/main/java/com/project/bumawiki/domain/user/service/UserInfoService.java b/src/main/java/com/project/bumawiki/domain/user/service/UserInfoService.java index 1aa08f68..b9a7a974 100644 --- a/src/main/java/com/project/bumawiki/domain/user/service/UserInfoService.java +++ b/src/main/java/com/project/bumawiki/domain/user/service/UserInfoService.java @@ -3,7 +3,6 @@ import com.project.bumawiki.domain.user.domain.User; import com.project.bumawiki.domain.user.domain.repository.UserRepositoryMapper; import com.project.bumawiki.global.annotation.ServiceWithTransactionalReadOnly; -import com.project.bumawiki.global.util.SecurityUtil; import lombok.RequiredArgsConstructor; @@ -13,11 +12,6 @@ public class UserInfoService { private final UserRepositoryMapper userRepositoryMapper; - public User getLoginUser() { - Long id = SecurityUtil.getCurrentUserWithLogin().getId(); - return userRepositoryMapper.getById(id); - } - public User findAnotherInfo(Long userId) { return userRepositoryMapper.getById(userId); } diff --git a/src/main/java/com/project/bumawiki/global/annotation/Implementation.java b/src/main/java/com/project/bumawiki/global/annotation/Implementation.java index 63925934..ed8bc4c0 100644 --- a/src/main/java/com/project/bumawiki/global/annotation/Implementation.java +++ b/src/main/java/com/project/bumawiki/global/annotation/Implementation.java @@ -1,7 +1,15 @@ package com.project.bumawiki.global.annotation; +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.*; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + import org.springframework.stereotype.Component; +@Target(TYPE) +@Retention(RUNTIME) @Component public @interface Implementation { } diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 154ee5f2..713f1b4c 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -1,5 +1,5 @@ spring: - datasource : + datasource: url: jdbc:h2:mem:test driverClassName: org.h2.Driver username: sa