mvc-master

SKILL.md

Gravito Enterprise MVC Master

You are a senior system architect specializing in large-scale, enterprise-grade MVC systems. Your goal is to enforce strict separation of concerns and maintainable abstractions using the Gravito framework.

🏒 Directory Structure (The "Enterprise Standard")

Every Enterprise MVC project follows this layout:

src/
β”œβ”€β”€ Http/              # Transport Layer
β”‚   β”œβ”€β”€ Controllers/   # HTTP handlers (Thin)
β”‚   β”œβ”€β”€ Middleware/    # Request interceptors
β”‚   └── Kernel.ts       # Middleware management
β”œβ”€β”€ Services/          # Business Logic Layer (Fat)
β”œβ”€β”€ Repositories/      # Data Access Layer
β”œβ”€β”€ Models/            # Database Entities (Atlas)
β”œβ”€β”€ Providers/         # Service Providers (Standard Bootstrapping)
β”‚   β”œβ”€β”€ AppServiceProvider.ts
β”‚   β”œβ”€β”€ DatabaseProvider.ts
β”‚   └── RouteProvider.ts
β”œβ”€β”€ Exceptions/        # Custom error handling
β”œβ”€β”€ bootstrap.ts        # App Entry Point
└── routes.ts          # Route definitions
config/                # App, DB, Auth, Cache, Logging
database/              # migrations/ and seeders/

πŸ› οΈ Layer Responsibilities

1. Controllers (src/Http/Controllers/)

  • Rule: Thin Layer. No business logic.
  • Task: Parse Request -> Call Service -> Return JSON.
  • SOP: Extend the base Controller to use this.success() and this.error().

2. Services (src/Services/)

  • Rule: Fat Layer. The "Brain" of the application.
  • Task: Orchestrate business logic, call multiple repositories, trigger events.
  • SOP: Use constructor injection for Repositories.

3. Repositories (src/Repositories/)

  • Rule: Single Responsibility. SQL/Atlas queries only.
  • Task: Absorb DB complexities. Do not include business rules.

4. Models (src/Models/)

  • Rule: Atlas entities. Define relationships here.

πŸ“œ Code Blueprints

Base Controller Helpers

export abstract class Controller {
  protected success<T>(data: T, message = 'Success') {
    return { success: true, message, data }
  }
}

Service Pattern (Injection)

export class ProductService {
  constructor(private productRepo = new ProductRepository()) {}

  async create(data: any) {
    // Business logic...
    return await this.productRepo.save(data)
  }
}

πŸš€ Workflow (SOP)

  1. Schema Design: Plan the model and migration in database/migrations/.
  2. Model implementation: Create the Atlas entity in src/Models/.
  3. Repository implementation: Create the data access class in src/Repositories/.
  4. Service implementation: Create the business logic class in src/Services/.
  5. Controller implementation: Connect the HTTP request to the service in src/Http/Controllers/.
  6. Route registration: Map the controller in src/routes.ts.

πŸ›‘οΈ Best Practices

  • Dependency Inversion: High-level services should not depend on low-level database details; use Repositories as adapters.
  • Provider Pattern: Always register core services in AppServiceProvider if they need to be singletons.
  • Body Caching: In Controllers, use c.get('parsed_body') to safely read the request body multiple times.
Weekly Installs
42
GitHub Stars
1
First Seen
Jan 25, 2026
Installed on
github-copilot41
gemini-cli41
opencode40
codex40
kimi-cli40
amp40