Skip to content

Commit

Permalink
fix(docs): DocsValidator 컨플릭트 해결
Browse files Browse the repository at this point in the history
  • Loading branch information
마현우 committed Apr 9, 2024
2 parents 16f77fd + ab4b86b commit 83b057c
Show file tree
Hide file tree
Showing 13 changed files with 103 additions and 132 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

Expand All @@ -31,7 +29,7 @@ public class Docs {
private String title;

@Column
private int enroll;
private Integer enroll;

@Enumerated(EnumType.STRING)
private DocsType docsType;
Expand All @@ -41,11 +39,11 @@ public class Docs {
@Enumerated(EnumType.STRING)
private Status status;

public Docs(String title, int enroll, DocsType docsType, Status status) {
public Docs(String title, int enroll, DocsType docsType) {
this.title = title;
this.enroll = enroll;
this.docsType = docsType;
this.status = status;
this.status = Status.GOOD;
}

public void updateDocsType(DocsType docsType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,27 @@

import org.springframework.data.annotation.CreatedDate;

import com.project.bumawiki.domain.contribute.domain.Contribute;
import com.project.bumawiki.domain.user.domain.User;

import jakarta.persistence.CascadeType;
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.IdClass;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToOne;
import jakarta.validation.constraints.NotNull;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Getter
@Builder
@IdClass(VersionDocsPk.class)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class VersionDocs {

@Id
private int version;
private Integer version;

@Id
@ManyToOne(fetch = FetchType.LAZY)
Expand All @@ -51,5 +41,10 @@ public class VersionDocs {
@JoinColumn(name = "user_id")
private User contributor;


public VersionDocs(int version, Docs docs, String contents, User contributor) {
this.version = version;
this.docs = docs;
this.contents = contents;
this.contributor = contributor;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ public interface DocsRepository extends JpaRepository<Docs, Long>, CustomDocsRep

@Query("select d from Docs d order by d.lastModifiedAt desc")
List<Docs> findByLastModifiedAtAll();

boolean existsByTitle(String title);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
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.domain.user.domain.User;
import com.project.bumawiki.global.annotation.Implementation;

import lombok.RequiredArgsConstructor;

@Implementation
@RequiredArgsConstructor
public class DocsCreator {
private final DocsRepository docsRepository;
private final VersionDocsRepository versionDocsRepository;

public void create(Docs docs, User user, String contents) {
docsRepository.save(docs);

versionDocsRepository.save(
new VersionDocs(
0,
docs,
contents,
user
)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.project.bumawiki.domain.docs.implementation;

import com.project.bumawiki.domain.docs.domain.repository.DocsRepository;
import com.project.bumawiki.global.annotation.Implementation;

import lombok.RequiredArgsConstructor;

@Implementation
@RequiredArgsConstructor
public class DocsDeleter {
private final DocsRepository docsRepository;

public void delete(Long id) {
docsRepository.deleteById(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.project.bumawiki.domain.docs.implementation;

import java.util.Optional;

import com.project.bumawiki.domain.docs.domain.Docs;
import com.project.bumawiki.domain.docs.domain.repository.DocsRepository;
import com.project.bumawiki.domain.docs.exception.DocsTitleAlreadyExistException;
import com.project.bumawiki.global.annotation.Implementation;
import com.project.bumawiki.global.error.exception.BumawikiException;
import com.project.bumawiki.global.error.exception.ErrorCode;
Expand All @@ -16,10 +13,9 @@
public class DocsValidator {
private final DocsRepository docsRepository;

public void checkTitleAlreadyExist(String title) {
Optional<Docs> byTitle = docsRepository.findByTitle(title);
if (byTitle.isPresent()) {
throw DocsTitleAlreadyExistException.EXCEPTION;
public void checkTitleAlreadyExist(Docs docs) {
if (docsRepository.existsByTitle(docs.getTitle())) {
throw new BumawikiException(ErrorCode.DOCS_TITLE_ALREADY_EXIST);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.project.bumawiki.domain.docs.presentation;

import java.io.IOException;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
Expand All @@ -10,6 +9,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
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.presentation.dto.request.DocsCreateRequestDto;
Expand All @@ -18,6 +18,7 @@
import com.project.bumawiki.domain.docs.presentation.dto.request.DocsUpdateRequestDto;
import com.project.bumawiki.domain.docs.service.DocsCreateService;
import com.project.bumawiki.domain.docs.service.DocsUpdateService;
import com.project.bumawiki.global.util.SecurityUtil;

import lombok.RequiredArgsConstructor;

Expand All @@ -31,13 +32,14 @@ public class DocsCreateUpdateController {
private final DocsCreateService docsCreateService;

@PostMapping("/create")
public ResponseEntity<Long> createDocs(@RequestBody DocsCreateRequestDto request) throws IOException {
return ResponseEntity.ok(docsCreateService.execute(request));
@ResponseStatus(HttpStatus.NO_CONTENT)
public void createDocs(@RequestBody DocsCreateRequestDto request) {
docsCreateService.execute(request.toEntity(), SecurityUtil.getCurrentUserWithLogin(), request.contents());
}

@PutMapping("/update/{title}")
public ResponseEntity<Long> updateDocs(@RequestHeader("Authorization") String bearer, @PathVariable String title,
@RequestBody DocsUpdateRequestDto request) throws IOException {
@RequestBody DocsUpdateRequestDto request) {
return ResponseEntity.ok(docsUpdateService.execute(bearer, title, request));
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,27 @@
package com.project.bumawiki.domain.docs.presentation;

import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
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.DocsDeleteService;

import lombok.RequiredArgsConstructor;

@Validated
@RequiredArgsConstructor
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/docs")
public class DocsDeleteController {
private final DocsDeleteService docsDeleteService;

@DeleteMapping("delete/{id}")
public ResponseEntity<Long> deleteDocs(@PathVariable Long id) {
return ResponseEntity.ok(docsDeleteService.execute(id));
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteDocs(@PathVariable Long id) {
docsDeleteService.execute(id);
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
package com.project.bumawiki.domain.docs.presentation.dto.request;

import com.project.bumawiki.domain.docs.domain.Docs;
import com.project.bumawiki.domain.docs.domain.type.DocsType;

import jakarta.validation.constraints.NotBlank;
import lombok.Getter;

@Getter
public class DocsCreateRequestDto {

public record DocsCreateRequestDto(
@NotBlank
private String title;

String title,
@NotBlank
private int enroll;

Integer enroll,
@NotBlank
private String contents;

String contents,
@NotBlank
private DocsType docsType;

public void updateContent(String setContent) {
this.contents = setContent;
DocsType docsType
) {

public Docs toEntity() {
return new Docs(
title,
enroll,
docsType
);
}
}
Original file line number Diff line number Diff line change
@@ -1,79 +1,25 @@
package com.project.bumawiki.domain.docs.service;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.project.bumawiki.domain.contribute.domain.Contribute;
import com.project.bumawiki.domain.contribute.service.ContributeService;
import com.project.bumawiki.domain.docs.domain.Docs;
import com.project.bumawiki.domain.docs.domain.VersionDocs;
import com.project.bumawiki.domain.docs.domain.repository.DocsRepositoryMapper;
import com.project.bumawiki.domain.docs.domain.repository.VersionDocsRepository;
import com.project.bumawiki.domain.docs.presentation.dto.request.DocsCreateRequestDto;
import com.project.bumawiki.domain.image.service.ImageService;
import com.project.bumawiki.domain.docs.implementation.DocsCreator;
import com.project.bumawiki.domain.docs.implementation.DocsValidator;
import com.project.bumawiki.domain.user.domain.User;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@Transactional
@RequiredArgsConstructor
public class DocsCreateService {
private final VersionDocsRepository versionDocsRepository;
private final ImageService imageService;
private final ContributeService contributeService;
private final DocsRepositoryMapper docsRepositoryMapper;

private static void setVersionDocs(final Docs docs, final VersionDocs savedVersionDocs,
final Contribute contribute) {
List<VersionDocs> versionDocs = new ArrayList<>();

versionDocs.add(savedVersionDocs);

savedVersionDocs.updateContributor(contribute);

docs.setVersionDocs(versionDocs);
}

@Transactional
public Long execute(final DocsCreateRequestDto docsCreateRequestDto) throws IOException {

docsRepositoryMapper.checkTitleAlreadyExist(docsCreateRequestDto.getTitle());

Docs docs = docsRepositoryMapper.createDocs(docsCreateRequestDto);

VersionDocs savedVersionDocs = saveVersionDocs(docsCreateRequestDto, docs.getId());
Contribute contribute = contributeService.setContribute(savedVersionDocs);

setVersionDocs(docs, savedVersionDocs, contribute);

return docs.getId();
}

/**
* 프론트가 [사진1]이라고 보낸거 우리가 저장한 이미지 주소로 바꾸는 로직
*/
public void setImageUrlInContents(final DocsCreateRequestDto docsCreateRequestDto, final ArrayList<String> urls) {
String content = docsCreateRequestDto.getContents();
for (String url : urls) {
content = content.replaceFirst("<<사진>>", url);
}
docsCreateRequestDto.updateContent(content);
}
private final DocsValidator docsValidator;
private final DocsCreator docsCreator;

private VersionDocs saveVersionDocs(final DocsCreateRequestDto docsCreateRequestDto, final Long id) {
return versionDocsRepository.save(
VersionDocs.builder()
.docsId(id)
.contents(docsCreateRequestDto.getContents())
.thisVersionCreatedAt(LocalDateTime.now())
.version(1)
.build()
);
public void execute(Docs docs, User user, String contents) {
docsValidator.checkTitleAlreadyExist(docs);
docsCreator.create(docs, user, contents);
}
}

Expand Down
Loading

0 comments on commit 83b057c

Please sign in to comment.