package com.ash.todolist.controller
data class TodoRequest (val todoName:String)
@RestController
@RequestMapping("/todo")
class TodoController(
private val todoService: TodoService,
) {
@GetMapping
fun getTodos() = todoService.getTodos()
@PostMapping
fun insertTodo(@RequestBody todoRequest: TodoRequest) = todoService.insertTodo(todoRequest.todoName)
@PutMapping(path = ["/{todoId}"])
fun updateTodo(@PathVariable("todoId") todoId:Long) = todoService.updateTodo(todoId)
@DeleteMapping(path = ["/{todoId}"])
fun deleteTodo(@PathVariable("todoId") todoId: Long) = todoService.deleteTodo(todoId)
}
@Service
class TodoService(
private val todoRepository: TodoRepository
) {
fun getTodos() = todoRepository.findAll()
fun insertTodo(todoName: String):Todo = todoRepository.save(Todo(todoName = todoName))
fun updateTodo(todoId:Long):Todo {
val todo = todoRepository.findByIdOrNull(todoId)?:throw Exception()
todo.completed = !todo.completed
return todoRepository.save(todo)
}
fun deleteTodo(todoId:Long) = todoRepository.deleteById(todoId)
}
import org.springframework.data.repository.CrudRepository
interface TodoRepository :CrudRepository<Todo, Long>
@Entity
class Todo(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null,
@Column(nullable = false)
@ColumnDefault("false")
var completed: Boolean = false,
@Column(nullable = false)
var todoName: String
)
Nest js 랑 비슷하다.
단지 초기셋팅 부분이 다른데 그부분을 숙지하고 배포부분도 아마 익숙해지면
개발하는데 큰 문제는 없어보였다.
오히려 nest js 보다 좀 더 간편하다는 느낌을 받았다
nest js 에서는 interface 를 적용을 해도 따로 repository 를 사용하든 해서 database 에 접근하는 쿼리를 작성해야하는데 , jpa 는 그러지 않았다.
좀 더 간편하다는 느낌을 받았다.
대충 파악이 됐으니 , 처음부터 개발하고 배포까지 해보기로 한다.