Implement Phase 1: Daily Helper Foundation
Complete implementation of Phase 1 enhancements including: Backend: - UserProfile model for storing user preferences (timezone, trading style, risk tolerance) - DailyRoutine model for scheduling routines (morning, active_trading, evening) - RoutineExecution model for tracking routine execution history - Notification model for managing all types of notifications - DailyChecklist model for daily task tracking with completion percentage - HabitTracker model for tracking habits and streaks Services: - RoutineService: Handles routine execution with task registry pattern - RoutineScheduler: Async scheduler for automated routine execution - NotificationService: Comprehensive notification creation and delivery system - Support for price alerts, news, routines, reminders, and performance notifications API Endpoints (daily_helper router): - User profile: CRUD operations, get/update preferences - Daily routines: Create, list, execute, track history - Notifications: CRUD, mark read, batch operations - Daily checklists: CRUD, item management, completion tracking - Habits: Create, track, log completions, manage streaks - Dashboard: Summary endpoint for daily helper overview Frontend Components: - UserProfileSetup: Complete user profile configuration with preferences - NotificationCenter: Bell icon with dropdown, notification management - HabitTracker: Habit creation, streak tracking, gamification with fire emojis - DailyChecklistPanel: Checklist management with completion percentage Schemas: - Full Pydantic schemas for request/response validation - Type-safe API contracts Features: - Timezone support for international users - Trading style and risk tolerance preferences - Automated routine execution with task registry - Real-time notifications with priority levels - Habit streaks with motivational badges - Daily checklist with persistent state - Completion percentage tracking - Notes and metadata support All components are production-ready with error handling and user feedback.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum
|
||||
from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum, Boolean, Date, JSON, Text
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
import enum
|
||||
@@ -70,3 +70,102 @@ class AIAnalysisLog(Base):
|
||||
support_levels = Column(String) # JSON string
|
||||
resistance_levels = Column(String) # JSON string
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
|
||||
|
||||
# Phase 1: Daily Helper Enhancements
|
||||
|
||||
class UserProfile(Base):
|
||||
"""User profile and preferences for daily helper features"""
|
||||
__tablename__ = "user_profiles"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
email = Column(String, unique=True, index=True, nullable=True)
|
||||
username = Column(String, unique=True, index=True, nullable=True)
|
||||
timezone = Column(String, default="UTC")
|
||||
preferred_trading_start = Column(String, default="09:00") # HH:MM format
|
||||
preferred_trading_end = Column(String, default="17:00") # HH:MM format
|
||||
risk_tolerance = Column(String, default="moderate") # conservative, moderate, aggressive
|
||||
trading_style = Column(String, default="day_trader") # scalper, day_trader, swing_trader
|
||||
daily_target = Column(Float, nullable=True) # Daily profit target
|
||||
max_loss = Column(Float, nullable=True) # Maximum loss tolerance
|
||||
notifications_enabled = Column(Boolean, default=True)
|
||||
email_reports = Column(Boolean, default=True)
|
||||
sms_enabled = Column(Boolean, default=False)
|
||||
push_notifications = Column(Boolean, default=True)
|
||||
phone_number = Column(String, nullable=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
|
||||
class DailyRoutine(Base):
|
||||
"""Scheduled daily trading routines"""
|
||||
__tablename__ = "daily_routines"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
user_id = Column(String, nullable=True)
|
||||
routine_type = Column(String) # morning, active_trading, evening
|
||||
scheduled_time = Column(String) # HH:MM format
|
||||
tasks = Column(JSON, default=[]) # List of task names
|
||||
enabled = Column(Boolean, default=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
|
||||
class RoutineExecution(Base):
|
||||
"""Track routine execution history"""
|
||||
__tablename__ = "routine_executions"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
routine_id = Column(Integer, ForeignKey("daily_routines.id"))
|
||||
executed_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
completion_status = Column(String) # completed, failed, partial
|
||||
tasks_completed = Column(JSON, default=[]) # List of completed task names
|
||||
execution_notes = Column(Text, nullable=True)
|
||||
|
||||
|
||||
class Notification(Base):
|
||||
"""System notifications for user"""
|
||||
__tablename__ = "notifications"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
user_id = Column(String, nullable=True)
|
||||
notification_type = Column(String) # price_alert, routine, report, news, reminder
|
||||
title = Column(String)
|
||||
message = Column(Text)
|
||||
priority = Column(String, default="normal") # low, normal, high, critical
|
||||
delivery_method = Column(String, default="push") # push, email, sms
|
||||
data = Column(JSON, nullable=True) # Additional metadata
|
||||
read = Column(Boolean, default=False)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
read_at = Column(DateTime(timezone=True), nullable=True)
|
||||
|
||||
|
||||
class DailyChecklist(Base):
|
||||
"""Daily checklist items and completion status"""
|
||||
__tablename__ = "daily_checklists"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
user_id = Column(String, nullable=True)
|
||||
checklist_date = Column(Date, default=func.current_date())
|
||||
checklist_type = Column(String) # morning, active_trading, evening, all
|
||||
items = Column(JSON, default=[]) # List of {id, title, completed, completed_at}
|
||||
completion_percentage = Column(Float, default=0.0)
|
||||
notes = Column(Text, nullable=True)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
|
||||
class HabitTracker(Base):
|
||||
"""Track user habits and streaks"""
|
||||
__tablename__ = "habit_trackers"
|
||||
|
||||
id = Column(Integer, primary_key=True, index=True)
|
||||
user_id = Column(String, nullable=True)
|
||||
habit_name = Column(String) # journaling, planning, review, trading
|
||||
frequency = Column(String) # daily, weekly
|
||||
completion_dates = Column(JSON, default=[]) # List of ISO date strings
|
||||
current_streak = Column(Integer, default=0)
|
||||
longest_streak = Column(Integer, default=0)
|
||||
total_completions = Column(Integer, default=0)
|
||||
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
||||
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
|
||||
Reference in New Issue
Block a user