growth-ai-agent / models /models.py
Operaconga's picture
Database setup
b9fb109
Raw
History Blame Contribute Delete
2.51 kB
from config.reuseable import fields, models, datetime
class User(models.Model):
id = fields.IntField(pk=True)
email = fields.CharField(max_length=255, unique=True)
username = fields.CharField(max_length=255, unique=True)
password = fields.CharField(max_length=255, unique=True)
current_streak = fields.IntField(default=0)
longest_streak = fields.IntField(default=0)
created_at = fields.DatetimeField(auto_now_add=True)
challenges: fields.ReverseRelation["Challenge"]
progresses: fields.ReverseRelation["Progress"]
coach_sessions: fields.ReverseRelation["CoachSession"]
milestones: fields.ReverseRelation["Milestone"]
class Challenge(models.Model):
id = fields.IntField(pk=True)
user = fields.ForeignKeyField("models.User", related_name="challenges")
title = fields.CharField(max_length=100)
description = fields.TextField(null=True)
start_date = fields.DateField()
end_date = fields.DateField()
is_active = fields.BooleanField(default=True)
is_completed = fields.BooleanField(default=False)
created_at = fields.DatetimeField(auto_now_add=True)
progresses: fields.ReverseRelation["Progress"]
class Progress(models.Model):
id = fields.IntField(pk=True)
user = fields.ForeignKeyField("models.User", related_name="progresses")
challenge = fields.ForeignKeyField("models.Challenge", related_name="progresses")
day = fields.IntField()
note = fields.TextField(null=True)
completed = fields.BooleanField(default=False)
date = fields.DateField(default=datetime.utcnow)
class Meta:
unique_together = ("user", "challenge", "day")
class Milestone(models.Model):
id = fields.IntField(pk=True)
user = fields.ForeignKeyField("models.User", related_name="milestones")
challenge = fields.ForeignKeyField(
"models.Challenge", related_name="milestones", null=True
)
title = fields.CharField(max_length=100)
description = fields.TextField(null=True)
achieved = fields.BooleanField(default=False)
date_achieved = fields.DatetimeField(null=True)
class CoachSession(models.Model):
id = fields.IntField(pk=True)
user = fields.ForeignKeyField("models.User", related_name="coach_sessions")
challenge = fields.ForeignKeyField(
"models.Challenge", related_name="coach_sessions", null=True
)
message_from_user = fields.TextField()
response_from_ai = fields.TextField()
timestamp = fields.DatetimeField(auto_now_add=True)