Add models for EmailTemplate, ActivityLog, and NotificationLog
Introduced new database models to handle email templates, activity logs, and notification logs, including relevant enums and utilities. Updated ER diagram to reflect new relationships and attributes, enhancing event tracking and notification management capabilities.
This commit is contained in:
120
backend/app/models/activity_log.py
Normal file
120
backend/app/models/activity_log.py
Normal file
@@ -0,0 +1,120 @@
|
||||
from enum import Enum
|
||||
from sqlalchemy import Column, String, ForeignKey, Enum as SQLEnum, Text
|
||||
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
||||
from sqlalchemy.orm import relationship
|
||||
from .base import Base, TimestampMixin, UUIDMixin
|
||||
|
||||
|
||||
class ActivityType(str, Enum):
|
||||
# Event Activities
|
||||
EVENT_CREATED = "event_created"
|
||||
EVENT_UPDATED = "event_updated"
|
||||
|
||||
# Guest Activities
|
||||
GUEST_ADDED = "guest_added"
|
||||
GUEST_INVITED = "guest_invited"
|
||||
GUEST_RSVP = "guest_rsvp"
|
||||
|
||||
# Gift Activities
|
||||
GIFT_ADDED = "gift_added"
|
||||
GIFT_UPDATED = "gift_updated"
|
||||
GIFT_RESERVED = "gift_reserved"
|
||||
GIFT_PURCHASED = "gift_purchased"
|
||||
|
||||
# User Activities
|
||||
USER_LOGIN = "user_login"
|
||||
USER_LOGOUT = "user_logout"
|
||||
USER_CREATED = "user_created"
|
||||
|
||||
# Manager Activities
|
||||
MANAGER_ADDED = "manager_added"
|
||||
MANAGER_REMOVED = "manager_removed"
|
||||
MANAGER_UPDATED = "manager_updated"
|
||||
|
||||
# Media Activities
|
||||
MEDIA_UPLOADED = "media_uploaded"
|
||||
MEDIA_DELETED = "media_deleted"
|
||||
|
||||
# Other
|
||||
ACCESS_DENIED = "access_denied"
|
||||
SYSTEM_ERROR = "system_error"
|
||||
|
||||
|
||||
class ActivityLog(Base, UUIDMixin, TimestampMixin):
|
||||
__tablename__ = 'activity_logs'
|
||||
|
||||
# Activity Details
|
||||
activity_type = Column(SQLEnum(ActivityType), nullable=False)
|
||||
description = Column(Text)
|
||||
|
||||
# Context
|
||||
event_id = Column(UUID(as_uuid=True), ForeignKey('events.id')) # Optional, for event-specific activities
|
||||
user_id = Column(UUID(as_uuid=True), ForeignKey('users.id')) # Optional, for user-initiated activities
|
||||
guest_id = Column(UUID(as_uuid=True), ForeignKey('guests.id')) # Optional, for guest activities
|
||||
|
||||
# Additional Context
|
||||
target_id = Column(UUID(as_uuid=True)) # Generic ID of the target object (gift, media, etc.)
|
||||
target_type = Column(String) # Type of the target object ("gift", "media", etc.)
|
||||
|
||||
# Request Information
|
||||
ip_address = Column(String)
|
||||
user_agent = Column(String)
|
||||
|
||||
# Additional Data
|
||||
data = Column(JSONB, default=dict)
|
||||
|
||||
# Relationships
|
||||
event = relationship("Event")
|
||||
user = relationship("User", foreign_keys=[user_id])
|
||||
guest = relationship("Guest")
|
||||
|
||||
def __repr__(self):
|
||||
return f"<ActivityLog {self.activity_type.value} event_id={self.event_id}>"
|
||||
|
||||
@classmethod
|
||||
def log_event_activity(cls, activity_type, event_id, user_id=None, description=None,
|
||||
ip_address=None, user_agent=None, **data):
|
||||
"""
|
||||
Helper method to create an event activity log entry
|
||||
"""
|
||||
return cls(
|
||||
activity_type=activity_type,
|
||||
event_id=event_id,
|
||||
user_id=user_id,
|
||||
description=description,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
data=data
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def log_user_activity(cls, activity_type, user_id, event_id=None, description=None,
|
||||
ip_address=None, user_agent=None, **data):
|
||||
"""
|
||||
Helper method to create a user activity log entry
|
||||
"""
|
||||
return cls(
|
||||
activity_type=activity_type,
|
||||
user_id=user_id,
|
||||
event_id=event_id,
|
||||
description=description,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
data=data
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def log_guest_activity(cls, activity_type, guest_id, event_id, description=None,
|
||||
ip_address=None, user_agent=None, **data):
|
||||
"""
|
||||
Helper method to create a guest activity log entry
|
||||
"""
|
||||
return cls(
|
||||
activity_type=activity_type,
|
||||
guest_id=guest_id,
|
||||
event_id=event_id,
|
||||
description=description,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
data=data
|
||||
)
|
||||
Reference in New Issue
Block a user