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
@@ -1,12 +1,12 @@
package org.sejongisc.backend.template.controller;
package org.sejongisc.backend.backtest.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.sejongisc.backend.common.auth.dto.CustomUserDetails;
import org.sejongisc.backend.template.dto.TemplateRequest;
import org.sejongisc.backend.template.dto.TemplateResponse;
import org.sejongisc.backend.template.service.TemplateService;
import org.sejongisc.backend.backtest.dto.TemplateRequest;
import org.sejongisc.backend.backtest.dto.TemplateResponse;
import org.sejongisc.backend.backtest.service.TemplateService;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;
Expand Down Expand Up @@ -38,8 +38,8 @@ public ResponseEntity<TemplateResponse> getTemplateList(@AuthenticationPrincipal
@GetMapping("/{templateId}")
@Operation(
summary = "템플릿 상세 조회",
description = "지정된 템플릿 ID에 대한 상세 정보 및 템플릿에 저장된 백테스트 실행 기록들을 조회합니다."
)
description = "지정된 템플릿 ID에 대한 상세 정보 및 템플릿에 저장된 백테스트 실행 기록들을 조회합니다."
)
public ResponseEntity<TemplateResponse> getTemplateById(@PathVariable UUID templateId,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
return ResponseEntity.ok(templateService.findById(templateId, customUserDetails.getUserId()));
Expand All @@ -53,8 +53,7 @@ public ResponseEntity<TemplateResponse> getTemplateById(@PathVariable UUID templ
)
public ResponseEntity<TemplateResponse> createTemplate(@RequestBody TemplateRequest request,
@AuthenticationPrincipal CustomUserDetails customUserDetail) {
request.setUserId(customUserDetail.getUserId());
return ResponseEntity.ok(templateService.createTemplate(request));
return ResponseEntity.ok(templateService.createTemplate(request, customUserDetail.getUserId()));
}

// 템플릿 수정
Expand All @@ -63,10 +62,9 @@ public ResponseEntity<TemplateResponse> createTemplate(@RequestBody TemplateRequ
summary = "템플릿 수정",
description = "기존의 백테스트 템플릿을 수정합니다."
)
public ResponseEntity<TemplateResponse> updateTemplate(@RequestBody TemplateRequest request,
public ResponseEntity<TemplateResponse> updateTemplate(@PathVariable UUID templateId, @RequestBody TemplateRequest request,
@AuthenticationPrincipal CustomUserDetails customUserDetails) {
request.setUserId(customUserDetails.getUserId());
return ResponseEntity.ok(templateService.updateTemplate(request));
return ResponseEntity.ok(templateService.updateTemplate(templateId, customUserDetails.getUserId(), request));
}

// 템플릿 삭제
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.sejongisc.backend.backtest.dto;


import io.swagger.v3.oas.annotations.media.Schema;

import java.util.UUID;

public record TemplateRequest(
/**
* 추후 create와 update request 달라지면 분리 필요
*/

@Schema(description = "템플릿 제목", defaultValue = "기술주 템플릿")
String title,

@Schema(description = "템플릿 설명", defaultValue = "기술주 템플릿입니다.")
String description,

@Schema(description = "템플릿 공개 여부", defaultValue = "false")
Boolean isPublic
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.sejongisc.backend.backtest.dto;

import lombok.Builder;
import lombok.Getter;
import org.sejongisc.backend.backtest.entity.BacktestRun;
import org.sejongisc.backend.backtest.entity.Template;

import java.util.List;
@Builder
public record TemplateResponse(
List<Template> templates,
Template template,
List<BacktestRun> backtestRuns
) {}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@
import lombok.*;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.sejongisc.backend.template.entity.Template;
import org.sejongisc.backend.user.entity.User;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;

@Entity
@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package org.sejongisc.backend.template.entity;
package org.sejongisc.backend.backtest.entity;


import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.*;
import org.sejongisc.backend.common.entity.postgres.BasePostgresEntity;
import org.sejongisc.backend.template.dto.TemplateRequest;
import org.sejongisc.backend.user.entity.User;

import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sejongisc.backend.template.entity;
package org.sejongisc.backend.backtest.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.sejongisc.backend.template.entity;
package org.sejongisc.backend.backtest.entity;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.sejongisc.backend.template.repository;
package org.sejongisc.backend.backtest.repository;

import org.sejongisc.backend.template.entity.Template;
import org.sejongisc.backend.backtest.entity.Template;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import org.sejongisc.backend.common.exception.CustomException;
import org.sejongisc.backend.common.exception.ErrorCode;
import org.sejongisc.backend.stock.repository.PriceDataRepository;
import org.sejongisc.backend.template.entity.Template;
import org.sejongisc.backend.template.repository.TemplateRepository;
import org.sejongisc.backend.backtest.entity.Template;
import org.sejongisc.backend.backtest.repository.TemplateRepository;
import org.sejongisc.backend.user.repository.UserRepository;
import org.sejongisc.backend.user.entity.User;
import org.springframework.stereotype.Service;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
package org.sejongisc.backend.template.service;
package org.sejongisc.backend.backtest.service;


import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.sejongisc.backend.backtest.repository.BacktestRunRepository;
import org.sejongisc.backend.common.exception.CustomException;
import org.sejongisc.backend.common.exception.ErrorCode;
import org.sejongisc.backend.template.dto.TemplateRequest;
import org.sejongisc.backend.template.dto.TemplateResponse;
import org.sejongisc.backend.template.entity.Template;
import org.sejongisc.backend.template.repository.TemplateRepository;
import org.sejongisc.backend.backtest.dto.TemplateRequest;
import org.sejongisc.backend.backtest.dto.TemplateResponse;
import org.sejongisc.backend.backtest.entity.Template;
import org.sejongisc.backend.backtest.repository.TemplateRepository;
import org.sejongisc.backend.user.repository.UserRepository;
import org.sejongisc.backend.user.entity.User;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
@Slf4j
public class TemplateService {
Expand All @@ -43,12 +45,13 @@ public TemplateResponse findById(UUID templateId, UUID userId) {
}

// 템플릿 생성
public TemplateResponse createTemplate(TemplateRequest request) {
User user = userRepository.findById(request.getUserId())
@Transactional
public TemplateResponse createTemplate(TemplateRequest request, UUID userId) {
User user = userRepository.findById(userId)
.orElseThrow(() -> new CustomException(ErrorCode.USER_NOT_FOUND));

Template template = Template.of(user, request.getTitle(),
request.getDescription(), request.getIsPublic());
Template template = Template.of(user, request.title(),
request.description(), request.isPublic());

templateRepository.save(template);

Expand All @@ -58,9 +61,10 @@ public TemplateResponse createTemplate(TemplateRequest request) {
}

// 템플릿 수정
public TemplateResponse updateTemplate(TemplateRequest request) {
Template template = authorizeTemplateOwner(request.getTemplateId(), request.getUserId());
template.update(request.getTitle(), request.getDescription(), request.getIsPublic());
@Transactional
public TemplateResponse updateTemplate(UUID templateId, UUID userId, TemplateRequest request) {
Template template = authorizeTemplateOwner(templateId, userId);
template.update(request.title(), request.description(), request.isPublic());
templateRepository.save(template);

return TemplateResponse.builder()
Expand All @@ -69,9 +73,10 @@ public TemplateResponse updateTemplate(TemplateRequest request) {
}

// 템플릿 삭제
@Transactional
public void deleteTemplate(UUID templateId, UUID userId) {
Template template = authorizeTemplateOwner(templateId, userId);
// TODO : 좋아요 / 북마크 삭제
// TODO : 좋아요 / 북마크 삭제 - cascade 옵션 또는 별도 처리 필요
templateRepository.delete(template);
}

Expand Down

This file was deleted.

This file was deleted.

Loading