From 6963eb6cb0f7d15c97f44b9ca439be321edb8a8f Mon Sep 17 00:00:00 2001 From: dusoleil Date: Fri, 26 Aug 2022 20:43:03 -0400 Subject: accidentally wasn't tracking any of the data model objects --- .gitignore | 1 + data_model/DataHelpers.gd | 24 +++++++++++++++++++++++ data_model/SubTask.gd | 24 +++++++++++++++++++++++ data_model/Task.gd | 49 ++++++++++++++++++++++++++++++++++++++++++++++ data_model/TimeSlot.gd | 30 ++++++++++++++++++++++++++++ data_model/data.db | Bin 0 -> 36864 bytes data_model/dbms.gd | 16 +++++++++++++++ 7 files changed, 144 insertions(+) create mode 100644 data_model/DataHelpers.gd create mode 100644 data_model/SubTask.gd create mode 100644 data_model/Task.gd create mode 100644 data_model/TimeSlot.gd create mode 100644 data_model/data.db create mode 100644 data_model/dbms.gd diff --git a/.gitignore b/.gitignore index 87471a3..318f9d4 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ export_presets.cfg *.translation .mono/ data_*/ +!data_model/ .vscode/ *.exe *.dll diff --git a/data_model/DataHelpers.gd b/data_model/DataHelpers.gd new file mode 100644 index 0000000..9e8d7cd --- /dev/null +++ b/data_model/DataHelpers.gd @@ -0,0 +1,24 @@ +class_name DataHelpers + +static func dummy_data(data): + return data + +static func timeofday(time): + var hour = time / 60 + var minute = time % 60 + var am = hour < 12 + hour = hour % 12 + if hour == 0: + hour = 12 + var string = "%2d:%02d %s" + return string % [hour, minute, "AM" if am else "PM"] + +enum Frequency {DAILY, EVERY_OTHER_DAY, WEEKLY, BI_WEEKLY, MONTHLY, SIZE} +static func frequency(freq): + match freq: + Frequency.DAILY: return "Daily" + Frequency.EVERY_OTHER_DAY: return "Every\nOther Day" + Frequency.WEEKLY: return "Weekly" + Frequency.BI_WEEKLY: return "Bi-Weekly" + Frequency.MONTHLY: return "Monthly" + _: return "" diff --git a/data_model/SubTask.gd b/data_model/SubTask.gd new file mode 100644 index 0000000..fa044a5 --- /dev/null +++ b/data_model/SubTask.gd @@ -0,0 +1,24 @@ +class_name SubTask + +class SubTask_data: + var id + var task_id + var name + var date_completed + + func _init(record): + self.id = record['id'] + self.task_id = record['task_id'] + self.name = record['name'] + self.date_completed = record['date_completed'] + +static func get_by_task(task_id): + var records = DBMS.query(""" + SELECT * FROM "SubTasks" + WHERE task_id = ? + """, + [task_id]) + var subtasks = [] + for record in records: + subtasks.push_back(SubTask_data.new(record)) + return subtasks diff --git a/data_model/Task.gd b/data_model/Task.gd new file mode 100644 index 0000000..3da0840 --- /dev/null +++ b/data_model/Task.gd @@ -0,0 +1,49 @@ +class_name Task + +class Task_data: + var id + var name + var description + var frequency + var estimated_length + var date_completed + + func _init(record): + self.id = record['id'] + self.name = record['name'] + self.description = record['description'] + self.frequency = record['frequency'] + self.estimated_length = record['estimated_length'] + self.date_completed = record['date_completed'] + +static func get_by_id(id): + var record = DBMS.query(""" + SELECT * FROM "Tasks" + WHERE id = ? + """, + [id]) + record = record[0] + return Task_data.new(record) + +static func get_by_timeslot(timeslot_id): + var records = DBMS.query(""" + SELECT "Tasks".* FROM "Tasks" + INNER JOIN "TimeSlotTasks" ON "Tasks".id = "TimeSlotTasks".task_id + WHERE "TimeSlotTasks".timeslot_id = ? + """, + [timeslot_id]) + var tasks = [] + for record in records: + tasks.push_back(Task_data.new(record)) + return tasks + +static func get_by_frequency(frequency): + var records = DBMS.query(""" + SELECT * FROM "Tasks" + WHERE frequency = ? + """, + [frequency]) + var tasks = [] + for record in records: + tasks.push_back(Task_data.new(record)) + return tasks diff --git a/data_model/TimeSlot.gd b/data_model/TimeSlot.gd new file mode 100644 index 0000000..f98cd62 --- /dev/null +++ b/data_model/TimeSlot.gd @@ -0,0 +1,30 @@ +class_name TimeSlot + +class TimeSlot_data: + var id + var schedule_id + var start_time + var end_time + var name + var date_completed + + func _init(record): + self.id = record['id'] + self.schedule_id = record['schedule_id'] + self.start_time = record['start_time'] + self.end_time = record['end_time'] + self.name = record['name'] + self.date_completed = record['date_completed'] + +static func get_by_schedule_name(schedule_name): + var records = DBMS.query(""" + SELECT "TimeSlots".* FROM "TimeSlots" + JOIN "Schedules" ON "TimeSlots".schedule_id = "Schedules".id + WHERE "Schedules".name = ? + ORDER BY "TimeSlots".start_time + """, + [schedule_name]) + var timeslots = [] + for record in records: + timeslots.push_back(TimeSlot_data.new(record)) + return timeslots diff --git a/data_model/data.db b/data_model/data.db new file mode 100644 index 0000000..4951f46 Binary files /dev/null and b/data_model/data.db differ diff --git a/data_model/dbms.gd b/data_model/dbms.gd new file mode 100644 index 0000000..43c514d --- /dev/null +++ b/data_model/dbms.gd @@ -0,0 +1,16 @@ +#class_name DBMS +extends Node + +const sqlite = preload("res://addons/godot-sqlite/bin/gdsqlite.gdns") +var db_name = "res://data_model/data.db" +var db + +func _init(): + db = sqlite.new() + db.path = db_name + #db.verbosity_level = 3 + db.open_db() + +func query(sql, args): + db.query_with_bindings(sql,args) + return db.query_result -- cgit v1.2.3