from sqlalchemy import Column, String, Boolean, DateTime, ForeignKey, Text, Integer from sqlalchemy.dialects.postgresql import UUID, JSONB from sqlalchemy.orm import relationship from datetime import datetime from app.database import Base import uuid class Team(Base): __tablename__ = "teams" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) name = Column(String(255), nullable=False) owner_id = Column(UUID(as_uuid=True), nullable=False, index=True) description = Column(Text) member_count = Column(Integer, default=0) max_members = Column(Integer, default=5) tier = Column(String(50), default="free") is_active = Column(Boolean, default=True) created_at = Column(DateTime, default=datetime.utcnow) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) members = relationship("TeamMember", back_populates="team", cascade="all, delete-orphan") class TeamMember(Base): __tablename__ = "team_members" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) team_id = Column(UUID(as_uuid=True), ForeignKey("teams.id"), nullable=False, index=True) user_id = Column(UUID(as_uuid=True), nullable=False, index=True) role = Column(String(50), default="member") invited_by = Column(UUID(as_uuid=True)) status = Column(String(50), default="active") joined_at = Column(DateTime, default=datetime.utcnow) created_at = Column(DateTime, default=datetime.utcnow) team = relationship("Team", back_populates="members")