Open shouwn opened 5 years ago
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val days = DayGroup("월,화,수")
val destination = Destination(
destinationName = "숙명여대입구",
time = 30
)
val article1 = Article(
title = "test",
endTime = Date(),
days = days,
destination = destination,
extraTime = 10
)
val article2 = Article(
title = "test2",
endTime = Date(),
days = days,
destinationName = "압구정역",
travelTime = 40,
extraTime = 10
)
databaseHelper.articleDAO.save(article1) // DB에 article1 저장
databaseHelper.articleDAO.save(article2) // DB에 article2 저장
// DB에 article1 의 id를 fk로 가지는 step 들 저장
article1.steps.addAll(listOf(
Step(
name = "옷 갈아입기",
time = 10,
sequence = 2
),
Step(
name = "씻기",
time = 10,
sequence = 1
),
Step(
name = "밥먹기",
time = 10,
sequence = 3
)
))
// 다시 자면 안 되니까 삭제할 예정인 step 생성
val sleep = Step(
name = "다시 자기",
time = 30,
sequence = 4
)
// article2 의 id를 fk로 가지는 step들을 DB에 저장
article2.steps.addAll(listOf(
Step(
name = "빨래하기",
time = 10,
sequence = 2
),
Step(
name = "양치질",
time = 10,
sequence = 1
),
Step(
name = "세수",
time = 10,
sequence = 3
),
sleep
))
// 자는 걸 DB에서 제거함
article2.steps.remove(sleep)
// 각 step에 report를 DB에 저장함
for(step in article2.steps){
step.reports.add(StepReport(time = 10, reportTime = Date()))
}
for(step in article1.steps){
step.reports.add(StepReport(time = 20, reportTime = Date()))
}
// article 이 제대로 저장 됐는지 id를 확인해봄
// 위에서 article1 을 생성할 때는 id를 파라미터로 넣어주지 않았음
Log.d(className,
article1.id.toString())
// 요일이 제대로 저장 되었는지 확인
Log.d(className,
databaseHelper.articleDAO.findAll().joinToString { it.days.toString() })
// step 들이 제대로 저장 되었는지 확인
Log.d(className,
databaseHelper.articleDAO.findAll().joinToString {
it.steps.sortedBy { step -> step.sequence }.joinToString { step -> step.name }
})
// 목적지가 제대로 저장 되었는지 확인
Log.d(className,
databaseHelper.articleDAO.findAll().joinToString { it.destinationName })
// 전체 소요 시간이 제대로 구해지는지 확인
Log.d(className,
databaseHelper.articleDAO.findAll().joinToString { it.totalTime.toString() })
// 각 스탭에 report가 제대로 저장 되었는지 확인
Log.d(className,
databaseHelper.articleDAO.findAll().joinToString {
it.steps.joinToString { step -> step.reports.joinToString { report -> report.time.toString() } }
})
}
하나의 flow 정보를 가지고 있는 클래스
프로퍼티 | 설명 | 타입 | 비고 |
---|---|---|---|
id | DB에 저장되는 pk | Int | |
endTime | 도착 시간 | Date | LocalTime으로 변경 예정 |
color | 색상 "#14123"형식으로 작성 | String | |
extraTime | 추가 시간 | Int | |
days | 사용자가 선택한 요일 목록 | DayGroup | 새로 작성한 클래스 |
destinationName | 목적지명 | String | |
totalTime | 전체 소요 시간 | Int | |
travelTime | 목적지까지 이동 시간 | Int | |
steps | 해당 article의 step들 | Collection |
flow 의 하나 하나의 스탭 e.g.) 씻기, 밥 먹기
프로퍼티 | 설명 | 타입 | 비고 |
---|---|---|---|
id | DB에 저장되는 pk | Int | |
name | 스탭의 제목 | String | |
time | 소요 시간 | Int | |
sequence | 스탭의 순서 | Int | |
article | 이 스탭이 속한 article | Article |
목적지 정보
프로퍼티 | 설명 | 타입 | 비고 |
---|---|---|---|
id | DB에 저장되는 pk | Int | |
vehicle | 이동수단 | Vehicle | enum 타입 |
destinationName | 목적지명 | String | |
time | 소요 시간 | Int |
프리셋 각 항목
프로퍼티 | 설명 | 타입 | 비고 |
---|---|---|---|
id | DB에 저장되는 pk | Int | |
name | 프리셋의 제목 | String | |
time | 소요 시간 | Int | |
sequence | 프리셋의 순서 | Int | |
template | 이 프리셋이 속한 template | Template |
프리셋이 들어있는 템플릿
프로퍼티 | 설명 | 타입 | 비고 |
---|---|---|---|
id | DB에 저장되는 pk | Int | |
name | 스탭의 제목 | String | |
presets | 템플릿이 가지고 있는 프리셋 항목들 | Collection |
OrmAppCompatActivity
DatabaeHelper 를 사용한 뒤에 액티비티가 끝날 때 release 해줘야 함
이를 위해 AppCompatActivity 를 상속한 클래스 작성
상세
DatabaseHelper
database 에 접근하기 위한 클래스
상세 로직은 객체 생성 시 모두 이뤄지기 때문에 평소에는 DAO 클래스를 얻어낼 때만 사용됨
상세
DAO
데이터베이스에서 객체를 가져오기 위한 DAO 클래스
상세
객체 그래프 탐색 방법
삽입과 업데이트
삽입
객체를 new 해서 생성하고 그 객체를 save 하게 되면 데이터베이스에 삽입하게 됨
save 호출 후 객체는 라이브러리의 추적을 받게 됨
save 메소드 호출 후 collection 으로 된 프로퍼티에 접근 가능하게 됨 *그 전에는 NPE 발생
업데이트
save를 호출한 객체를 수정하고 다시 save 를 호출하면 변경 사항이 DB에 반영됨
객체 그래프 탐색
save 호출한 뒤에는 평소 객체를 사용하던 방법대로 사용하면 됨
save 호출한 뒤에 article 안에 있는 steps 에 Step 을 추가하는 코드
위의 코드에서 addAll 를 수행하면 DB에 step 이 추가 됨 remove도 동일하게 작동
steps.toList() or MutableList 호출로 일반 리스트로 사용 가능. 내부적으로 어떻게 작동하는지 모르기 때문에 조회용도로 사용하기를 권장
대신에 name 이나 time 과 같이 다른 클래스를 참조하지 않는 프로퍼티의 경우 수정 후 save를 호출해야 DB에 반영 됨