266 lines
12 KiB
Markdown
266 lines
12 KiB
Markdown
# Libra - Source Tree & Directory Structure
|
|
|
|
> Extracted from `docs/architecture.md` Section 6
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
libra/
|
|
├── app/
|
|
│ ├── Actions/ # Business logic (single-purpose)
|
|
│ │ ├── Fortify/ # Auth actions (existing)
|
|
│ │ │ ├── CreateNewUser.php
|
|
│ │ │ ├── ResetUserPassword.php
|
|
│ │ │ └── UpdateUserPassword.php
|
|
│ │ ├── Consultation/
|
|
│ │ │ ├── CreateConsultationAction.php
|
|
│ │ │ ├── ApproveConsultationAction.php
|
|
│ │ │ ├── RejectConsultationAction.php
|
|
│ │ │ ├── CompleteConsultationAction.php
|
|
│ │ │ └── CancelConsultationAction.php
|
|
│ │ ├── Timeline/
|
|
│ │ │ ├── CreateTimelineAction.php
|
|
│ │ │ ├── AddTimelineUpdateAction.php
|
|
│ │ │ └── ArchiveTimelineAction.php
|
|
│ │ ├── User/
|
|
│ │ │ ├── CreateClientAction.php
|
|
│ │ │ ├── UpdateClientAction.php
|
|
│ │ │ ├── DeactivateClientAction.php
|
|
│ │ │ ├── ReactivateClientAction.php
|
|
│ │ │ ├── DeleteClientAction.php
|
|
│ │ │ └── ConvertClientTypeAction.php
|
|
│ │ ├── Post/
|
|
│ │ │ ├── CreatePostAction.php
|
|
│ │ │ ├── UpdatePostAction.php
|
|
│ │ │ ├── PublishPostAction.php
|
|
│ │ │ └── DeletePostAction.php
|
|
│ │ └── Export/
|
|
│ │ ├── ExportUsersAction.php
|
|
│ │ ├── ExportConsultationsAction.php
|
|
│ │ └── GenerateMonthlyReportAction.php
|
|
│ ├── Enums/ # PHP 8.1+ enums
|
|
│ │ ├── UserType.php
|
|
│ │ ├── UserStatus.php
|
|
│ │ ├── ConsultationType.php
|
|
│ │ ├── ConsultationStatus.php
|
|
│ │ ├── PaymentStatus.php
|
|
│ │ ├── TimelineStatus.php
|
|
│ │ └── PostStatus.php
|
|
│ ├── Http/
|
|
│ │ ├── Controllers/ # Minimal controllers
|
|
│ │ │ ├── LanguageController.php
|
|
│ │ │ └── CalendarDownloadController.php
|
|
│ │ └── Middleware/
|
|
│ │ ├── SetLocale.php
|
|
│ │ ├── EnsureUserIsAdmin.php
|
|
│ │ └── EnsureUserIsActive.php
|
|
│ ├── Jobs/ # Queue jobs
|
|
│ │ ├── SendWelcomeEmail.php
|
|
│ │ ├── SendBookingNotification.php
|
|
│ │ ├── SendConsultationReminder.php
|
|
│ │ ├── SendTimelineUpdateNotification.php
|
|
│ │ └── GenerateExportFile.php
|
|
│ ├── Livewire/ # Full-page Livewire components (if any)
|
|
│ │ └── Forms/ # Livewire form objects
|
|
│ │ ├── ConsultationForm.php
|
|
│ │ ├── ClientForm.php
|
|
│ │ ├── TimelineForm.php
|
|
│ │ └── PostForm.php
|
|
│ ├── Mail/ # Mailable classes
|
|
│ │ ├── WelcomeMail.php
|
|
│ │ ├── BookingSubmittedMail.php
|
|
│ │ ├── BookingApprovedMail.php
|
|
│ │ ├── BookingRejectedMail.php
|
|
│ │ ├── ConsultationReminderMail.php
|
|
│ │ ├── TimelineUpdatedMail.php
|
|
│ │ └── NewBookingRequestMail.php
|
|
│ ├── Models/ # Eloquent models
|
|
│ │ ├── User.php
|
|
│ │ ├── Consultation.php
|
|
│ │ ├── Timeline.php
|
|
│ │ ├── TimelineUpdate.php
|
|
│ │ ├── Post.php
|
|
│ │ ├── WorkingHour.php
|
|
│ │ ├── BlockedTime.php
|
|
│ │ ├── Notification.php
|
|
│ │ ├── AdminLog.php
|
|
│ │ └── Setting.php
|
|
│ ├── Observers/ # Model observers
|
|
│ │ ├── ConsultationObserver.php
|
|
│ │ ├── TimelineUpdateObserver.php
|
|
│ │ └── UserObserver.php
|
|
│ ├── Policies/ # Authorization policies
|
|
│ │ ├── ConsultationPolicy.php
|
|
│ │ ├── TimelinePolicy.php
|
|
│ │ ├── PostPolicy.php
|
|
│ │ └── UserPolicy.php
|
|
│ ├── Providers/
|
|
│ │ ├── AppServiceProvider.php
|
|
│ │ └── FortifyServiceProvider.php
|
|
│ └── Services/ # Cross-cutting services
|
|
│ ├── AvailabilityService.php
|
|
│ ├── CalendarService.php
|
|
│ └── ExportService.php
|
|
├── config/
|
|
│ └── libra.php # App-specific config
|
|
├── database/
|
|
│ ├── factories/
|
|
│ │ ├── UserFactory.php
|
|
│ │ ├── ConsultationFactory.php
|
|
│ │ ├── TimelineFactory.php
|
|
│ │ ├── TimelineUpdateFactory.php
|
|
│ │ └── PostFactory.php
|
|
│ ├── migrations/
|
|
│ └── seeders/
|
|
│ ├── DatabaseSeeder.php
|
|
│ ├── AdminSeeder.php
|
|
│ ├── WorkingHoursSeeder.php
|
|
│ └── DemoDataSeeder.php
|
|
├── docs/
|
|
│ ├── architecture.md # Main architecture document
|
|
│ ├── architecture/ # Sharded architecture docs
|
|
│ │ ├── tech-stack.md
|
|
│ │ ├── source-tree.md
|
|
│ │ └── coding-standards.md
|
|
│ ├── prd.md # Product requirements
|
|
│ ├── epics/ # Epic definitions
|
|
│ └── stories/ # User stories
|
|
├── resources/
|
|
│ ├── views/
|
|
│ │ ├── components/ # Blade components
|
|
│ │ │ ├── layouts/
|
|
│ │ │ │ ├── app.blade.php # Main app layout
|
|
│ │ │ │ ├── guest.blade.php # Guest/public layout
|
|
│ │ │ │ └── admin.blade.php # Admin layout
|
|
│ │ │ └── ui/ # Reusable UI components
|
|
│ │ │ ├── card.blade.php
|
|
│ │ │ ├── stat-card.blade.php
|
|
│ │ │ ├── status-badge.blade.php
|
|
│ │ │ └── language-switcher.blade.php
|
|
│ │ ├── emails/ # Email templates
|
|
│ │ │ ├── welcome.blade.php
|
|
│ │ │ ├── booking-submitted.blade.php
|
|
│ │ │ ├── booking-approved.blade.php
|
|
│ │ │ ├── booking-rejected.blade.php
|
|
│ │ │ ├── consultation-reminder.blade.php
|
|
│ │ │ ├── timeline-updated.blade.php
|
|
│ │ │ └── new-booking-request.blade.php
|
|
│ │ ├── livewire/ # Volt single-file components
|
|
│ │ │ ├── admin/ # Admin area
|
|
│ │ │ │ ├── dashboard.blade.php
|
|
│ │ │ │ ├── users/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ ├── create.blade.php
|
|
│ │ │ │ │ └── edit.blade.php
|
|
│ │ │ │ ├── consultations/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ ├── pending.blade.php
|
|
│ │ │ │ │ ├── calendar.blade.php
|
|
│ │ │ │ │ └── show.blade.php
|
|
│ │ │ │ ├── timelines/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ ├── create.blade.php
|
|
│ │ │ │ │ └── show.blade.php
|
|
│ │ │ │ ├── posts/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ ├── create.blade.php
|
|
│ │ │ │ │ └── edit.blade.php
|
|
│ │ │ │ ├── settings/
|
|
│ │ │ │ │ ├── working-hours.blade.php
|
|
│ │ │ │ │ ├── blocked-times.blade.php
|
|
│ │ │ │ │ └── content-pages.blade.php
|
|
│ │ │ │ └── reports/
|
|
│ │ │ │ └── index.blade.php
|
|
│ │ │ ├── client/ # Client area
|
|
│ │ │ │ ├── dashboard.blade.php
|
|
│ │ │ │ ├── consultations/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ └── book.blade.php
|
|
│ │ │ │ ├── timelines/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ └── show.blade.php
|
|
│ │ │ │ └── profile.blade.php
|
|
│ │ │ ├── pages/ # Public pages
|
|
│ │ │ │ ├── home.blade.php
|
|
│ │ │ │ ├── posts/
|
|
│ │ │ │ │ ├── index.blade.php
|
|
│ │ │ │ │ └── show.blade.php
|
|
│ │ │ │ ├── terms.blade.php
|
|
│ │ │ │ └── privacy.blade.php
|
|
│ │ │ ├── auth/ # Auth pages (existing)
|
|
│ │ │ └── settings/ # User settings (existing)
|
|
│ │ ├── pdf/ # PDF templates
|
|
│ │ │ ├── users-export.blade.php
|
|
│ │ │ ├── consultations-export.blade.php
|
|
│ │ │ └── monthly-report.blade.php
|
|
│ │ └── errors/ # Error pages
|
|
│ │ ├── 404.blade.php
|
|
│ │ ├── 403.blade.php
|
|
│ │ └── 500.blade.php
|
|
│ ├── css/
|
|
│ │ └── app.css # Tailwind entry point
|
|
│ ├── js/
|
|
│ │ └── app.js # Minimal JS
|
|
│ └── lang/ # Translations
|
|
│ ├── ar/
|
|
│ │ ├── auth.php
|
|
│ │ ├── validation.php
|
|
│ │ ├── pagination.php
|
|
│ │ ├── passwords.php
|
|
│ │ ├── messages.php
|
|
│ │ ├── models.php
|
|
│ │ ├── enums.php
|
|
│ │ └── emails.php
|
|
│ └── en/
|
|
│ └── ... (same structure)
|
|
├── routes/
|
|
│ ├── web.php # Web routes
|
|
│ └── console.php # Scheduled commands
|
|
├── tests/
|
|
│ ├── Feature/
|
|
│ │ ├── Admin/
|
|
│ │ │ ├── DashboardTest.php
|
|
│ │ │ ├── UserManagementTest.php
|
|
│ │ │ ├── ConsultationManagementTest.php
|
|
│ │ │ ├── TimelineManagementTest.php
|
|
│ │ │ ├── PostManagementTest.php
|
|
│ │ │ └── SettingsTest.php
|
|
│ │ ├── Client/
|
|
│ │ │ ├── DashboardTest.php
|
|
│ │ │ ├── BookingTest.php
|
|
│ │ │ ├── TimelineViewTest.php
|
|
│ │ │ └── ProfileTest.php
|
|
│ │ ├── Public/
|
|
│ │ │ ├── HomePageTest.php
|
|
│ │ │ ├── PostsTest.php
|
|
│ │ │ └── LanguageSwitchTest.php
|
|
│ │ └── Auth/
|
|
│ │ └── ... (existing tests)
|
|
│ └── Unit/
|
|
│ ├── Actions/
|
|
│ ├── Models/
|
|
│ ├── Services/
|
|
│ └── Enums/
|
|
├── storage/
|
|
│ └── app/
|
|
│ └── exports/ # Generated export files
|
|
├── .github/
|
|
│ └── workflows/
|
|
│ └── ci.yml # GitHub Actions CI
|
|
└── public/
|
|
└── build/ # Compiled assets
|
|
```
|
|
|
|
## Key Modules & Their Purpose
|
|
|
|
| Module | Location | Purpose |
|
|
|--------|----------|---------|
|
|
| **User Management** | `app/Actions/User/` | CRUD for clients (individual/company) |
|
|
| **Consultation Booking** | `app/Actions/Consultation/` | Booking lifecycle management |
|
|
| **Timeline/Case Tracking** | `app/Actions/Timeline/` | Case progress tracking |
|
|
| **Posts/Blog** | `app/Actions/Post/` | Legal content publishing |
|
|
| **Export Generation** | `app/Actions/Export/` | PDF/CSV report generation |
|
|
| **Authentication** | `app/Actions/Fortify/` | Fortify auth customization |
|
|
| **Email Notifications** | `app/Mail/`, `app/Jobs/` | Queued email delivery |
|
|
| **Authorization** | `app/Policies/` | Access control policies |
|