jira-ai-fixer/app/models/organization.py

52 lines
2.1 KiB
Python

"""Organization model."""
from datetime import datetime
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Enum, Text, Boolean, JSON
from sqlalchemy.orm import relationship
from app.core.database import Base
import enum
class MemberRole(str, enum.Enum):
VIEWER = "viewer"
ANALYST = "analyst"
MANAGER = "manager"
ADMIN = "admin"
OWNER = "owner"
class Organization(Base):
__tablename__ = "organizations"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(255), nullable=False)
slug = Column(String(100), unique=True, nullable=False, index=True)
created_at = Column(DateTime, default=datetime.utcnow)
# AI Configuration
ai_provider = Column(String(50), default="openrouter")
ai_api_key_encrypted = Column(Text, nullable=True)
ai_model = Column(String(100), default="meta-llama/llama-3.3-70b-instruct")
ai_auto_analyze = Column(Boolean, default=True)
ai_auto_create_pr = Column(Boolean, default=True)
ai_confidence_threshold = Column(Integer, default=70)
# Settings JSON for extensibility
settings = Column(JSON, default=dict)
# Relations
members = relationship("OrganizationMember", back_populates="organization", cascade="all, delete-orphan")
integrations = relationship("Integration", back_populates="organization", cascade="all, delete-orphan")
issues = relationship("Issue", back_populates="organization", cascade="all, delete-orphan")
audit_logs = relationship("AuditLog", back_populates="organization")
class OrganizationMember(Base):
__tablename__ = "organization_members"
id = Column(Integer, primary_key=True, index=True)
organization_id = Column(Integer, ForeignKey("organizations.id"), nullable=False)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
role = Column(Enum(MemberRole), default=MemberRole.VIEWER)
joined_at = Column(DateTime, default=datetime.utcnow)
# Relations
organization = relationship("Organization", back_populates="members")
user = relationship("User", back_populates="memberships")