This commit is contained in:
2025-12-30 09:03:29 +00:00
commit 32294ebec1
19 changed files with 3146 additions and 0 deletions

66
backend/models.py Normal file
View File

@@ -0,0 +1,66 @@
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
from sqlalchemy import func
db = SQLAlchemy()
class Task(db.Model):
"""任务模型"""
__tablename__ = 'tasks'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(200), nullable=False)
description = db.Column(db.Text)
polished_description = db.Column(db.Text) # AI润色后的描述
status = db.Column(db.String(20), default='pending') # pending, in_progress, completed
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
# 关联关系
time_records = db.relationship('TimeRecord', backref='task', lazy=True, cascade='all, delete-orphan')
def to_dict(self):
return {
'id': self.id,
'title': self.title,
'description': self.description,
'polished_description': self.polished_description,
'status': self.status,
'created_at': self.created_at.isoformat() if self.created_at else None,
'updated_at': self.updated_at.isoformat() if self.updated_at else None,
'total_time': self.get_total_time()
}
def get_total_time(self):
"""获取任务总时长(秒)"""
total_seconds = db.session.query(func.sum(TimeRecord.duration)).filter(
TimeRecord.task_id == self.id
).scalar() or 0
return int(total_seconds)
class TimeRecord(db.Model):
"""时间记录模型"""
__tablename__ = 'time_records'
id = db.Column(db.Integer, primary_key=True)
task_id = db.Column(db.Integer, db.ForeignKey('tasks.id'), nullable=False)
start_time = db.Column(db.DateTime, nullable=False)
end_time = db.Column(db.DateTime)
duration = db.Column(db.Integer) # 时长(秒)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
def to_dict(self):
return {
'id': self.id,
'task_id': self.task_id,
'start_time': self.start_time.isoformat() if self.start_time else None,
'end_time': self.end_time.isoformat() if self.end_time else None,
'duration': self.duration,
'created_at': self.created_at.isoformat() if self.created_at else None
}
def calculate_duration(self):
"""计算时长"""
if self.start_time and self.end_time:
self.duration = int((self.end_time - self.start_time).total_seconds())
return self.duration