from sqlalchemy import ( Boolean, Column, Integer, String, DateTime, Text, ForeignKey, Enum, ) from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.db.base import Base import enum class PrayerPrivacyLevel(enum.Enum): PUBLIC = "public" CONNECTIONS_ONLY = "connections_only" MINISTRY_ONLY = "ministry_only" PRIVATE = "private" class PrayerStatus(enum.Enum): ACTIVE = "active" ANSWERED = "answered" CLOSED = "closed" class PrayerCategory(enum.Enum): HEALTH = "health" FAMILY = "family" FINANCES = "finances" RELATIONSHIPS = "relationships" WORK = "work" SPIRITUAL = "spiritual" CHURCH = "church" WORLD = "world" OTHER = "other" class PrayerRequest(Base): __tablename__ = "prayer_requests" id = Column(Integer, primary_key=True, index=True) requester_id = Column(Integer, ForeignKey("users.id"), nullable=False) title = Column(String, nullable=False) description = Column(Text, nullable=False) category = Column(Enum(PrayerCategory), default=PrayerCategory.OTHER) privacy_level = Column(Enum(PrayerPrivacyLevel), default=PrayerPrivacyLevel.PUBLIC) status = Column(Enum(PrayerStatus), default=PrayerStatus.ACTIVE) ministry_id = Column(Integer, ForeignKey("ministries.id"), nullable=True) is_anonymous = Column(Boolean, default=False) answer_description = Column(Text, nullable=True) answered_at = Column(DateTime, nullable=True) created_at = Column(DateTime, nullable=False, default=func.now()) updated_at = Column( DateTime, nullable=False, default=func.now(), onupdate=func.now() ) # Relationships requester = relationship("User", back_populates="prayer_requests") ministry = relationship("Ministry") prayers = relationship( "Prayer", back_populates="prayer_request", cascade="all, delete-orphan" ) class Prayer(Base): __tablename__ = "prayers" id = Column(Integer, primary_key=True, index=True) prayer_request_id = Column( Integer, ForeignKey("prayer_requests.id"), nullable=False ) prayer_warrior_id = Column(Integer, ForeignKey("users.id"), nullable=False) message = Column(Text, nullable=True) prayed_at = Column(DateTime, nullable=False, default=func.now()) # Relationships prayer_request = relationship("PrayerRequest", back_populates="prayers") prayer_warrior = relationship("User") class PrayerGroup(Base): __tablename__ = "prayer_groups" id = Column(Integer, primary_key=True, index=True) name = Column(String, nullable=False) description = Column(Text, nullable=True) leader_id = Column(Integer, ForeignKey("users.id"), nullable=False) is_active = Column(Boolean, default=True) created_at = Column(DateTime, nullable=False, default=func.now()) # Relationships leader = relationship("User") members = relationship( "PrayerGroupMember", back_populates="prayer_group", cascade="all, delete-orphan" ) class PrayerGroupMember(Base): __tablename__ = "prayer_group_members" id = Column(Integer, primary_key=True, index=True) prayer_group_id = Column(Integer, ForeignKey("prayer_groups.id"), nullable=False) user_id = Column(Integer, ForeignKey("users.id"), nullable=False) joined_at = Column(DateTime, nullable=False, default=func.now()) # Relationships prayer_group = relationship("PrayerGroup", back_populates="members") user = relationship("User")