Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions src/main/java/com/mergedoc/backend/dir/entity/DIR.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.mergedoc.backend.dir.entity;

import com.mergedoc.backend.Base.BaseEntity;
import lombok.*;

import javax.persistence.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DIR extends InDIR{

@Id @GeneratedValue
private Long id;

// member 구현 후 연관관계 셋팅 필요

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private DIR parent;

@Builder
public DIR(DIR parent) {
this.parent = parent;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/mergedoc/backend/dir/entity/InDIR.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.mergedoc.backend.dir.entity;

import com.mergedoc.backend.Base.BaseEntity;
import lombok.Getter;

import javax.persistence.MappedSuperclass;

@Getter
@MappedSuperclass
public abstract class InDIR extends BaseEntity {
private String path;
private String name;

public void setPath(String path) {
this.path = path;
}
public void setName(String name) {
this.name = name;
}
}
29 changes: 29 additions & 0 deletions src/main/java/com/mergedoc/backend/dir/entity/PageInDIR.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.mergedoc.backend.dir.entity;

import com.mergedoc.backend.Base.BaseEntity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class PageInDIR extends InDIR{

@Id @GeneratedValue
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id")
private DIR dir;

// Page Entity 추가 후 연관관계 추가

@Builder
public PageInDIR(DIR dir) {
this.dir = dir;
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/mergedoc/backend/dir/entity/UnitInDIR.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.mergedoc.backend.dir.entity;

import com.mergedoc.backend.Base.BaseEntity;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;


@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class UnitInDIR extends InDIR{

@Id @GeneratedValue
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dir_id")
private DIR dir;

// Unit Entity 추가 후 연관관계 추가


@Builder
public UnitInDIR(DIR dir) {
this.dir = dir;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.mergedoc.backend.dir.repository;

import com.mergedoc.backend.dir.entity.DIR;
import com.mergedoc.backend.dir.entity.InDIR;
import com.mergedoc.backend.dir.entity.PageInDIR;
import com.mergedoc.backend.dir.entity.UnitInDIR;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

import javax.persistence.EntityManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

@Repository
@RequiredArgsConstructor
public class DIRRepository {

private final EntityManager em;

public void saveDIR(DIR dir) {
em.persist(dir);
}
public void saveUnitInDIR(UnitInDIR unitInDIR) {em.persist(unitInDIR);}
public void savePageInDIR(PageInDIR pageInDir) {
em.persist(pageInDir);
}

public List<InDIR> findAllByPath(String path) {
List<InDIR> findFiles = new ArrayList<>();

findFiles.addAll(findDIRsByPath(path));
findFiles.addAll(findPagesByPath(path));
findFiles.addAll(findUnitsByPath(path));

return findFiles;
}

public List<DIR> findDIRsByPath(String path) {
return em.createQuery("select d from DIR d where d.path = :path", DIR.class)
.setParameter("path", path)
.getResultList();
}

public Optional<DIR> findDIRByPathAndName(String path, String name) {
return em.createQuery("select d from DIR d where " +
"d.path = :path and d.name = :name", DIR.class)
.setParameter("path", path)
.setParameter("name", name)
.getResultList()
.stream().findFirst();
}


public List<UnitInDIR> findUnitsByPath(String path) {
return em.createQuery("select u from UnitInDIR u where u.path = :path", UnitInDIR.class)
.setParameter("path", path)
.getResultList();
}

public Optional<UnitInDIR> findUnitByPathAndName(String path, String name) {
return em.createQuery("select u from UnitInDIR u where " +
"u.path = :path and u.name = :name", UnitInDIR.class)
.setParameter("path", path)
.setParameter("name", name)
.getResultList()
.stream().findFirst();
}

public List<PageInDIR> findPagesByPath(String path) {
return em.createQuery("select p from PageInDIR p where p.path = :path", PageInDIR.class)
.setParameter("path", path)
.getResultList();
}

public Optional<PageInDIR> findPageByPathAndName(String path, String name) {
return em.createQuery("select p from PageInDIR p where " +
"p.path = :path and p.name = :name", PageInDIR.class)
.setParameter("path", path)
.setParameter("name", name)
.getResultList()
.stream().findFirst();
}

}
110 changes: 110 additions & 0 deletions src/test/java/com/mergedoc/backend/repository/DIRTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
package com.mergedoc.backend.repository;

import com.mergedoc.backend.dir.entity.DIR;
import com.mergedoc.backend.dir.entity.PageInDIR;
import com.mergedoc.backend.dir.entity.UnitInDIR;
import com.mergedoc.backend.dir.repository.DIRRepository;
import com.mergedoc.backend.exceptions.NotFoundException;
import org.aspectj.lang.annotation.Before;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

import static org.assertj.core.api.Assertions.*;

@SpringBootTest
@Transactional
public class DIRTest {

@Autowired
private DIRRepository dirRepository;

DIR dir;

String rootPath = "/";
String rootName = "root";

@BeforeEach
public void createRoot() {
DIR rootDIR = DIR.builder().build();

rootDIR.setName(rootName);
rootDIR.setPath(rootPath);

dirRepository.saveDIR(rootDIR);

String createName = "testDIR";

DIR parentDIR = dirRepository.findDIRByPathAndName(rootPath, rootName)
.orElseThrow(() -> new NotFoundException("디렉토리를 찾을 수 없습니다."));

DIR createdDIR = DIR.builder().parent(parentDIR).build();
createdDIR.setPath(rootPath+rootName+"/");
createdDIR.setName(createName);

dirRepository.saveDIR(createdDIR);

this.dir = createdDIR;

}

@Test
public void findUnit() {
DIR parentDIR = dirRepository.findDIRByPathAndName(rootPath, rootName)
.orElseThrow(() -> new NotFoundException("디렉토리를 찾을 수 없습니다."));

String childPath = rootPath+rootName+"/";

UnitInDIR createUnitInDIR = UnitInDIR.builder()
.dir(parentDIR)
.build();

createUnitInDIR.setPath(childPath);
createUnitInDIR.setName("testUnit");
// Unit 연관관계 추가 필요

dirRepository.saveUnitInDIR(createUnitInDIR);

UnitInDIR findUnit = dirRepository.findUnitByPathAndName(childPath, "testUnit")
.orElseThrow(() -> new NotFoundException("유닛을 찾을 수 없습니다."));

assertThat(findUnit).isEqualTo(createUnitInDIR);
}

@Test
public void findPage() {
DIR parentDIR = dirRepository.findDIRByPathAndName(rootPath, rootName)
.orElseThrow(() -> new NotFoundException("디렉토리를 찾을 수 없습니다."));

String childPath = rootPath+rootName+"/";

PageInDIR createPageInDIR = PageInDIR.builder()
.dir(parentDIR)
.build();

createPageInDIR.setPath(childPath);
createPageInDIR.setName("testPage");
// Unit 연관관계 추가 필요

dirRepository.savePageInDIR(createPageInDIR);

PageInDIR findUnit = dirRepository.findPageByPathAndName(childPath, "testPage")
.orElseThrow(() -> new NotFoundException("페이지를 찾을 수 없습니다."));

assertThat(findUnit).isEqualTo(createPageInDIR);
}

@Test
public void findDIR() {
DIR findDIR = dirRepository.findDIRByPathAndName("/root/", "testDIR")
.orElseThrow(() -> new NotFoundException("디렉토리를 찾을 수 없습니다."));

assertThat(findDIR).isEqualTo(dir);
}


}