diff --git a/database.py b/database.py index 87f6b3c..8621fb6 100644 --- a/database.py +++ b/database.py @@ -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 # ============================================================