2026_08_03_000002_create_documentation_tables.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. declare(strict_types=1);
  3. use Illuminate\Database\Migrations\Migration;
  4. use Illuminate\Database\Schema\Blueprint;
  5. use Illuminate\Support\Facades\Schema;
  6. return new class extends Migration
  7. {
  8. public function up(): void
  9. {
  10. Schema::create('documentation_folders', function (Blueprint $table): void {
  11. $table->id();
  12. $table->foreignId('parent_id')
  13. ->nullable()
  14. ->constrained('documentation_folders')
  15. ->cascadeOnDelete();
  16. $table->string('name');
  17. $table->boolean('inherits_permissions')->default(true);
  18. $table->foreignId('created_by')->constrained('users')->restrictOnDelete();
  19. $table->timestamps();
  20. $table->index(['parent_id', 'name']);
  21. });
  22. Schema::create('documentation_folder_permissions', function (Blueprint $table): void {
  23. $table->id();
  24. $table->foreignId('folder_id')->constrained('documentation_folders')->cascadeOnDelete();
  25. $table->string('subject_type', 16);
  26. $table->foreignId('role_id')->nullable()->constrained('roles')->cascadeOnDelete();
  27. $table->foreignId('user_id')->nullable()->constrained('users')->cascadeOnDelete();
  28. $table->boolean('can_read')->default(false);
  29. $table->boolean('can_write')->default(false);
  30. $table->timestamps();
  31. $table->index(['folder_id', 'subject_type']);
  32. $table->index(['role_id', 'can_read', 'can_write'], 'documentation_folder_role_access_index');
  33. $table->index(['user_id', 'can_read', 'can_write'], 'documentation_folder_user_access_index');
  34. });
  35. Schema::create('documentation_documents', function (Blueprint $table): void {
  36. $table->id();
  37. $table->foreignId('folder_id')->constrained('documentation_folders')->cascadeOnDelete();
  38. $table->string('name');
  39. $table->unsignedInteger('last_version_number')->default(0);
  40. $table->foreignId('created_by')->constrained('users')->restrictOnDelete();
  41. $table->timestamps();
  42. $table->index(['folder_id', 'name']);
  43. });
  44. Schema::create('documentation_document_versions', function (Blueprint $table): void {
  45. $table->id();
  46. $table->foreignId('document_id')->constrained('documentation_documents')->cascadeOnDelete();
  47. $table->foreignId('file_id')->constrained('files')->restrictOnDelete();
  48. $table->unsignedInteger('version');
  49. $table->unsignedBigInteger('file_size')->default(0);
  50. $table->foreignId('created_by')->constrained('users')->restrictOnDelete();
  51. $table->timestamps();
  52. $table->unique(['document_id', 'version']);
  53. });
  54. }
  55. public function down(): void
  56. {
  57. Schema::dropIfExists('documentation_document_versions');
  58. Schema::dropIfExists('documentation_documents');
  59. Schema::dropIfExists('documentation_folder_permissions');
  60. Schema::dropIfExists('documentation_folders');
  61. }
  62. };