Create membership_request.py
Browse files
app/models/membership_request.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# app/models/membership_request.py
|
| 2 |
+
from datetime import datetime, date
|
| 3 |
+
from sqlalchemy import Column, Integer, String, Date, DateTime, ForeignKey, Text
|
| 4 |
+
from core.database import Base
|
| 5 |
+
from sqlalchemy.orm import relationship
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
class MembershipRequest(Base):
|
| 9 |
+
__tablename__ = "membership_requests"
|
| 10 |
+
|
| 11 |
+
id = Column(Integer, primary_key=True, index=True)
|
| 12 |
+
membership_id = Column(Integer, ForeignKey("memberships.id"), nullable=False)
|
| 13 |
+
request_type = Column(String(50), nullable=False) # "pause" or "cancel"
|
| 14 |
+
status = Column(String(50), default="pending") # pending, approved, rejected, withdrawn
|
| 15 |
+
requested_at = Column(DateTime, default=datetime.utcnow)
|
| 16 |
+
requested_by = Column(String(255), nullable=False) # user_email
|
| 17 |
+
approved_at = Column(DateTime, nullable=True)
|
| 18 |
+
approved_by = Column(String(255), nullable=True) # admin email/name
|
| 19 |
+
rejected_at = Column(DateTime, nullable=True)
|
| 20 |
+
rejected_by = Column(String(255), nullable=True)
|
| 21 |
+
withdrawn_at = Column(DateTime, nullable=True)
|
| 22 |
+
notes = Column(Text, nullable=True) # Admin notes for approval/rejection
|
| 23 |
+
|
| 24 |
+
# Relationship to membership
|
| 25 |
+
membership = relationship("Membership", backref="requests")
|
| 26 |
+
|