Spaces:
Running
Running
| import datetime | |
| from sqlalchemy import Column, String, Integer, DateTime, ForeignKey, Boolean | |
| from sqlalchemy.orm import relationship | |
| from core.subscription.db import Base | |
| class User(Base): | |
| __tablename__ = "users" | |
| clerk_id = Column(String, primary_key=True, index=True) | |
| tier = Column(String, default="free") | |
| stripe_customer_id = Column(String, nullable=True) | |
| stripe_subscription_id = Column(String, nullable=True) | |
| gdpr_consent_accepted = Column(Boolean, default=False) | |
| gdpr_consent_timestamp = Column(DateTime, nullable=True) | |
| ai_disclaimer_enabled = Column(Boolean, default=True) | |
| created_at = Column( | |
| DateTime, default=lambda: datetime.datetime.now(datetime.timezone.utc) | |
| ) | |
| usage = relationship( | |
| "UserUsage", back_populates="user", uselist=False, cascade="all, delete-orphan" | |
| ) | |
| logs = relationship("UsageLog", back_populates="user", cascade="all, delete-orphan") | |
| class UserUsage(Base): | |
| __tablename__ = "user_usage" | |
| # user_id tożsamy z clerk_id | |
| user_id = Column(String, ForeignKey("users.clerk_id"), primary_key=True, index=True) | |
| wizard_iterations_today = Column(Integer, default=0) | |
| tokens_used_month = Column(Integer, default=0) | |
| last_reset_daily = Column( | |
| DateTime, default=lambda: datetime.datetime.now(datetime.timezone.utc) | |
| ) | |
| last_reset_monthly = Column( | |
| DateTime, default=lambda: datetime.datetime.now(datetime.timezone.utc) | |
| ) | |
| user = relationship("User", back_populates="usage") | |
| class UsageLog(Base): | |
| __tablename__ = "usage_logs" | |
| id = Column(Integer, primary_key=True, index=True, autoincrement=True) | |
| user_id = Column(String, ForeignKey("users.clerk_id"), index=True) | |
| action_type = Column(String, index=True) # np. 'wizard_iteration', 'llm_call' | |
| tokens_cost = Column(Integer, default=0) | |
| details = Column(String, nullable=True) # opcjonalnie info json | |
| timestamp = Column( | |
| DateTime, default=lambda: datetime.datetime.now(datetime.timezone.utc) | |
| ) | |
| user = relationship("User", back_populates="logs") | |