42 lines
1.1 KiB
Python
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])
|