코틀린 + Spring

BackEnd_Ash.log·2022년 5월 10일
0

spring

목록 보기
2/5

✅ controller

📌 Dto

package com.ash.todolist.controller

data class TodoRequest (val todoName:String)

📌 controller

@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

@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)
}

✅ repository

import org.springframework.data.repository.CrudRepository

interface TodoRepository :CrudRepository<Todo, Long>

✅ entitiy

@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 는 그러지 않았다.
좀 더 간편하다는 느낌을 받았다.

대충 파악이 됐으니 , 처음부터 개발하고 배포까지 해보기로 한다.

profile
꾸준함이란 ... ?

0개의 댓글