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 index e2d08e22..62a6bdd1 100644 --- a/src/main/java/com/project/bumawiki/domain/contribute/dto/ContributeResponseDto.java +++ b/src/main/java/com/project/bumawiki/domain/contribute/dto/ContributeResponseDto.java @@ -2,7 +2,7 @@ import java.time.LocalDateTime; -import com.project.bumawiki.domain.contribute.domain.Contribute; +import com.project.bumawiki.domain.docs.domain.VersionDocs; import lombok.Getter; @@ -14,14 +14,14 @@ public class ContributeResponseDto { private final Long docsId; private final LocalDateTime createTime; private final String title; - private final Long versionDocsId; + private final Integer version; - 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(); + public ContributeResponseDto(VersionDocs versionDocs) { + this.userId = versionDocs.getUser().getId(); + this.userNickName = versionDocs.getUser().getNickName(); + this.docsId = versionDocs.getDocs().getId(); + this.createTime = versionDocs.getCreatedAt(); + this.title = versionDocs.getDocs().getTitle(); + this.version = versionDocs.getVersion(); } } 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..1e415ee8 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, + .select(constructor(VersionDocsResponseDto.class, versionDocs.createdAt, user.id, user.nickName)) .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..7f1f0269 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 @@ -3,6 +3,7 @@ import java.util.List; import java.util.Optional; +import com.project.bumawiki.domain.user.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.lang.NonNull; @@ -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/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..5683e37b 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,18 +1,23 @@ 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.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; import lombok.RequiredArgsConstructor; +import java.util.List; + @Implementation @RequiredArgsConstructor 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..865281c3 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,6 +1,7 @@ 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; @@ -16,6 +17,7 @@ @RequiredArgsConstructor public class DocsValidator { private final DocsRepository docsRepository; + private final DocsReader docsReader; public void checkTitleAlreadyExist(Docs docs) { if (docsRepository.existsByTitle(docs.getTitle())) { @@ -60,4 +62,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..aeee74ae 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 @@ -41,7 +41,7 @@ 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()); 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 index dede042a..9e03866f 100644 --- 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 @@ -17,7 +17,7 @@ public class VersionDocsSummaryDto { public VersionDocsSummaryDto(VersionDocs versionDocs) { User contributor = versionDocs.getUser(); this.version = versionDocs.getVersion(); - this.thisVersionCreatedAt = versionDocs.getThisVersionCreatedAt(); + this.thisVersionCreatedAt = versionDocs.getCreatedAt(); this.nickName = contributor.getNickName(); this.userId = contributor.getId(); } 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..7a2dcf99 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 @@ -38,7 +38,7 @@ private String getSimpleContents(Docs docs) { } private String getContents(Docs docs) { - List docsVersion = docs.getDocsVersion(); + 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..b3683655 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; @@ -29,10 +28,7 @@ public class DocsResponseDto { 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); - + public DocsResponseDto(Docs docs, List contributors, VersionDocs versionDocs) { this.id = docs.getId(); this.title = docs.getTitle(); this.contents = versionDocs.getContents(); @@ -42,9 +38,9 @@ public DocsResponseDto(Docs docs, List contributors) { this.isDocsDetail = true; this.contributors = contributors.stream() .map(SimpleUserDto::new) - .collect(Collectors.toList()); + .toList(); this.status = docs.getStatus(); - this.version = docs.getLastVersion(); + this.version = versionDocs.getVersion(); this.thumbnail = DocsUtil.getThumbnail(versionDocs.getContents()); } } 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..b4ab5d38 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 @@ -7,9 +7,6 @@ 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, 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..1b63c8fa 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 @@ -5,6 +5,8 @@ import java.util.List; import java.util.Optional; +import com.project.bumawiki.domain.docs.implementation.DocsReader; + import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -34,6 +36,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 +56,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) { @@ -117,4 +120,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..f688adfa 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,12 +3,11 @@ import java.util.LinkedList; import java.util.List; +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.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; @@ -28,10 +27,9 @@ @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) { Docs docs = docsReader.findByTitle(title); @@ -39,7 +37,7 @@ public MergeConflictDataResponse getMergeConflict(String 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(); @@ -64,7 +62,7 @@ public void solveConflict(String title, DocsConflictSolveDto dto) { 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..afbcf3e5 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 @@ -1,5 +1,7 @@ package com.project.bumawiki.domain.thumbsup.presentation; +import com.project.bumawiki.domain.thumbsup.service.ThumbsUpCheckService; + import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -14,13 +16,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/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/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..83593cac 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,10 +1,14 @@ package com.project.bumawiki.domain.user.presentation; +import com.project.bumawiki.domain.docs.service.DocsInformationService; +import com.project.bumawiki.global.util.SecurityUtil; + +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.user.domain.User; @@ -13,25 +17,26 @@ 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..673f1d00 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.user.domain.User; import com.project.bumawiki.domain.user.domain.authority.Authority; -import jakarta.validation.constraints.NotNull; import lombok.Getter; @Getter @@ -26,23 +23,15 @@ public class UserResponseDto { 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; + .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..66ad0bf1 100644 --- a/src/main/java/com/project/bumawiki/global/annotation/Implementation.java +++ b/src/main/java/com/project/bumawiki/global/annotation/Implementation.java @@ -2,6 +2,14 @@ import org.springframework.stereotype.Component; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.*; + +@Target(TYPE) +@Retention(RUNTIME) @Component public @interface Implementation { }