diff --git a/prompto-lab-app/pom.xml b/prompto-lab-app/pom.xml index 43abca9..edb1d71 100644 --- a/prompto-lab-app/pom.xml +++ b/prompto-lab-app/pom.xml @@ -123,6 +123,12 @@ fastjson 2.0.57 + + org.projectlombok + lombok + 1.18.30 + provided + diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/CommonQA.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/CommonQA.java new file mode 100644 index 0000000..19c4b45 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/CommonQA.java @@ -0,0 +1,17 @@ +package io.github.timemachinelab.core.qatree; + +import lombok.Data; + +@Data +public class CommonQA extends QA { + + public CommonQA() { + super(QAType.QA); + } + + private String question; + + private String answer; + + +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/FormQA.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/FormQA.java new file mode 100644 index 0000000..ce4c968 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/FormQA.java @@ -0,0 +1,19 @@ +package io.github.timemachinelab.core.qatree; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +@Data +public class FormQA extends QA { + + private String question; + + private Map answerMap; + + public FormQA() { + super(QAType.FORM); + answerMap = new HashMap<>(); + } +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QA.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QA.java new file mode 100644 index 0000000..e9b0566 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QA.java @@ -0,0 +1,14 @@ +package io.github.timemachinelab.core.qatree; + +public abstract class QA { + + protected final QAType type; + + protected long createTime; + + protected long updateTime; + + public QA(QAType type) { + this.type = type; + } +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QAType.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QAType.java new file mode 100644 index 0000000..3bc31e6 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QAType.java @@ -0,0 +1,14 @@ +package io.github.timemachinelab.core.qatree; + +public enum QAType { + + QA("QA"), + SELECTION("Selection"), + FORM("Form"); + + private String name; + + QAType(String name) { + this.name = name; + } +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTree.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTree.java new file mode 100644 index 0000000..906e84c --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTree.java @@ -0,0 +1,34 @@ +package io.github.timemachinelab.core.qatree; + +import lombok.Data; +import lombok.Getter; + +import java.util.HashMap; +import java.util.Map; + +public class QaTree { + + @Getter + private QaTreeNode root; + + private Map nodeMap = new HashMap<>(); + + public QaTree(QaTreeNode root) { + this.root = root; + nodeMap.put(root.getId(), root); + } + + public void addNode(String parentId, QaTreeNode node) { + QaTreeNode parent = nodeMap.get(parentId); + if (parent == null) { + return; + } + parent.append(node); + nodeMap.put(node.getId(), node); + } + + public QaTreeNode getNodeById(String id) { + return nodeMap.get(id); + } + +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeDomain.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeDomain.java new file mode 100644 index 0000000..6717c5c --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeDomain.java @@ -0,0 +1,20 @@ +package io.github.timemachinelab.core.qatree; + +import org.springframework.stereotype.Component; + +@Component +public class QaTreeDomain { + + public QaTree createTree(String userStartQuestion) { + CommonQA startQA = new CommonQA(); + startQA.setQuestion(userStartQuestion); + QaTreeNode startNode = new QaTreeNode(startQA); + + return new QaTree(startNode); + } + + public QaTree appendNode(QaTree tree, String parentId, QaTreeNode node) { + tree.addNode(parentId, node); + return tree; + } +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeNode.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeNode.java new file mode 100644 index 0000000..b55f5fc --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/QaTreeNode.java @@ -0,0 +1,44 @@ +package io.github.timemachinelab.core.qatree; + +import lombok.Data; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Data +public class QaTreeNode { + + private final String id; + + private Map children; + + private QA qa; + + public QaTreeNode(QA qa) { + this.id = UUID.randomUUID().toString(); + this.children = new HashMap<>(); + this.qa = qa; + } + + public void append(QA qa) { + QaTreeNode node = new QaTreeNode(qa); + this.append(node); + } + + public void append(QaTreeNode node) { + children.put(node.getId(), node); + } + + public QaTreeNode getChild(String id) { + return children.get(id); + } + + public boolean hasChild(String id) { + return children.containsKey(id); + } + + public void removeChild(String id) { + children.remove(id); + } + +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/SelectionQA.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/SelectionQA.java new file mode 100644 index 0000000..3c6b4b2 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/qatree/SelectionQA.java @@ -0,0 +1,14 @@ +package io.github.timemachinelab.core.qatree; + +public class SelectionQA extends QA { + + public SelectionQA() { + super(QAType.SELECTION); + } + + private String question; + + private String[] options; + + private Integer selectedOption; +} diff --git a/prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/Session.java b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/Session.java new file mode 100644 index 0000000..e84b984 --- /dev/null +++ b/prompto-lab-app/src/main/java/io/github/timemachinelab/core/session/Session.java @@ -0,0 +1,4 @@ +package io.github.timemachinelab.core.session; + +public class Session { +}