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
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* [API] BaseLine 전용 엔드포인트
* - 라인 단위 일괄 생성 / 중간 분기점(pivot) 조회
*/
package com.back.domain.node.controller;

import com.back.domain.node.dto.BaseLineBulkCreateRequest;
import com.back.domain.node.dto.BaseLineBulkCreateResponse;
import com.back.domain.node.dto.BaseLineDto;
import com.back.domain.node.dto.PivotListDto;
import com.back.domain.node.service.NodeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/v1/base-lines")
@RequiredArgsConstructor
public class BaseLineController {

private final NodeService nodeService;

// 라인 단위 일괄 생성(헤더~꼬리까지)
@PostMapping("/bulk")
public ResponseEntity<BaseLineBulkCreateResponse> createBaseLineBulk(@RequestBody BaseLineBulkCreateRequest request) {
return ResponseEntity.status(HttpStatus.CREATED).body(nodeService.createBaseLineWithNodes(request));
}

// 헤더/꼬리 제외 pivot 목록 반환
@GetMapping("/{baseLineId}/pivots")
public ResponseEntity<PivotListDto> getPivots(@PathVariable Long baseLineId) {
return ResponseEntity.ok(nodeService.getPivotBaseNodes(baseLineId));
}

// GET /api/v1/base-lines/{baseLineId}/nodes
@GetMapping("/{baseLineId}/nodes")
public ResponseEntity<List<BaseLineDto>> getBaseLineNodes(@PathVariable Long baseLineId) {
return ResponseEntity.ok(nodeService.getBaseLineNodes(baseLineId));
}

// GET /api/v1/base-lines/node/{baseNodeId}
@GetMapping("/node/{baseNodeId}")
public ResponseEntity<BaseLineDto> getBaseNode(@PathVariable Long baseNodeId) {
return ResponseEntity.ok(nodeService.getBaseNode(baseNodeId));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/**
* [API] 피벗에서 시작→연속 저장→완료/취소 흐름
* - from-base: 첫 결정 생성
* - next: 다음 결정 생성
* - cancel: 라인 취소(파기)
* - complete: 라인 완료(잠금)
*/
package com.back.domain.node.controller;

import com.back.domain.node.dto.*;
import com.back.domain.node.service.NodeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/decision-flow")
@RequiredArgsConstructor
public class DecisionFlowController {

private final NodeService nodeService;

@PostMapping("/from-base")
public ResponseEntity<DecLineDto> createFromBase(@RequestBody DecisionNodeFromBaseRequest request) {
return ResponseEntity.status(HttpStatus.CREATED).body(nodeService.createDecisionNodeFromBase(request));
}

@PostMapping("/next")
public ResponseEntity<DecLineDto> createNext(@RequestBody DecisionNodeNextRequest request) {
return ResponseEntity.status(HttpStatus.CREATED).body(nodeService.createDecisionNodeNext(request));
}

@PostMapping("/{decisionLineId}/cancel")
public ResponseEntity<DecisionLineLifecycleDto> cancel(@PathVariable Long decisionLineId) {
return ResponseEntity.ok(nodeService.cancelDecisionLine(decisionLineId));
}

@PostMapping("/{decisionLineId}/complete")
public ResponseEntity<DecisionLineLifecycleDto> complete(@PathVariable Long decisionLineId) {
return ResponseEntity.ok(nodeService.completeDecisionLine(decisionLineId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
* [API] BaseLine의 pivot에서 DecisionNode 생성
* - 사용자가 선택한 중간 시점(BaseNode)에서 파생
*/
package com.back.domain.node.controller;

import com.back.domain.node.dto.DecLineDto;
import com.back.domain.node.dto.DecisionNodeFromBaseRequest;
import com.back.domain.node.service.NodeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/decision-nodes")
@RequiredArgsConstructor
public class DecisionFromBaseController {

private final NodeService nodeService;

// pivot(BaseNode)에서 DecisionNode 생성
@PostMapping("/from-base")
public ResponseEntity<DecLineDto> createDecisionFromBase(@RequestBody DecisionNodeFromBaseRequest request) {
return ResponseEntity.status(HttpStatus.CREATED).body(nodeService.createDecisionNodeFromBase(request));
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/**
* [DTO-REQ] BaseLine을 라인 단위로 일괄 생성 요청(헤더~꼬리까지)
* - nodes: 0=헤더, 마지막=꼬리, 사이가 피벗(분기점)
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;
import java.util.List;

public record BaseLineBulkCreateRequest(
Long userId,
List<BaseNodePayload> nodes
) {
public record BaseNodePayload(
NodeCategory category,
String situation,
String decision,
Integer ageYear
) {}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* [DTO-RES] BaseLine 일괄 생성 응답
* - 생성된 BaseLine id와 각 노드의 id/인덱스 반환
*/
package com.back.domain.node.dto;

import java.util.List;

public record BaseLineBulkCreateResponse(
Long baseLineId,
List<CreatedNode> nodes
) {
public record CreatedNode(
Integer index,
Long nodeId
) {}
}
21 changes: 21 additions & 0 deletions back/src/main/java/com/back/domain/node/dto/BaseLineDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* [DTO-RES] BaseNode 응답
* - 프론트 전송 전용: 최소 필드만 노출
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;

public record BaseLineDto(
Long id,
Long userId,
String type, // "BASE"
NodeCategory category,
String situation,
String decision,
Integer ageYear,
Long baseLineId,
Long parentId
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/**
* [DTO-REQ] BaseNode 단건 생성 요청
* - nodeKind는 BASE 권장
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;
import com.back.domain.node.entity.NodeType;

public record BaseNodeCreateRequestDto(
NodeType nodeKind,
NodeCategory category,
String situation,
Integer ageYear
) {}
23 changes: 23 additions & 0 deletions back/src/main/java/com/back/domain/node/dto/DecLineDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* [DTO-RES] DecisionNode 응답
* - background: AI 생성 설명(옵션)
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;

public record DecLineDto(
Long id,
Long userId,
String type, // "DECISION"
NodeCategory category,
String situation,
String decision,
Integer ageYear,
Long decisionLineId,
Long parentId,
Long baseNodeId,
String background
) {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* [DTO-RES] 결정 라인 라이프사이클 상태 응답
* - 취소/완료 후 상태 반환
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.DecisionLineStatus;

public record DecisionLineLifecycleDto(
Long decisionLineId,
DecisionLineStatus status
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/**
* [DTO-REQ] DecisionNode 생성 요청
* - decisionLineId 없으면 새 라인 생성
* - parentId 또는 baseNodeId 중 하나 사용
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;

public record DecisionNodeCreateRequestDto(
Long decisionLineId,
Long parentId,
Long baseNodeId,
NodeCategory category,
String situation,
String decision,
Integer ageYear
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* [DTO-REQ] BaseLine의 특정 분기점(BaseNode)에서 DecisionNode 생성 요청
* - category/situation/ageYear 미지정 시 pivot 값 상속
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;

public record DecisionNodeFromBaseRequest(
Long userId,
Long baseLineId,
Long pivotBaseNodeId,
NodeCategory category,
String situation,
String decision,
Integer ageYear
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* [DTO-REQ] 직전 DecisionNode(parent)에서 다음 DecisionNode 생성
* - ageYear 미지정 시 자동으로 다음 피벗 나이 선택
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;

public record DecisionNodeNextRequest(
Long userId,
Long parentDecisionNodeId,
Long decisionLineId,
NodeCategory category,
String situation,
String decision,
Integer ageYear
) {}
21 changes: 21 additions & 0 deletions back/src/main/java/com/back/domain/node/dto/PivotListDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* [DTO-RES] 중간 분기점(BaseNode) 목록
* - 헤더/꼬리 제외 인덱스만 반환 → 사용자 선택용
*/
package com.back.domain.node.dto;

import com.back.domain.node.entity.NodeCategory;
import java.util.List;

public record PivotListDto(
Long baseLineId,
List<PivotDto> pivots
) {
public record PivotDto(
Integer index,
Long baseNodeId,
NodeCategory category,
String situation,
Integer ageYear
) {}
}
11 changes: 11 additions & 0 deletions back/src/main/java/com/back/domain/node/dto/TreeDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* [DTO] 트리 전체 조회 응답 모델 (Base/Decision 분리 리스트)
*/
package com.back.domain.node.dto;

import java.util.List;

public record TreeDto(
List<BaseLineDto> baseNodes,
List<DecLineDto> decisionNodes
) {}
Loading