feat(calendar): add EventGuest model and total_attendee_count property

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-03-31 13:58:31 +02:00
parent 96cb134d1f
commit afee91e52c

View File

@ -2205,11 +2205,17 @@ class NordaEvent(Base):
speaker_company = relationship('Company')
creator = relationship('User', foreign_keys=[created_by])
attendees = relationship('EventAttendee', back_populates='event', cascade='all, delete-orphan')
guests = relationship('EventGuest', back_populates='event', cascade='all, delete-orphan')
@property
def attendee_count(self):
return len(self.attendees)
@property
def total_attendee_count(self):
"""Łączna liczba uczestników + gości (do sprawdzania limitu max_attendees)."""
return len(self.attendees) + len(self.guests)
@property
def is_past(self):
from datetime import date
@ -2304,6 +2310,32 @@ class EventAttendee(Base):
user = relationship('User')
class EventGuest(Base):
"""Osoby towarzyszące na wydarzeniach (bez konta na portalu)"""
__tablename__ = 'event_guests'
id = Column(Integer, primary_key=True)
event_id = Column(Integer, ForeignKey('norda_events.id', ondelete='CASCADE'), nullable=False, index=True)
host_user_id = Column(Integer, ForeignKey('users.id', ondelete='CASCADE'), nullable=False, index=True)
first_name = Column(String(100))
last_name = Column(String(100))
organization = Column(String(255))
created_at = Column(DateTime, default=datetime.now, nullable=False)
event = relationship('NordaEvent', back_populates='guests')
host = relationship('User')
@property
def display_name(self):
"""Nazwa wyświetlana gościa — łączy dostępne pola."""
parts = []
if self.first_name:
parts.append(self.first_name)
if self.last_name:
parts.append(self.last_name)
return ' '.join(parts) if parts else '(brak danych)'
# ============================================================
# PRIVATE MESSAGES
# ============================================================