티스토리 뷰

카테고리 없음

[Realm] Migration

Chasomin 2024. 4. 2. 18:03

Realm Schema 수정 및 Migration

 

영양제를 기존에 있는 영양제와 중복되는 이름으로 저장 시, 영양제 복용 여부 테이블에서 데이터 분별력이 떨어지는 이슈가 있었습니다.

해결1. 같은 이름의 영양제는 추가 되는 것을 막기

해결2. 영양제 PK를 영양제 복용 여부 테이블에 FK로 저장하기

중에 2번 방법을 선택하여 FK 컬럼을 추가했습니다.

새로운 컬럼을 추가하면서 기존에 들어있던 데이터에도 적절한 FK를 추가해주기위해 FK가 기본값이라면 '해당 이름이 영양제목록 테이블에 존재하면서 && 해당 supplementTime을 가지고 있는 영양제가 있다면' 그것에 해당하는 영양제의 PK를 넣어줬습니다.

final class RealmSupplementLog: Object {
    @Persisted(primaryKey: true) var id: ObjectId
    @Persisted var regDate: Date
    @Persisted var supplementName: String
    @Persisted var supplementTime: String
    @Persisted var supplementFK: UUID
...
}
func updateInvalidLog() {
    let updateLog = readSupplementLog().filter { $0.supplementFK.uuidString.split(separator: "-").map { Int($0) ?? 1 }.reduce(0, +) == 0 }
    let supplements: Results<RealmSupplement> = readSupplement()
        
    guard !updateLog.isEmpty else {
        return
    }
        
    updateLog.forEach { log in
        let sameSupplement = supplements.filter({ $0.name == log.supplementName && $0.times.map{$0.dateFilterTime()}.contains(log.supplementTime)})
            
        if !sameSupplement.isEmpty {
            do {
                try realm.write {
                    log.supplementFK = sameSupplement.first!.id
                }
            } catch {
                print(error)
            }
        }
        ...
    }
}

 

댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함