이번에는 작성한 모델 타입을 통해 어떠한 방식으로 모델 타입을 작성할 수 있는지를 알아보겠습니다.
아래는 프로젝트 관리에 사용되는 아이템을 표현하는 타입으로 아직 Data Transfer Object (DTO)가 적용되지 않은 형태를 가져왔습니다. 클라이언트측과 협의하여 필드값들을 결정했지만, 이전 글에서 다루었듯이 deadlineDate
의 경우 soft-delete를 지원할 수 있도록 @Timestamp
로 정의하여도 되고, id
를 사용자 정의해서 사용하실 수도 있습니다. 더 복잡한 내용을 담기 위해서 @Group
을 통해 구조체를 저장할 수도 있고, progress
와 같이 상태가 특정 케이스로 분류가 가능한 경우 @Enum
을 이용해 필드를 정의할 수도 있습니다. 이전 글에서 기본적인 지식을 쌓고 오셔서 간단한 구조임을 한 눈에 파악하실 수 있으실 거라 생각합니다.
import Fluent
import Vapor
final class ProjectItem: Model, Content {
static let schema = "projectItems"
@ID(key: .id)
var id: UUID?
@Field(key: "title")
var title: String
@Field(key: "content")
var content: String
@Field(key: "deadlineDate")
var deadlineDate: Date
@Field(key: "progress")
var progress: String
@Field(key: "index")
var index: Int
init() { }
init(id: UUID? = nil, title: String, content: String, deadlineDate: Date, progress: String, index: Int) {
self.id = id
self.title = title
self.content = content
self.deadlineDate = deadlineDate
self.progress = progress
self.index = index
}
}
다음에는 모델 타입을 담아줄 DB를 구성하는 내용을 다루어 보겠습니다. 먼저 Local 환경에서 구성하는 방법을 다루고 이후에 배포 서버에서 구성하는 방법을 알아볼 것입니다!