init
This commit is contained in:
15
new-planet-backend/app/models/__init__.py
Normal file
15
new-planet-backend/app/models/__init__.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from app.models.user import User, UserRole
|
||||
from app.models.schedule import Schedule
|
||||
from app.models.task import Task
|
||||
from app.models.reward import Reward
|
||||
from app.models.ai_conversation import AIConversation
|
||||
|
||||
__all__ = [
|
||||
"User",
|
||||
"UserRole",
|
||||
"Schedule",
|
||||
"Task",
|
||||
"Reward",
|
||||
"AIConversation",
|
||||
]
|
||||
|
||||
19
new-planet-backend/app/models/ai_conversation.py
Normal file
19
new-planet-backend/app/models/ai_conversation.py
Normal file
@@ -0,0 +1,19 @@
|
||||
from sqlalchemy import Column, String, ForeignKey, Text, Integer, JSON
|
||||
from sqlalchemy.orm import relationship
|
||||
from app.db.base import BaseModel
|
||||
|
||||
|
||||
class AIConversation(BaseModel):
|
||||
__tablename__ = "ai_conversations"
|
||||
|
||||
user_id = Column(String, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
conversation_id = Column(String, nullable=False, unique=True, index=True)
|
||||
message = Column(Text, nullable=False)
|
||||
response = Column(Text, nullable=False)
|
||||
tokens_used = Column(Integer, nullable=True)
|
||||
model = Column(String(100), nullable=True)
|
||||
context = Column(JSON, nullable=True) # Сохранение контекста для продолжения диалога
|
||||
|
||||
# Relationships
|
||||
user = relationship("User", back_populates="conversations")
|
||||
|
||||
18
new-planet-backend/app/models/reward.py
Normal file
18
new-planet-backend/app/models/reward.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from sqlalchemy import Column, String, Integer, ForeignKey, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
from app.db.base import BaseModel
|
||||
|
||||
|
||||
class Reward(BaseModel):
|
||||
__tablename__ = "rewards"
|
||||
|
||||
user_id = Column(String, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
title = Column(String(255), nullable=False)
|
||||
description = Column(Text, nullable=True)
|
||||
image_url = Column(String(500), nullable=True)
|
||||
points_required = Column(Integer, nullable=False, default=1)
|
||||
is_claimed = Column(Boolean, default=False, nullable=False)
|
||||
|
||||
# Relationships
|
||||
user = relationship("User", back_populates="rewards")
|
||||
|
||||
17
new-planet-backend/app/models/schedule.py
Normal file
17
new-planet-backend/app/models/schedule.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from sqlalchemy import Column, String, Date, ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
from app.db.base import BaseModel
|
||||
|
||||
|
||||
class Schedule(BaseModel):
|
||||
__tablename__ = "schedules"
|
||||
|
||||
user_id = Column(String, ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
title = Column(String(255), nullable=False)
|
||||
date = Column(Date, nullable=False, index=True)
|
||||
description = Column(String(1000), nullable=True)
|
||||
|
||||
# Relationships
|
||||
user = relationship("User", back_populates="schedules")
|
||||
tasks = relationship("Task", back_populates="schedule", cascade="all, delete-orphan", order_by="Task.order")
|
||||
|
||||
20
new-planet-backend/app/models/task.py
Normal file
20
new-planet-backend/app/models/task.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from sqlalchemy import Column, String, Integer, Boolean, ForeignKey, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
from app.db.base import BaseModel
|
||||
|
||||
|
||||
class Task(BaseModel):
|
||||
__tablename__ = "tasks"
|
||||
|
||||
schedule_id = Column(String, ForeignKey("schedules.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
title = Column(String(255), nullable=False)
|
||||
description = Column(Text, nullable=True)
|
||||
image_url = Column(String(500), nullable=True)
|
||||
duration_minutes = Column(Integer, nullable=False, default=30)
|
||||
completed = Column(Boolean, default=False, nullable=False)
|
||||
order = Column(Integer, nullable=False, default=0)
|
||||
category = Column(String(100), nullable=True)
|
||||
|
||||
# Relationships
|
||||
schedule = relationship("Schedule", back_populates="tasks")
|
||||
|
||||
25
new-planet-backend/app/models/user.py
Normal file
25
new-planet-backend/app/models/user.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from sqlalchemy import Column, String, Enum
|
||||
from sqlalchemy.orm import relationship
|
||||
import enum
|
||||
from app.db.base import BaseModel
|
||||
|
||||
|
||||
class UserRole(str, enum.Enum):
|
||||
CHILD = "CHILD"
|
||||
PARENT = "PARENT"
|
||||
EDUCATOR = "EDUCATOR"
|
||||
|
||||
|
||||
class User(BaseModel):
|
||||
__tablename__ = "users"
|
||||
|
||||
email = Column(String(255), unique=True, nullable=False, index=True)
|
||||
hashed_password = Column(String(255), nullable=False)
|
||||
role = Column(Enum(UserRole), nullable=False, default=UserRole.CHILD)
|
||||
full_name = Column(String(255), nullable=True)
|
||||
|
||||
# Relationships
|
||||
schedules = relationship("Schedule", back_populates="user", cascade="all, delete-orphan")
|
||||
rewards = relationship("Reward", back_populates="user", cascade="all, delete-orphan")
|
||||
conversations = relationship("AIConversation", back_populates="user", cascade="all, delete-orphan")
|
||||
|
||||
Reference in New Issue
Block a user