Skip to content

Commit

Permalink
refactor: 아카이브 테이블 구조 변경 (#48)
Browse files Browse the repository at this point in the history
* refactor: 아카이브 테이블 구조 변경

* chore: flyway 업데이트

* refactor: TEXT 컬럼 옵션 표현

* refactor: template, temporal memo archive 로직 위치 변경 & url 수정
  • Loading branch information
shinyubin989 authored Jan 26, 2024
1 parent 9a56f0e commit dc592e9
Show file tree
Hide file tree
Showing 37 changed files with 717 additions and 727 deletions.
14 changes: 14 additions & 0 deletions src/main/java/com/baro/archive/application/ArchiveService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.baro.archive.application;

import com.baro.archive.domain.ArchiveRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@RequiredArgsConstructor
@Transactional
@Service
public class ArchiveService {

private final ArchiveRepository archiveRepository;
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.baro.memo.domain;
package com.baro.archive.domain;

import com.baro.common.entity.BaseEntity;
import com.baro.member.domain.Member;
import com.baro.memo.domain.MemoContent;
import com.baro.memofolder.domain.MemoFolder;
import com.baro.template.domain.Template;
import jakarta.persistence.AttributeOverride;
import jakarta.persistence.Column;
import jakarta.persistence.ConstraintMode;
Expand All @@ -16,15 +18,13 @@
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Memo extends BaseEntity {
public class Archive extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -43,13 +43,28 @@ public class Memo extends BaseEntity {
@AttributeOverride(name = "content", column = @Column(name = "content", nullable = false))
private MemoContent content;

private Memo(Member member, MemoFolder memoFolder, MemoContent content) {
@ManyToOne
@JoinColumn(name = "template_id", nullable = true, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Template template;

public Archive(Member member, MemoFolder memoFolder, MemoContent content, Template template) {
this.member = member;
this.memoFolder = memoFolder;
this.content = content;
this.template = template;
}

public static Memo of(Member member, MemoFolder memoFolder, MemoContent content) {
return new Memo(member, memoFolder, content);
public Archive(Member member, MemoFolder memoFolder, MemoContent content) {
this.member = member;
this.memoFolder = memoFolder;
this.content = content;
}

public Archive(Long id, Member member, MemoFolder memoFolder, MemoContent content, Template template) {
this.id = id;
this.member = member;
this.memoFolder = memoFolder;
this.content = content;
this.template = template;
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/baro/archive/domain/ArchiveRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.baro.archive.domain;

import java.util.List;

public interface ArchiveRepository {

Archive getById(Long id);

boolean existsByMemberIdAndTemplateId(Long memberId, Long templateId);

Archive getByMemberIdAndTemplateId(Long memberId, Long templateId);

List<Archive> findAll();

Archive save(Archive archive);

void delete(Archive archive);
}
16 changes: 16 additions & 0 deletions src/main/java/com/baro/archive/exception/ArchiveException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.baro.archive.exception;

import com.baro.common.exception.RequestException;
import com.baro.common.exception.RequestExceptionType;
import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
public class ArchiveException extends RequestException {

private final ArchiveExceptionType exceptionType;

@Override
public RequestExceptionType exceptionType() {
return exceptionType;
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/baro/archive/exception/ArchiveExceptionType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.baro.archive.exception;

import com.baro.common.exception.RequestExceptionType;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;

@RequiredArgsConstructor
public enum ArchiveExceptionType implements RequestExceptionType {

NOT_EXIST_ARCHIVE("AR01", "존재하지 않는 아카이브 입니다.", HttpStatus.NOT_FOUND),
ARCHIVED_TEMPLATE("AR02", "이미 저장한 템플릿입니다.", HttpStatus.BAD_REQUEST),
NOT_ARCHIVED_TEMPLATE("AR03", "저장하지 않은 템플릿입니다.", HttpStatus.BAD_REQUEST),
;

private final String errorCode;
private final String errorMessage;
private final HttpStatus httpStatus;

@Override
public String errorCode() {
return errorCode;
}

@Override
public String errorMessage() {
return errorMessage;
}

@Override
public HttpStatus httpStatus() {
return httpStatus;
}
}
12 changes: 12 additions & 0 deletions src/main/java/com/baro/archive/infra/ArchiveJpaRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.baro.archive.infra;

import com.baro.archive.domain.Archive;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ArchiveJpaRepository extends JpaRepository<Archive, Long> {

boolean existsByMemberIdAndTemplateId(Long memberId, Long templateId);

Optional<Archive> findByMemberIdAndTemplateId(Long memberId, Long templateId);
}
48 changes: 48 additions & 0 deletions src/main/java/com/baro/archive/infra/ArchiveRepositoryImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.baro.archive.infra;

import com.baro.archive.domain.Archive;
import com.baro.archive.domain.ArchiveRepository;
import com.baro.archive.exception.ArchiveException;
import com.baro.archive.exception.ArchiveExceptionType;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@RequiredArgsConstructor
@Repository
public class ArchiveRepositoryImpl implements ArchiveRepository {

private final ArchiveJpaRepository archiveJpaRepository;

@Override
public Archive getById(Long id) {
return archiveJpaRepository.findById(id)
.orElseThrow(() -> new ArchiveException(ArchiveExceptionType.NOT_EXIST_ARCHIVE));
}

@Override
public boolean existsByMemberIdAndTemplateId(Long memberId, Long templateId) {
return archiveJpaRepository.existsByMemberIdAndTemplateId(memberId, templateId);
}

@Override
public Archive getByMemberIdAndTemplateId(Long memberId, Long templateId) {
return archiveJpaRepository.findByMemberIdAndTemplateId(memberId, templateId)
.orElseThrow(() -> new ArchiveException(ArchiveExceptionType.NOT_ARCHIVED_TEMPLATE));
}

@Override
public List<Archive> findAll() {
return archiveJpaRepository.findAll();
}

@Override
public Archive save(Archive archive) {
return archiveJpaRepository.save(archive);
}

@Override
public void delete(Archive archive) {
archiveJpaRepository.delete(archive);
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/baro/archive/presentation/ArchiveController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.baro.archive.presentation;

import com.baro.archive.application.ArchiveService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequiredArgsConstructor
@RequestMapping("/archives")
@RestController
public class ArchiveController {

private final ArchiveService archiveService;
}
30 changes: 15 additions & 15 deletions src/main/java/com/baro/memo/application/TemporalMemoService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.baro.memo.application;


import com.baro.archive.domain.Archive;
import com.baro.archive.domain.ArchiveRepository;
import com.baro.member.domain.Member;
import com.baro.member.domain.MemberRepository;
import com.baro.memo.application.dto.ApplyCorrectionCommand;
Expand All @@ -13,9 +15,7 @@
import com.baro.memo.application.dto.SaveTemporalMemoCommand;
import com.baro.memo.application.dto.SaveTemporalMemoResult;
import com.baro.memo.application.dto.UpdateTemporalMemoCommand;
import com.baro.memo.domain.Memo;
import com.baro.memo.domain.MemoContent;
import com.baro.memo.domain.MemoRepository;
import com.baro.memo.domain.TemporalMemo;
import com.baro.memo.domain.TemporalMemoRepository;
import com.baro.memo.exception.TemporalMemoException;
Expand All @@ -37,10 +37,10 @@
@Service
public class TemporalMemoService {

private final MemoRepository memoRepository;
private final TemporalMemoRepository temporalMemoRepository;
private final MemberRepository memberRepository;
private final MemoFolderRepository memoFolderRepository;
private final ArchiveRepository archiveRepository;

public SaveTemporalMemoResult saveTemporalMemo(SaveTemporalMemoCommand command) {
Member member = memberRepository.getById(command.memberId());
Expand All @@ -54,18 +54,6 @@ public void updateTemporalMemo(UpdateTemporalMemoCommand command) {
temporalMemo.updateContent(MemoContent.from(command.content()));
}

public ArchiveTemporalMemoResult archiveTemporalMemo(ArchiveTemporalMemoCommand command) {
Member member = memberRepository.getById(command.memberId());
TemporalMemo temporalMemo = temporalMemoRepository.getById(command.temporalMemoId());
temporalMemo.matchOwner(member.getId());
MemoFolder memoFolder = memoFolderRepository.getById(command.memoFolderId());
memoFolder.matchOwner(member.getId());

Memo memo = memoRepository.save(Memo.of(member, memoFolder, temporalMemo.getArchivingContent()));
temporalMemo.archivedAsMemo(memo);
return ArchiveTemporalMemoResult.from(memo);
}

public void deleteTemporalMemo(DeleteTemporalMemoCommand command) {
TemporalMemo temporalMemo = temporalMemoRepository.getById(command.temporalMemoId());
temporalMemo.matchOwner(command.memberId());
Expand Down Expand Up @@ -111,4 +99,16 @@ private List<FindTemporalMemoResult> toTemporalMemoResults(List<TemporalMemo> te
.sorted(Comparator.comparing(FindTemporalMemoResult::createdAt))
.toList();
}

public ArchiveTemporalMemoResult archiveTemporalMemo(ArchiveTemporalMemoCommand command) {
Member member = memberRepository.getById(command.memberId());
TemporalMemo temporalMemo = temporalMemoRepository.getById(command.temporalMemoId());
temporalMemo.matchOwner(member.getId());
MemoFolder memoFolder = memoFolderRepository.getById(command.memoFolderId());
memoFolder.matchOwner(member.getId());

Archive archive = archiveRepository.save(new Archive(member, memoFolder, temporalMemo.getContent()));
temporalMemo.archived(archive);
return ArchiveTemporalMemoResult.from(archive);
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.baro.memo.application.dto;

import com.baro.memo.domain.Memo;
import com.baro.archive.domain.Archive;

public record ArchiveTemporalMemoResult(
Long id
) {

public static ArchiveTemporalMemoResult from(Memo memo) {
return new ArchiveTemporalMemoResult(memo.getId());
public static ArchiveTemporalMemoResult from(Archive archive) {
return new ArchiveTemporalMemoResult(archive.getId());
}
}
12 changes: 0 additions & 12 deletions src/main/java/com/baro/memo/domain/MemoRepository.java

This file was deleted.

20 changes: 11 additions & 9 deletions src/main/java/com/baro/memo/domain/TemporalMemo.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.baro.memo.domain;

import com.baro.archive.domain.Archive;
import com.baro.common.entity.BaseEntity;
import com.baro.member.domain.Member;
import com.baro.memo.exception.TemporalMemoException;
Expand Down Expand Up @@ -40,23 +41,24 @@ public class TemporalMemo extends BaseEntity {
private MemoContent content;

@Embedded
@Column(columnDefinition = "TEXT")
@AttributeOverride(name = "content", column = @Column(name = "correction_content"))
private MemoContent correctionContent;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "memo_id", nullable = true, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Memo memo;
@JoinColumn(name = "archive_id", nullable = true, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Archive archive;

public TemporalMemo(Long id, Member member, MemoContent content, MemoContent correctionContent, Memo memo) {
public TemporalMemo(Long id, Member member, MemoContent content, MemoContent correctionContent, Archive archive) {
this.id = id;
this.member = member;
this.content = content;
this.correctionContent = correctionContent;
this.memo = memo;
this.archive = archive;
}

public TemporalMemo(Member member, MemoContent content, MemoContent correctionContent, Memo memo) {
this(null, member, content, correctionContent, memo);
public TemporalMemo(Member member, MemoContent content, MemoContent correctionContent, Archive archive) {
this(null, member, content, correctionContent, archive);
}

public static TemporalMemo of(Member member, String content) {
Expand Down Expand Up @@ -84,8 +86,8 @@ public MemoContent getArchivingContent() {
return this.content;
}

public void archivedAsMemo(Memo memo) {
this.memo = memo;
public void archived(Archive archive) {
this.archive = archive;
}

public void applyCorrection(MemoContent correctionContent) {
Expand All @@ -96,6 +98,6 @@ public void applyCorrection(MemoContent correctionContent) {
}

public boolean isArchived() {
return Objects.nonNull(this.memo);
return Objects.nonNull(this.archive);
}
}

This file was deleted.

Loading

0 comments on commit dc592e9

Please sign in to comment.