Skip to content

Commit b1dc293

Browse files
committed
Refactor: Refactoring DAO
1 parent aee5161 commit b1dc293

9 files changed

+86
-100
lines changed

StopWatch/Controllers/CategoryViewController.swift

+4-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ final class CategoryViewController: UIViewController {
4545

4646
override func viewWillAppear(_ animated: Bool) {
4747
self.saveDate = (UIApplication.shared.delegate as! AppDelegate).resetDate
48-
// StopWatchDAO().create(date: self.saveDate)
4948

5049
self.categoryTableView.reloadData()
5150
self.configureNavigationBar()
@@ -54,8 +53,10 @@ final class CategoryViewController: UIViewController {
5453
//MARK: - Method
5554
private func deleteCategory(point: CGPoint) {
5655
if let indexPath = self.categoryTableView.indexPathForRow(at: point) {
57-
StopWatchDAO().deleteSegmentData(row: indexPath.row)
58-
StopWatchDAO().create(date: self.saveDate)
56+
let stopWatchDAO = StopWatchDAO()
57+
stopWatchDAO.deleteSegmentData(row: indexPath.row)
58+
stopWatchDAO.createDailyData(self.saveDate)
59+
5960
self.categoryTableView.reloadData()
6061
}
6162
}

StopWatch/Controllers/ConcentrationTimeViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ final class ConcentrationTimeViewController: UIViewController{
9999

100100
self.resetDate = (UIApplication.shared.delegate as! AppDelegate).resetDate
101101

102-
StopWatchDAO().create(date: self.resetDate) // 오늘 데이터 없으면 생성
102+
StopWatchDAO().createDailyData(self.resetDate)
103103

104104
self.changeUIColor(row: 0)
105105
}

StopWatch/Controllers/EditCategoryViewController.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ final class EditCategoryViewController: UIViewController {
101101
if name == ""{
102102
self.notiAlert(title: "경 고", message: "색과 이름을 모두 입력해주세요.")
103103
}else{
104-
StopWatchDAO().addSegment(row: code, name: name, date: self.saveDate) // 과목을 DB에 추가하는 메소드
104+
StopWatchDAO().addSegment(code, name: name, forDate: self.saveDate) // 과목을 DB에 추가하는 메소드
105105

106106
self.navigationController?.popViewController(animated: true) // 전 뷰로 돌아가기
107107
}

StopWatch/Controllers/StopWatchViewController.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ final class StopWatchViewController: UIViewController {
171171
UIView.animate(withDuration: 0.3){
172172
self.editGoalTimeView!.transform = .identity
173173
}
174-
StopWatchDAO().create(date: self.calendarView.selectDateComponent.stringFormat) // 오늘 데이터가 없으면 데이터 생성
174+
StopWatchDAO().createDailyData(self.calendarView.selectDateComponent.stringFormat)
175175

176176
let dailyData = self.realm.object(ofType: DailyData.self, forPrimaryKey: self.calendarView.selectDateComponent.stringFormat)!
177177
let goal = dailyData.totalGoalTime
@@ -386,7 +386,7 @@ final class StopWatchViewController: UIViewController {
386386

387387
//세션(과목명)을 눌렀을때 호출되는 메소드
388388
@objc func didClickSection(_ sender: UIButton){
389-
StopWatchDAO().create(date: self.calendarView.selectDateComponent.stringFormat) // 오늘 데이터가 없으면 데이터 생성
389+
StopWatchDAO().createDailyData(self.calendarView.selectDateComponent.stringFormat)
390390

391391
let dailyData = self.realm.object(ofType: DailyData.self, forPrimaryKey: self.calendarView.selectDateComponent.stringFormat)!
392392

@@ -622,7 +622,7 @@ extension StopWatchViewController: UITableViewDelegate,UITableViewDataSource{
622622
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
623623
let filter = self.realm.object(ofType: DailyData.self, forPrimaryKey: self.calendarView.selectDateComponent.stringFormat)
624624
let segment = filter?.dailySegment
625-
StopWatchDAO().checkSegmentData(date: self.calendarView.selectDateComponent.stringFormat)
625+
626626
return segment?[section].toDoList.count ?? 0 // 오늘의 리스트가 없으면 0개
627627
}
628628

StopWatch/Custom/StopWatchDAO.swift

+59-73
Original file line numberDiff line numberDiff line change
@@ -9,59 +9,32 @@ import UIKit
99
import RealmSwift
1010

1111
class StopWatchDAO {
12-
let realm = try! Realm()
12+
private let realm = try! Realm()
1313

14-
/// 오늘의 데이터가 없을 때 오늘 데이터를 생성하는 함수
15-
func create(date: String){
16-
if let _ = self.realm.object(ofType: DailyData.self, forPrimaryKey: date) {
17-
} else {
18-
try! realm.write{
19-
let day = DailyData() // 오늘 데이터 생성
20-
day.date = date
21-
day.totalGoalTime = 0
22-
day.totalTime = 0
23-
let totalSeg = realm.objects(Segments.self)
24-
25-
for seg in totalSeg {
26-
let object = SegmentData() // 오늘 과목들 생성
27-
object.date = date
28-
object.goal = 0
29-
object.value = 0
30-
object.segment = seg
31-
realm.add(object)
32-
33-
day.dailySegment.append(object) // 오늘 데이터에 오늘 과목들 넣기
34-
}
35-
realm.add(day)
36-
}
37-
}
14+
/// 특정 Date의 Object가 존재하는지 여부를 반환하는 메소드
15+
func doesObjectExist<T: Object>(type: T.Type, forDate: String) -> Bool {
16+
return self.realm.object(ofType: T.self, forPrimaryKey: forDate) == nil ? false : true
3817
}
3918

40-
///과목 추가 메소드
41-
func addSegment(row: Int, name: String, date: String){
42-
43-
try! realm.write{
44-
let segment = Segments() // 과목리스트 추가
45-
segment.colorCode = row
46-
segment.name = name
47-
48-
realm.add(segment)
49-
50-
if let dailyData = realm.object(ofType: DailyData.self, forPrimaryKey: date) {// 오늘 데이터 불러오기
51-
let segmentData = SegmentData() // 오늘의 과목에 추가
52-
segmentData.date = date
53-
segmentData.goal = 0
54-
segmentData.value = 0
55-
segmentData.segment = segment
56-
57-
realm.add(segmentData)
58-
dailyData.dailySegment.append(segmentData) // 오늘 데이터에 추가한 과목 추가
19+
func getObject<T: Object>(_ type: T.Type) -> Results<T> {
20+
return self.realm.objects(T.self)
21+
}
22+
23+
/// 오늘의 데이터가 없을 때 오늘 데이터를 생성하는 함수
24+
func createDailyData(_ forDate: String) {
25+
guard !self.doesObjectExist(type: DailyData.self, forDate: forDate) else { return }
26+
27+
do {
28+
try realm.write {
29+
realm.add(DailyData(forDate))
5930
}
31+
} catch {
32+
print("Failed to create Object: \(error.localizedDescription)")
6033
}
6134
}
6235

6336
/// date날짜 데이터 삭제
64-
func deleteDailyData(date: String){
37+
func deleteDailyData(date: String) {
6538
// 해당 날짜에 빈 segmentData 가 있는지 확인
6639
let blankSegmentData = self.realm.objects(SegmentData.self).where {
6740
($0.value == 0) && ($0.goal == 0) && ($0.toDoList.count == 0) && ($0.date == date)
@@ -79,40 +52,54 @@ class StopWatchDAO {
7952
}
8053
}
8154

82-
func checkSegmentData(date: String) {
83-
let segmentData = self.realm.objects(SegmentData.self).where {
84-
$0.date == date
85-
}
86-
let segemnts = self.realm.objects(Segments.self)
87-
guard let dailyData = self.realm.object(ofType: DailyData.self, forPrimaryKey: date) else { return }
88-
89-
for segment in segemnts {
90-
let isSeg = segmentData.contains{ seg in seg.segment == segment }
91-
if isSeg == false {
92-
try! self.realm.write{
93-
let object = SegmentData() // 오늘 과목들 생성
94-
object.date = date
95-
object.goal = 0
96-
object.value = 0
97-
object.segment = segment
98-
realm.add(object)
99-
100-
dailyData.dailySegment.append(object)
55+
/// 과목 추가 메소드
56+
func addSegment(_ colorRow: Int, name: String, forDate: String) {
57+
do {
58+
try realm.write {
59+
let segment = Segments(name: name, colorCode: colorRow)
60+
realm.add(segment)
61+
62+
let dailyData = getObject(DailyData.self)
63+
64+
for data in dailyData {
65+
data.dailySegment.append(SegmentData(date: data.date, segment: segment))
10166
}
10267
}
68+
} catch {
69+
print("Failed to add segment: \(error.localizedDescription)")
10370
}
10471
}
72+
73+
// func checkSegmentData(date: String) {
74+
// let segmentData = self.realm.objects(SegmentData.self).where {
75+
// $0.date == date
76+
// }
77+
// let segemnts = self.realm.objects(Segments.self)
78+
// guard let dailyData = self.realm.object(ofType: DailyData.self, forPrimaryKey: date) else { return }
79+
//
80+
// for segment in segemnts {
81+
// let isSeg = segmentData.contains{ seg in seg.segment == segment }
82+
// if isSeg == false {
83+
// try! self.realm.write{
84+
// let object = SegmentData() // 오늘 과목들 생성
85+
// object.date = date
86+
// object.goal = 0
87+
// object.value = 0
88+
// object.segment = segment
89+
// realm.add(object)
90+
//
91+
// dailyData.dailySegment.append(object)
92+
// }
93+
// }
94+
// }
95+
// }
96+
10597
//MARK: - DailyData 편집(읽기)
10698
/// DailyData 읽기
10799
func getDailyData(_ date: String) -> DailyData? {
108100
return self.realm.object(ofType: DailyData.self, forPrimaryKey: date)
109101
}
110102

111-
func getDailyDatad(_ date: DateComponents) -> DailyData? {
112-
return self.realm.object(ofType: DailyData.self, forPrimaryKey: date.stringFormat)
113-
}
114-
115-
116103
/// 총 시간 읽기!
117104
func getTotalTime(_ date: DateComponents) -> TimeInterval {
118105
guard let data = self.realm.object(ofType: DailyData.self, forPrimaryKey: date.stringFormat) else { return 0 }
@@ -163,7 +150,7 @@ class StopWatchDAO {
163150
from.toDoList.append(list)
164151
from.listCheckImageIndex.append(0)
165152
}
166-
} catch(let error) {
153+
} catch {
167154
print(error.localizedDescription)
168155
return false
169156
}
@@ -177,7 +164,7 @@ class StopWatchDAO {
177164
from.toDoList.append(to.toDoList[row])
178165
from.listCheckImageIndex.append(0)
179166
}
180-
} catch(let error) {
167+
} catch {
181168
print(error.localizedDescription)
182169
return false
183170
}
@@ -187,7 +174,7 @@ class StopWatchDAO {
187174
/// TodoList 수정
188175
func editTodoList(_ segData: SegmentData, row: Int, text: String) {
189176
do {
190-
try self.realm.write{
177+
try self.realm.write {
191178
segData.toDoList[row] = text
192179
}
193180
} catch let error {
@@ -237,7 +224,6 @@ class StopWatchDAO {
237224
}
238225

239226
//MARK: - Segment
240-
241227
/// Segment 불러오기
242228
func getSegment(_ row: Int) -> Segments {
243229
return self.realm.objects(Segments.self)[row]

StopWatch/Models/DailyData.swift

+8-2
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ class DailyData: Object {
1414
@Persisted var totalGoalTime: TimeInterval
1515
@Persisted var dailySegment = List<SegmentData>()
1616

17-
init(_ date: String) {
18-
super.init()
17+
convenience init(_ date: String) {
18+
self.init()
1919
self.date = date
2020
self.totalTime = 0
2121
self.totalGoalTime = 0
22+
23+
let realm = try! Realm()
24+
for seg in realm.objects(Segments.self) {
25+
let segmentData = SegmentData(date: date, segment: seg)
26+
self.dailySegment.append(segmentData)
27+
}
2228
}
2329
}

StopWatch/Models/SegmentData.swift

+2-15
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,9 @@ class SegmentData: Object {
1717
@Persisted var toDoList: List<String> //이 과목에서 해야할 일들
1818
@Persisted var listCheckImageIndex: List<Int> // 해야할 일들 체크 번호 0: 원, 1: 엑스, 2: 세모
1919

20-
override init(){
21-
super.init()
22-
}
23-
24-
init(date: String, segment: Segments? = nil, value: TimeInterval, goal: TimeInterval, toDoList: List<String>, listCheckImageIndex: List<Int>) {
25-
super.init()
26-
self.date = date
27-
self.segment = segment
28-
self.value = value
29-
self.goal = goal
30-
self.toDoList = toDoList
31-
self.listCheckImageIndex = listCheckImageIndex
32-
}
3320

34-
init(date: String, segment: Segments? = nil) {
35-
super.init()
21+
convenience init(date: String, segment: Segments? = nil) {
22+
self.init()
3623
self.date = date
3724
self.segment = segment
3825
self.value = 0

StopWatch/Models/Segments.swift

+6
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,10 @@ class Segments: Object {
1212
@Persisted(primaryKey: true) var id : String = UUID().uuidString // 과목번호
1313
@Persisted var name: String // 과목명
1414
@Persisted var colorCode: Int //과목색상코드
15+
16+
convenience init(name: String, colorCode: Int) {
17+
self.init()
18+
self.name = name
19+
self.colorCode = colorCode
20+
}
1521
}

StopWatch/Views/CalendarView/CalendarModalView.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ final class CalendarModalView: UIView {
145145
}
146146

147147
@objc func clickOkButton(_ sender: UIButton){
148-
let _ = StopWatchDAO().create(date: self.calendarView.selectDateComponent.stringFormat)
148+
StopWatchDAO().createDailyData(self.calendarView.selectDateComponent.stringFormat)
149149

150150
self.changeDateTodoList()
151151
}
@@ -164,7 +164,7 @@ final class CalendarModalView: UIView {
164164
self.calendarView.selectDateComponent = todayComponents // 오늘로 설정
165165
}
166166

167-
let _ = StopWatchDAO().create(date: CalendarMethod().componentToDateString(self.calendarView.selectDateComponent))// 선택한 날짜 데이터 생성
167+
StopWatchDAO().createDailyData(self.calendarView.selectDateComponent.stringFormat)// 선택한 날짜 데이터 생성
168168

169169
self.changeDateTodoList()
170170
}

0 commit comments

Comments
 (0)