diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/repository/FolderRepository.java b/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/repository/FolderRepository.java index 9f5048c1..9464ca5e 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/repository/FolderRepository.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/archive/folder/repository/FolderRepository.java @@ -58,4 +58,8 @@ public interface FolderRepository extends JpaRepository{ """) Optional findByIdAndMemberId(@Param("folderId") Integer folderId, @Param("memberId") Integer memberId); + + Optional findByArchiveIdAndName(Integer archiveId, String name); + + List findAllByArchiveId(Integer archiveId); } diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceRepository.java b/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceRepository.java index fcbf8a65..ca43036d 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceRepository.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceRepository.java @@ -39,5 +39,7 @@ public interface DataSourceRepository extends JpaRepository """) List findExistingIdsInMember(@Param("memberId") Integer memberId, @Param("ids") Collection ids); + Optional findByFolderIdAndTitle(Integer folderId, String title); + } diff --git a/src/main/java/org/tuna/zoopzoop/backend/domain/graph/entity/Node.java b/src/main/java/org/tuna/zoopzoop/backend/domain/graph/entity/Node.java index 5a835461..ee5eb848 100644 --- a/src/main/java/org/tuna/zoopzoop/backend/domain/graph/entity/Node.java +++ b/src/main/java/org/tuna/zoopzoop/backend/domain/graph/entity/Node.java @@ -26,8 +26,8 @@ public class Node extends BaseEntity { @ElementCollection @CollectionTable(name = "node_data", joinColumns = @JoinColumn(name = "node_id")) - @MapKeyColumn(name = "key") - @Column(name = "value") + @MapKeyColumn(name = "data_key") + @Column(name = "data_value") private Map data = new HashMap<>(); @Column diff --git a/src/main/java/org/tuna/zoopzoop/backend/global/initData/PersonalArchiveInitData.java b/src/main/java/org/tuna/zoopzoop/backend/global/initData/PersonalArchiveInitData.java new file mode 100644 index 00000000..8dfddb8c --- /dev/null +++ b/src/main/java/org/tuna/zoopzoop/backend/global/initData/PersonalArchiveInitData.java @@ -0,0 +1,107 @@ +package org.tuna.zoopzoop.backend.global.initData; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationRunner; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +import org.tuna.zoopzoop.backend.domain.archive.archive.entity.PersonalArchive; +import org.tuna.zoopzoop.backend.domain.archive.folder.entity.Folder; +import org.tuna.zoopzoop.backend.domain.archive.folder.repository.FolderRepository; +import org.tuna.zoopzoop.backend.domain.datasource.entity.Category; +import org.tuna.zoopzoop.backend.domain.datasource.entity.DataSource; +import org.tuna.zoopzoop.backend.domain.datasource.repository.DataSourceRepository; +import org.tuna.zoopzoop.backend.domain.member.entity.Member; +import org.tuna.zoopzoop.backend.domain.member.enums.Provider; +import org.tuna.zoopzoop.backend.domain.member.repository.MemberRepository; + +import java.time.LocalDate; +import java.util.List; + +@Configuration +@RequiredArgsConstructor +@ConditionalOnProperty(value = "app.seed.enabled", havingValue = "true") +public class PersonalArchiveInitData { + + private final MemberRepository memberRepository; + private final FolderRepository folderRepository; + private final DataSourceRepository dataSourceRepository; + + @Autowired @Lazy + private PersonalArchiveInitData self; + + @Bean + ApplicationRunner archiveInitRunner() { + return args -> self.initAll(); // 프록시 경유 + } + + @Transactional + public void initAll() { + System.out.println(">>> seed initAll start"); + + final String providerKeyEmail = "kjjeaus@gmail.com"; + + Member member = memberRepository + .findByProviderAndProviderKey(Provider.KAKAO, providerKeyEmail) + .orElseGet(() -> memberRepository.save( + Member.builder() + .name("kjjeaus") + .providerKey(providerKeyEmail) + .provider(Provider.KAKAO) + .profileImageUrl("https://img.example.com/profile.png") + .build() + )); + + PersonalArchive pa = member.getPersonalArchive(); + + folderRepository.findByArchiveIdAndName(pa.getArchive().getId(), "default") + .orElseGet(() -> { + Folder df = pa.getArchive().getFolders().stream() + .filter(Folder::isDefault) + .findFirst() + .orElse(new Folder("default")); + df.setArchive(pa.getArchive()); + df.setDefault(true); + return folderRepository.save(df); + }); + + for (String name : List.of("inbox","research","ai","reading-list")) { + folderRepository.findByArchiveIdAndName(pa.getArchive().getId(), name) + .orElseGet(() -> { + Folder f = new Folder(name); + f.setDefault(false); + f.setArchive(pa.getArchive()); + return folderRepository.save(f); + }); + } + + List persistedFolders = folderRepository.findAllByArchiveId(pa.getArchive().getId()); + + for (Folder folder : persistedFolders) { + for (int i = 1; i <= 3; i++) { + String title = folder.getName() + "-자료" + i; + if (dataSourceRepository.findByFolderIdAndTitle(folder.getId(), title).isPresent()) continue; + + DataSource ds = new DataSource(); + ds.setFolder(folder); + ds.setTitle(title); + ds.setSummary("초기 목데이터"); + ds.setDataCreatedDate(LocalDate.now().minusDays(i)); + ds.setSourceUrl("https://example.com/" + folder.getName() + "/" + i); + ds.setImageUrl("https://example.com/img/" + i + ".png"); + ds.setSource("Seed"); + ds.setCategory(Category.IT); + ds.setActive(true); + + dataSourceRepository.save(ds); + } + } + + System.out.println(">>> seed initAll end"); + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index f6cd5b26..078a2d05 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -45,4 +45,9 @@ logging: org.springframework.transaction.interceptor: TRACE com.back: DEBUG server: - port: 8080 \ No newline at end of file + port: 8080 + + +app: + seed: + enabled: true \ No newline at end of file diff --git a/src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberControllerTest.java b/src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberControllerTest.java index 06af9ce6..7e10ff57 100644 --- a/src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberControllerTest.java +++ b/src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberControllerTest.java @@ -39,6 +39,7 @@ public class MemberControllerTest { @BeforeAll void setUp() { + memberRepository.deleteAll(); Member member1 = memberService.createMember( "test1", "url",