habit-tracker/models.py

42 lines
1.1 KiB
Python

from peewee import *
from datetime import datetime
import os
from dotenv import load_dotenv
load_dotenv() # 加载 .env 文件中的环境变量
database = SqliteDatabase(os.getenv('DATABASE_PATH', 'habits.db'))
class BaseModel(Model):
class Meta:
database = database
class Habit(BaseModel):
name = CharField()
description = TextField(null=True)
periodicity = CharField(default='daily') # daily, weekly, monthly
reminder_time = TimeField(null=True)
icon = CharField(null=True)
color = CharField(default='#000000')
created_at = DateTimeField(default=datetime.now)
class Meta:
table_name = 'habits'
class CheckIn(BaseModel):
habit = ForeignKeyField(Habit, backref='checkins', on_delete='CASCADE')
date = DateField()
note = TextField(null=True)
created_at = DateTimeField(default=datetime.now)
class Meta:
table_name = 'checkins'
indexes = (
# Ensure no duplicate check-ins for the same habit on the same day
(('habit', 'date'), True),
)
def create_tables():
with database:
database.create_tables([Habit, CheckIn])