Overview
AnimeThemes Server is a Laravel-based application that provides resource management and a comprehensive API for the AnimeThemes.moe platform. The architecture follows Laravel best practices and modern PHP development patterns.Technology Stack
Core Framework
- Laravel 12.x: PHP web application framework
- PHP 8.5: Modern PHP with strict typing
- MySQL 8+: Primary database
Key Packages
- Filament 5.x: Admin panel framework
- GraphQL (rebing/graphql-laravel): GraphQL API layer
- Laravel Scout: Full-text search integration
- Elasticsearch: Search engine via Scout
- Laravel Horizon: Queue monitoring
- Laravel Sanctum: API authentication
- Spatie Permissions: Role-based access control
Development Tools
- Pest PHP: Testing framework
- Laravel Pint: Code style fixer
- PHPStan (Larastan): Static analysis
- Rector: Automated refactoring
Directory Structure
Core Architecture Patterns
MVC Pattern
The application follows the Model-View-Controller pattern: Models (app/Models/): Eloquent ORM models representing database entities
app/Http/Controllers/): Handle HTTP requests
app/Http/Resources/): Transform models to JSON
Repository Pattern
Repositories encapsulate data access logic:Action Pattern
Single-purpose action classes for complex operations:Observer Pattern
Model observers handle lifecycle events:Data Model
Core Entities
Wiki Domain (app/Models/Wiki/):
- Anime: Anime series information
- AnimeTheme: Opening/ending themes
- AnimeThemeEntry: Theme variants
- Video: Video files
- Audio: Audio files
- Artist: Music artists
- Song: Music compositions
- Studio: Animation studios
- Series: Anime series groupings
- Image: Cover art and images
- ExternalResource: Links to external sites
app/Models/Auth/):
- User: Application users
- Role: User roles
- Permission: Access permissions
app/Models/List/):
- Playlist: User playlists
- PlaylistTrack: Playlist entries
- ExternalProfile: MyAnimeList/AniList profiles
Relationships
The data model uses Laravel’s Eloquent relationships: One-to-Many:API Architecture
REST API
Route Structure (routes/api.php):
- Filtering: Query parameters for filtering results
- Sorting: Order results by fields
- Pagination: Cursor and page-based pagination
- Field Selection: Sparse fieldsets
- Includes: Related resource loading
- Soft Deletes: Restore and force delete operations
- Rate limiting
- Authentication (Sanctum)
- CORS handling
- Query validation
GraphQL API
Schema Location:app/GraphQL/schemas/
Provides an alternative query interface with:
- Type-safe queries
- Nested resource loading
- Custom resolvers
- Introspection support
/graphql
GraphiQL Interface: Available in development mode
Search Architecture
Elasticsearch Integration
Scout Drivers: Custom Elasticsearch driver viaelastic-scout-driver-plus
Searchable Models:
- Anime
- Artist
- Song
- Video
- And more…
app/Scout/):
- Custom query builders
- Filter parsers
- Sort parsers
- Pagination parsers
Queue Architecture
Job Processing
Queue Driver: Configurable (sync, database, Redis) Job Categories (app/Jobs/):
- Wiki Jobs: Resource creation/updates
- Discord Jobs: Notifications
- Admin Jobs: Maintenance tasks
- Pivot Jobs: Relationship management
/horizon
Event-Driven Architecture
Events (app/Events/):
- Resource created/updated/deleted
- User actions
- System events
app/Listeners/):
- Send notifications
- Update search indices
- Log activities
- Dispatch follow-up jobs
Storage Architecture
Multi-Disk Strategy
Disk Configuration:- Local: Development storage
- S3 (Multiple Regions): Production storage
- NYC (New York City) region
- FRA (Frankfurt) region
- Videos: WebM files, multiple quality levels
- Audio: Opus audio files
- Images: Cover art, thumbnails
- Scripts: Video subtitle files
- Dumps: Database exports
- Response-based streaming (default)
- Nginx X-Accel-Redirect support for performance
Admin Panel
Filament Framework
Location:/admin and /submission
Resources (app/Filament/Resources/):
- CRUD interfaces for all models
- Custom forms and tables
- Bulk actions
- Filters and searches
- Role-based permissions via Spatie
- Special permissions for admin features
Security Features
Authentication & Authorization
Sanctum: Token-based API authentication Fortify: User authentication flows- Registration
- Login
- Password reset
- Email verification
app/Policies/): Fine-grained authorization
Additional Security
Secure Headers: CSP, HSTS, and more viabepsvpt/secure-headers
Rate Limiting: Per-endpoint and per-query limits
Input Validation: Custom validation rules in app/Rules/
Moderation: Configurable moderation services
Performance Optimization
Caching Strategy
- Query Caching: Cache database results
- Route Caching: Pre-compile routes
- Config Caching: Optimize configuration loading
- View Caching: Compiled Blade templates
Database Optimization
- Eager Loading: Prevent N+1 queries
- Indexing: Optimized database indices
- Read/Write Splitting: Separate read/write connections
CDN Integration
- S3 Distribution: Multi-region asset delivery
- Public URLs: Direct S3 access for media
Deployment Architecture
Environment Configuration
Development (.env):
- Local storage
- SQLite for testing
- Debug mode enabled
- Sync queue driver
.env.production):
- S3 storage
- MySQL with read replicas
- Queue workers (Horizon)
- Redis caching
- Elasticsearch enabled
Database Migrations
Version Control: All schema changes via migrations Migration Commands:Monitoring & Logging
Laravel Pulse
Real-time application metrics at/pulse
Logging
Channels:- Daily: Rotating daily logs
- Stack: Multiple channels
- Custom: Discord notifications
storage/logs/laravel.log- External logging services (configurable)
Auditing
Laravel Auditing: Track model changes- Who made changes
- What was changed
- When changes occurred
API Versioning
Currently using implicit versioning via:- Route prefixes (
/api/) - Resource transformers
- Backward compatibility maintenance
External Integrations
Discord
- Bot notifications
- Database update announcements
- Admin alerts
MyAnimeList & AniList
- OAuth integration
- Profile syncing
- External entry management
Third-Party Services
- Mailgun: Email delivery
- AWS S3: Media storage
- Elasticsearch: Search functionality
Development Patterns
Enums (PHP 8.1+)
Type-safe enumerations inapp/Enums/:
Strict Typing
All files usedeclare(strict_types=1); for type safety.
Feature Flags
Laravel Pennant: Toggle features without deploymentScalability Considerations
Horizontal Scaling:- Stateless application design
- Session storage in database/Redis
- Queue workers can run on multiple servers
- Read replicas supported
- Connection pooling
- Query optimization
- S3 multi-region support
- CDN-ready architecture
- Lazy loading for resources