HabitTracker/db/SQLiteClient.py

213 lines
5.7 KiB
Python
Raw Normal View History

from datetime import datetime, timedelta
2024-01-12 10:57:58 +01:00
import hashlib
import sqlite3
def con3():
conn = sqlite3.connect('db/db.sqlite')
return conn
2024-01-26 09:33:41 +01:00
### User.py ###
2024-01-12 16:53:03 +01:00
def create_user(name: str, email: str, password: str):
password = hashlib.sha256(password.encode()).hexdigest()
now = datetime.now().isoformat()
query = (f"INSERT INTO users (name, email, password, created_at, updated_at) VALUES ('{name}', '{email}', "
f"'{password}', '{now}', '{now}');")
2024-01-12 10:57:58 +01:00
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.commit()
conn.close()
return cursor.lastrowid
2024-01-12 16:53:03 +01:00
def get_user(id: int):
query = f"SELECT * FROM users WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
user = cursor.fetchone()
conn.close()
return user
def get_user_by_email(email: str):
query = f"SELECT * FROM users WHERE email = '{email}';"
2024-01-12 10:57:58 +01:00
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
user = cursor.fetchone()
conn.close()
return user
2024-01-26 10:40:12 +01:00
def update_user(id: int, name: str, email: str, password: str = None):
if password:
query = f"UPDATE users SET name = '{name}', email = '{email}', password = '{password}' WHERE id = {id};"
else:
query = f"UPDATE users SET name = '{name}', email = '{email}' WHERE id = {id};"
2024-01-26 08:10:36 +01:00
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
2024-01-26 10:40:12 +01:00
conn.commit()
2024-01-26 08:10:36 +01:00
conn.close()
return cursor.lastrowid
def delete_user(id: int):
query = f"DELETE FROM habits WHERE user_id = {id};"
query2 = f"DELETE FROM users WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
cursor.execute(query2)
conn.commit()
conn.close()
2024-01-26 08:10:36 +01:00
return cursor.lastrowid
2024-01-26 09:33:41 +01:00
### Habit.py ###
def create_habit(user_id: int, name: str, times: int, unit: int, slot: int, note: str | None=None):
now = datetime.now().isoformat()
query = (f"INSERT INTO habits (user_id, name, note, times, unit, slot, created_at, updated_at) VALUES ('{user_id}', "
2024-01-17 10:32:52 +01:00
f"'{name}', '{note}', '{times}', '{unit}', '{slot}', '{now}', '{now}');")
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.commit()
conn.close()
return cursor.lastrowid
2024-01-26 09:29:47 +01:00
def get_habit(id: int):
query = f"SELECT * FROM habits WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
habit = cursor.fetchone()
conn.close()
return habit
def get_habits(user_id: int):
query = f"SELECT * FROM habits WHERE user_id = {user_id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
habits = cursor.fetchall()
conn.close()
return habits
def get_heatmap_value(user_id: int, days: int):
date = (datetime.now() - timedelta(days=days)).date()
print(date)
query = f"SELECT id FROM habits WHERE user_id = {user_id};"
query2 = f"SELECT habits.id FROM habits, habit_trackings WHERE habits.user_id = {user_id} AND habits.created_at LIKE '{date}%' AND habit_trackings.habit_id = habits.id;"
print(query2)
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
all_habits = cursor.fetchall()
cursor.execute(query2)
checked_habits = cursor.fetchall()
count = len(all_habits)
print(count)
count2 = len(checked_habits)
print(count2)
conn.close()
return int(count2 / count * 100)
2024-01-26 08:30:06 +01:00
def get_next_slot(user_id: int):
query = f"SELECT slot FROM habits WHERE user_id = {user_id} ORDER BY slot DESC LIMIT 1;"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
slot = cursor.fetchone()
conn.close()
2024-01-26 09:29:47 +01:00
return slot[0] + 1 if slot else 0
2024-01-26 08:30:06 +01:00
2024-01-26 09:29:47 +01:00
def get_slots(user_id: int):
query = f"SELECT id, slot FROM habits WHERE user_id = {user_id} ORDER BY slot;"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
slots = cursor.fetchall()
conn.close()
return slots
2024-01-26 09:29:47 +01:00
def update_habit(id: int, name: str, note: str, times: int, unit: int):
query = f"UPDATE habits SET name = {name}, note = {note}, times = {times}, unit = {unit} WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.close()
2024-01-26 09:29:47 +01:00
return cursor.lastrowid
2024-01-26 09:29:47 +01:00
def update_slot(id: int, slot: int):
query = f"UPDATE habits SET slot = {slot} WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.close()
2024-01-26 09:29:47 +01:00
return cursor.lastrowid
def delete_habit(id: int):
query = f"DELETE FROM habits WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.commit()
conn.close()
2024-01-26 09:33:41 +01:00
### HabitTrackings.py ###
def create_habitTrackings(habit_id: int, times: int):
now = datetime.now().isoformat()
query = (
f"INSERT INTO habit_trackings (habit_id, times, created_at) VALUES ('{habit_id}', '{times}','{now}');")
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.commit()
conn.close()
return cursor.lastrowid
def get_habitTrackings(id: int):
query = f"SELECT * FROM habit_trackings WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
habit_tracking = cursor.fetchone()
conn.close()
return habit_tracking
def get_habitTrackings_by_habit_id(habit_id: int):
query = f"SELECT * FROM habit_trackings WHERE habit_id = {habit_id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
habit_trackings = cursor.fetchall()
conn.close()
return habit_trackings
def delete_habitTrackings(id: int):
query = f"DELETE FROM habit_trackings WHERE id = {id};"
conn = con3()
cursor = conn.cursor()
cursor.execute(query)
conn.commit()
conn.close()
if __name__ == "__main__":
pass