add events table

This commit is contained in:
2025-05-29 13:57:28 +02:00
parent 5ecb8c956c
commit 3174f8fa5b
8 changed files with 258 additions and 1 deletions

View File

@@ -4,6 +4,7 @@ from werkzeug.security import generate_password_hash, check_password_hash
from datetime import datetime
from sqlalchemy.orm import relationship
from extensions import db
from enum import Enum
# Association table for room members
room_members = db.Table('room_members',
@@ -201,4 +202,62 @@ class MessageAttachment(db.Model):
message = db.relationship('Message', back_populates='attachments')
def __repr__(self):
return f'<MessageAttachment {self.name}>'
return f'<MessageAttachment {self.name}>'
class EventType(Enum):
# User events
USER_LOGIN = 'user_login'
USER_LOGOUT = 'user_logout'
USER_CREATE = 'user_create'
USER_UPDATE = 'user_update'
USER_DELETE = 'user_delete'
# Room events
ROOM_CREATE = 'room_create'
ROOM_UPDATE = 'room_update'
ROOM_DELETE = 'room_delete'
ROOM_MEMBER_ADD = 'room_member_add'
ROOM_MEMBER_REMOVE = 'room_member_remove'
ROOM_PERMISSION_UPDATE = 'room_permission_update'
# File events
FILE_UPLOAD = 'file_upload'
FILE_DOWNLOAD = 'file_download'
FILE_DELETE = 'file_delete'
FILE_RENAME = 'file_rename'
FILE_MOVE = 'file_move'
FILE_STAR = 'file_star'
FILE_UNSTAR = 'file_unstar'
# Conversation events
CONVERSATION_CREATE = 'conversation_create'
CONVERSATION_UPDATE = 'conversation_update'
CONVERSATION_DELETE = 'conversation_delete'
CONVERSATION_MEMBER_ADD = 'conversation_member_add'
CONVERSATION_MEMBER_REMOVE = 'conversation_member_remove'
# Message events
MESSAGE_CREATE = 'message_create'
MESSAGE_UPDATE = 'message_update'
MESSAGE_DELETE = 'message_delete'
MESSAGE_ATTACHMENT_ADD = 'message_attachment_add'
MESSAGE_ATTACHMENT_REMOVE = 'message_attachment_remove'
# Settings events
SETTINGS_UPDATE = 'settings_update'
class Event(db.Model):
__tablename__ = 'events'
id = db.Column(db.Integer, primary_key=True)
event_type = db.Column(db.String(50), nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
details = db.Column(db.JSON) # Store additional event-specific data
ip_address = db.Column(db.String(45)) # IPv6 addresses can be up to 45 chars
user_agent = db.Column(db.String(255))
# Relationships
user = db.relationship('User', backref='events')
def __repr__(self):
return f'<Event {self.event_type} by User {self.user_id} at {self.timestamp}>'