diff --git a/.forge/BAIS-SPRING-ARC-001-attempt-1.md b/.forge/BAIS-SPRING-ARC-001-attempt-1.md new file mode 100644 index 0000000..a8d7337 --- /dev/null +++ b/.forge/BAIS-SPRING-ARC-001-attempt-1.md @@ -0,0 +1,3 @@ +# BAIS-SPRING-ARC-001-attempt-1 + +Forge 이슈 작업 브랜치 `forge/BAIS-SPRING-ARC-001-attempt-1`. diff --git a/src/main/java/com/example/demo/config/TransactionPolicyConfig.java b/src/main/java/com/example/demo/config/TransactionPolicyConfig.java new file mode 100644 index 0000000..d913914 --- /dev/null +++ b/src/main/java/com/example/demo/config/TransactionPolicyConfig.java @@ -0,0 +1,14 @@ +package com.example.demo.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +@EnableTransactionManagement +public class TransactionPolicyConfig { + @Bean + public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) { + return new JpaTransactionManager(entityManagerFactory); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/TransactionController.java b/src/main/java/com/example/demo/controller/TransactionController.java new file mode 100644 index 0000000..833bcbb --- /dev/null +++ b/src/main/java/com/example/demo/controller/TransactionController.java @@ -0,0 +1,20 @@ +package com.example.demo.controller; + +import org.springframework.web.bind.annotation.*; +import com.example.demo.service.TransactionService; +import com.example.demo.dto.TransactionDTO; + +@RestController +@RequestMapping("/api/transactions") +public class TransactionController { + private final TransactionService transactionService; + + public TransactionController(TransactionService transactionService) { + this.transactionService = transactionService; + } + + @PostMapping + public void createTransaction(@RequestBody TransactionDTO transactionDTO) { + transactionService.processTransaction(transactionDTO); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/dto/TransactionDTO.java b/src/main/java/com/example/demo/dto/TransactionDTO.java new file mode 100644 index 0000000..d2bad5f --- /dev/null +++ b/src/main/java/com/example/demo/dto/TransactionDTO.java @@ -0,0 +1,9 @@ +package com.example.demo.dto; + +public class TransactionDTO { + private Long id; + private Double amount; + private String description; + + // Getters and Setters +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/error/ErrorResponse.java b/src/main/java/com/example/demo/error/ErrorResponse.java new file mode 100644 index 0000000..b49c5fe --- /dev/null +++ b/src/main/java/com/example/demo/error/ErrorResponse.java @@ -0,0 +1,13 @@ +package com.example.demo.error; + +public class ErrorResponse { + private String message; + private int status; + + public ErrorResponse(String message, int status) { + this.message = message; + this.status = status; + } + + // Getters +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/job/TransactionJobConfig.java b/src/main/java/com/example/demo/job/TransactionJobConfig.java new file mode 100644 index 0000000..991e60c --- /dev/null +++ b/src/main/java/com/example/demo/job/TransactionJobConfig.java @@ -0,0 +1,38 @@ +package com.example.demo.job; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.Step; +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@EnableBatchProcessing +public class TransactionJobConfig { + private final JobBuilderFactory jobBuilderFactory; + private final StepBuilderFactory stepBuilderFactory; + + public TransactionJobConfig(JobBuilderFactory jobBuilderFactory, StepBuilderFactory stepBuilderFactory) { + this.jobBuilderFactory = jobBuilderFactory; + this.stepBuilderFactory = stepBuilderFactory; + } + + @Bean + public Job transactionJob() { + return jobBuilderFactory.get("transactionJob") + .start(transactionStep()) + .build(); + } + + @Bean + public Step transactionStep() { + return stepBuilderFactory.get("transactionStep") + .tasklet((contribution, chunkContext) -> { + // 배치 작업 로직 + return null; + }) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/repository/TransactionRepository.java b/src/main/java/com/example/demo/repository/TransactionRepository.java new file mode 100644 index 0000000..b545bba --- /dev/null +++ b/src/main/java/com/example/demo/repository/TransactionRepository.java @@ -0,0 +1,7 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import com.example.demo.model.Transaction; + +public interface TransactionRepository extends JpaRepository { +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/TransactionService.java b/src/main/java/com/example/demo/service/TransactionService.java new file mode 100644 index 0000000..d72cdcc --- /dev/null +++ b/src/main/java/com/example/demo/service/TransactionService.java @@ -0,0 +1,11 @@ +package com.example.demo.service; + +import org.springframework.stereotype.Service; +import com.example.demo.dto.TransactionDTO; + +@Service +public class TransactionService { + public void processTransaction(TransactionDTO transactionDTO) { + // 거래 처리 로직 + } +} \ No newline at end of file