Files
docupulse/templates/wiki/tabs/models.html
2025-06-19 23:02:34 +02:00

435 lines
25 KiB
HTML

<div class="row">
<div class="col-lg-8">
<!-- Overview Section -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-3">Data Models Overview</h5>
<p class="text-muted lead">
DocuPulse uses SQLAlchemy ORM with PostgreSQL to manage a comprehensive set of data models that support
multi-tenant document management, user collaboration, and system administration. The database schema
is designed for scalability, security, and efficient querying with proper relationships and constraints.
</p>
</div>
<!-- Core Models -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Core Models</h5>
<div class="row g-4">
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">User Management</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2"><strong>User:</strong> Core user accounts with roles</li>
<li class="mb-2"><strong>PasswordResetToken:</strong> Secure password recovery</li>
<li class="mb-2"><strong>PasswordSetupToken:</strong> Initial account setup</li>
<li class="mb-2"><strong>ManagementAPIKey:</strong> API authentication</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">Workspace & Collaboration</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2"><strong>Room:</strong> Document workspaces</li>
<li class="mb-2"><strong>RoomMemberPermission:</strong> Granular access control</li>
<li class="mb-2"><strong>Conversation:</strong> Real-time messaging</li>
<li class="mb-2"><strong>Message:</strong> Individual chat messages</li>
<li class="mb-2"><strong>MessageAttachment:</strong> File attachments</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">File Management</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2"><strong>RoomFile:</strong> Files and folders in rooms</li>
<li class="mb-2"><strong>UserStarredFile:</strong> User favorites system</li>
<li class="mb-2"><strong>TrashedFile:</strong> Deleted file management</li>
</ul>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card h-100 border-0 shadow-sm">
<div class="card-body">
<h6 style="color: var(--primary-color);" class="card-title mb-3">System & Administration</h6>
<ul class="list-unstyled mb-0">
<li class="mb-2"><strong>SiteSettings:</strong> Company configuration</li>
<li class="mb-2"><strong>DocuPulseSettings:</strong> System limits</li>
<li class="mb-2"><strong>KeyValueSettings:</strong> Dynamic configuration</li>
<li class="mb-2"><strong>Event:</strong> Audit logging system</li>
<li class="mb-2"><strong>Notif:</strong> Notification system</li>
<li class="mb-2"><strong>EmailTemplate:</strong> Email templates</li>
<li class="mb-2"><strong>Mail:</strong> Email tracking</li>
<li class="mb-2"><strong>Instance:</strong> Multi-tenant management</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Detailed Model Documentation -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Model Details</h5>
<!-- User Model -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-user me-2"></i>User Model
</h6>
</div>
<div class="card-body">
<p class="text-muted mb-3">Core user account with authentication, roles, and profile information.</p>
<div class="row g-3">
<div class="col-md-6">
<h6 class="text-muted mb-2">Primary Fields</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>id</code> - Primary key</li>
<li class="mb-1"><code>username</code> - Unique username</li>
<li class="mb-1"><code>email</code> - Unique email address</li>
<li class="mb-1"><code>password_hash</code> - Encrypted password</li>
<li class="mb-1"><code>is_admin</code> - Administrator role</li>
<li class="mb-1"><code>is_manager</code> - Manager role</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2">Profile Fields</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>last_name</code> - User's last name</li>
<li class="mb-1"><code>phone</code> - Contact phone</li>
<li class="mb-1"><code>company</code> - Company name</li>
<li class="mb-1"><code>position</code> - Job position</li>
<li class="mb-1"><code>profile_picture</code> - Avatar image</li>
<li class="mb-1"><code>preferred_view</code> - UI preference</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Room Model -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-door-open me-2"></i>Room Model
</h6>
</div>
<div class="card-body">
<p class="text-muted mb-3">Document workspace with member management and file organization.</p>
<div class="row g-3">
<div class="col-md-6">
<h6 class="text-muted mb-2">Core Fields</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>id</code> - Primary key</li>
<li class="mb-1"><code>name</code> - Room name</li>
<li class="mb-1"><code>description</code> - Room description</li>
<li class="mb-1"><code>created_at</code> - Creation timestamp</li>
<li class="mb-1"><code>created_by</code> - Creator user ID</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2">Relationships</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>creator</code> - Room creator (User)</li>
<li class="mb-1"><code>members</code> - Room members (User)</li>
<li class="mb-1"><code>member_permissions</code> - Member permissions</li>
<li class="mb-1"><code>files</code> - Room files (RoomFile)</li>
</ul>
</div>
</div>
</div>
</div>
<!-- RoomFile Model -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-file me-2"></i>RoomFile Model
</h6>
</div>
<div class="card-body">
<p class="text-muted mb-3">Files and folders stored within rooms with metadata and access tracking.</p>
<div class="row g-3">
<div class="col-md-6">
<h6 class="text-muted mb-2">File Information</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>id</code> - Primary key</li>
<li class="mb-1"><code>name</code> - File/folder name</li>
<li class="mb-1"><code>path</code> - File path</li>
<li class="mb-1"><code>type</code> - 'file' or 'folder'</li>
<li class="mb-1"><code>size</code> - File size in bytes</li>
<li class="mb-1"><code>modified</code> - Last modified timestamp</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2">Access Control</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>room_id</code> - Parent room</li>
<li class="mb-1"><code>uploaded_by</code> - Uploader user ID</li>
<li class="mb-1"><code>uploaded_at</code> - Upload timestamp</li>
<li class="mb-1"><code>deleted</code> - Deletion status</li>
<li class="mb-1"><code>deleted_by</code> - Deleter user ID</li>
<li class="mb-1"><code>deleted_at</code> - Deletion timestamp</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Conversation Model -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-comments me-2"></i>Conversation Model
</h6>
</div>
<div class="card-body">
<p class="text-muted mb-3">Real-time messaging conversations with member management.</p>
<div class="row g-3">
<div class="col-md-6">
<h6 class="text-muted mb-2">Conversation Details</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>id</code> - Primary key</li>
<li class="mb-1"><code>name</code> - Conversation name</li>
<li class="mb-1"><code>description</code> - Conversation description</li>
<li class="mb-1"><code>created_at</code> - Creation timestamp</li>
<li class="mb-1"><code>created_by</code> - Creator user ID</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2">Relationships</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>creator</code> - Conversation creator</li>
<li class="mb-1"><code>members</code> - Conversation members</li>
<li class="mb-1"><code>messages</code> - Conversation messages</li>
</ul>
</div>
</div>
</div>
</div>
<!-- Settings Models -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-cogs me-2"></i>Settings Models
</h6>
</div>
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<h6 class="text-muted mb-2">SiteSettings</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>primary_color</code> - Brand primary color</li>
<li class="mb-1"><code>secondary_color</code> - Brand secondary color</li>
<li class="mb-1"><code>company_name</code> - Company name</li>
<li class="mb-1"><code>company_logo</code> - Logo filename</li>
<li class="mb-1"><code>company_website</code> - Company website</li>
<li class="mb-1"><code>company_email</code> - Contact email</li>
</ul>
</div>
<div class="col-md-6">
<h6 class="text-muted mb-2">DocuPulseSettings</h6>
<ul class="list-unstyled small">
<li class="mb-1"><code>max_rooms</code> - Maximum rooms per instance</li>
<li class="mb-1"><code>max_conversations</code> - Max conversations</li>
<li class="mb-1"><code>max_storage</code> - Storage limit in bytes</li>
<li class="mb-1"><code>updated_at</code> - Last update timestamp</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!-- Database Relationships -->
<div class="mb-5">
<h5 style="color: var(--primary-color);" class="mb-4">Database Relationships</h5>
<div class="card border-0 shadow-sm">
<div class="card-body">
<div class="row g-3">
<div class="col-md-6">
<div class="d-flex align-items-start">
<div class="flex-shrink-0 me-3">
<div class="rounded-circle p-2" style="background-color: var(--primary-opacity-15);">
<i class="fas fa-users" style="color: var(--primary-color);"></i>
</div>
</div>
<div>
<h6 class="mb-1" style="color: var(--primary-color);">User Relationships</h6>
<p class="text-muted small mb-0">Users can create rooms, upload files, send messages, and participate in conversations with proper permission controls</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="d-flex align-items-start">
<div class="flex-shrink-0 me-3">
<div class="rounded-circle p-2" style="background-color: var(--primary-opacity-15);">
<i class="fas fa-folder-tree" style="color: var(--primary-color);"></i>
</div>
</div>
<div>
<h6 class="mb-1" style="color: var(--primary-color);">File Hierarchy</h6>
<p class="text-muted small mb-0">Files are organized in rooms with folder structures, starring capabilities, and trash management for deleted items</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="d-flex align-items-start">
<div class="flex-shrink-0 me-3">
<div class="rounded-circle p-2" style="background-color: var(--primary-opacity-15);">
<i class="fas fa-shield-alt" style="color: var(--primary-color);"></i>
</div>
</div>
<div>
<h6 class="mb-1" style="color: var(--primary-color);">Permission System</h6>
<p class="text-muted small mb-0">Granular permissions control access to rooms, files, and conversations with role-based and user-specific settings</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="d-flex align-items-start">
<div class="flex-shrink-0 me-3">
<div class="rounded-circle p-2" style="background-color: var(--primary-opacity-15);">
<i class="fas fa-history" style="color: var(--primary-color);"></i>
</div>
</div>
<div>
<h6 class="mb-1" style="color: var(--primary-color);">Audit Trail</h6>
<p class="text-muted small mb-0">Comprehensive event logging tracks all user actions, file operations, and system changes for security and compliance</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<!-- Quick Reference -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-info-circle me-2"></i>Quick Reference
</h6>
</div>
<div class="card-body">
<div class="mb-3">
<h6 class="text-muted mb-2">Model Categories</h6>
<div class="d-flex justify-content-between mb-1">
<span class="small">User Management</span>
<span class="badge bg-primary">4 Models</span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">File Management</span>
<span class="badge bg-success">3 Models</span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">Communication</span>
<span class="badge bg-info">3 Models</span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">System Settings</span>
<span class="badge bg-warning">8 Models</span>
</div>
</div>
<div class="mb-3">
<h6 class="text-muted mb-2">Key Features</h6>
<div class="d-flex justify-content-between mb-1">
<span class="small">Multi-tenant</span>
<span class="badge bg-success"></span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">Role-based access</span>
<span class="badge bg-success"></span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">Audit logging</span>
<span class="badge bg-success"></span>
</div>
<div class="d-flex justify-content-between mb-1">
<span class="small">File versioning</span>
<span class="badge bg-success"></span>
</div>
</div>
</div>
</div>
<!-- Database Schema -->
<div class="card border-0 shadow-sm mb-4">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-database me-2"></i>Database Schema
</h6>
</div>
<div class="card-body">
<div class="mb-3">
<h6 class="text-muted mb-2">Database Type</h6>
<div class="p-2" style="background-color: var(--primary-bg-light); border-radius: 6px;">
<div class="fw-bold" style="color: var(--primary-color);">PostgreSQL</div>
<small class="text-muted">Primary database</small>
</div>
</div>
<div class="mb-3">
<h6 class="text-muted mb-2">ORM Framework</h6>
<div class="p-2" style="background-color: var(--secondary-bg-light); border-radius: 6px;">
<div class="fw-bold" style="color: var(--secondary-color);">SQLAlchemy</div>
<small class="text-muted">Object-relational mapping</small>
</div>
</div>
<div class="mb-3">
<h6 class="text-muted mb-2">Migration Tool</h6>
<div class="p-2" style="background-color: var(--primary-bg-light); border-radius: 6px;">
<div class="fw-bold" style="color: var(--primary-color);">Alembic</div>
<small class="text-muted">Schema versioning</small>
</div>
</div>
</div>
</div>
<!-- Model Best Practices -->
<div class="card border-0 shadow-sm">
<div class="card-header bg-white">
<h6 class="mb-0" style="color: var(--primary-color);">
<i class="fas fa-lightbulb me-2"></i>Model Best Practices
</h6>
</div>
<div class="card-body">
<ul class="list-unstyled mb-0">
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Use proper foreign key constraints
</li>
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Implement cascade delete where appropriate
</li>
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Add indexes for frequently queried fields
</li>
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Use JSON fields for flexible data storage
</li>
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Include audit timestamps on all models
</li>
<li class="mb-2 small">
<i class="fas fa-check text-success me-2"></i>
Implement soft deletes for data recovery
</li>
</ul>
</div>
</div>
</div>
</div>