AgentSkillsCN

outlet-orm-best-practices

Outlet ORM 是一款受 Laravel Eloquent 启发的 Node.js ORM,支持 MySQL、PostgreSQL 与 SQLite 数据库。当您需要操作 Outlet ORM 模型、执行查询、管理关系、进行迁移,或开展数据库相关操作时,可选用此技能。v4.1.0 新增了完整的 TypeScript 支持,同时引入了泛型模型与 Copilot Skills 集成。

SKILL.md
--- frontmatter
name: outlet-orm-best-practices
description: Outlet ORM is a Laravel Eloquent-inspired ORM for Node.js with MySQL, PostgreSQL, and SQLite support. Use this skill when working with Outlet ORM models, queries, relationships, migrations, and database operations. v4.1.0 adds full TypeScript support with generic models and Copilot Skills integration.
license: MIT
metadata:
  author: omgbwa-yasse
  version: "5.0.0"
  source: https://github.com/omgbwa-yasse/outlet-orm
  npm: https://www.npmjs.com/package/outlet-orm

Outlet ORM Best Practices

Comprehensive guide for using Outlet ORM - a Laravel Eloquent-inspired ORM for Node.js/TypeScript with support for MySQL, PostgreSQL, and SQLite.

🆕 v5.0.0 : Support TypeScript complet avec Generic Model, Schema Builder typé, MigrationInterface et intégration Copilot Skills. Architecture en couches recommandée (Controllers → Services → Repositories → Models).

Documentation Index

DocumentDescription
MODELS.mdModel definition, CRUD, casts, timestamps, connections
QUERIES.mdQuery Builder, WHERE clauses, joins, pagination
RELATIONS.mdRelationships, Eager Loading, polymorphic, naming conventions
MIGRATIONS.mdSchema Builder, CLI tools, column types, foreign keys
ADVANCED.mdTransactions, Soft Deletes, Events, Validation, Best Practices
TYPESCRIPT.mdTypeScript types, generics, typed models, migrations
SECURITY.md🔐 Security best practices, authentication, authorization
API.mdComplete API Reference

When to Apply

Reference these guidelines when:


Prerequisites

  • Node.js: >= 18 (required)
  • Database Drivers (install only needed):
    • MySQL/MariaDB: npm install mysql2
    • PostgreSQL: npm install pg
    • SQLite: npm install sqlite3
bash
npm install outlet-orm

Recommended Project Structure (Layered Architecture)

When using Outlet ORM, organize your project following the Layered Architecture pattern:

🔐 Security: See the Security Guide for best practices.

code
my-project/
├── .env                           # ⚠️ NEVER commit (in .gitignore)
├── .env.example                   # Template without secrets
├── .gitignore
├── package.json
├── src/
│   ├── index.js                   # Entry point
│   ├── controllers/               # 🎮 Presentation Layer
│   │   └── UserController.js
│   ├── services/                  # ⚙️ Business Logic Layer
│   │   └── UserService.js
│   ├── repositories/              # 📦 Data Access Layer
│   │   └── UserRepository.js
│   ├── models/                    # 📊 Models Layer (outlet-orm)
│   │   └── User.js
│   ├── middlewares/               # 🔒 Auth, validation, rate limit
│   │   ├── auth.js
│   │   ├── validator.js
│   │   └── errorHandler.js
│   ├── routes/                    # 🛤️ Route definitions
│   │   └── index.js
│   ├── config/                    # 🔒 Configuration
│   │   ├── database.js
│   │   └── security.js
│   └── utils/                     # 🔒 Hash, tokens, helpers
│       └── helpers.js
├── database/
│   ├── config.js                  # Migration CLI config
│   └── migrations/
├── public/                        # ✅ Static files only
├── logs/                          # 📋 Not versioned
└── tests/
    ├── unit/
    └── integration/

Architecture Flow

code
┌─────────────────────────────────────────────────────────────┐
│                        HTTP REQUEST                         │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  🛤️ ROUTES          Route to correct controller             │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  🔒 MIDDLEWARES      Validation, Auth, Rate Limiting        │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  🎮 CONTROLLERS      HTTP handling (req/res) only           │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  ⚙️ SERVICES         Business logic, business rules         │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  📦 REPOSITORIES     Data access abstraction (CRUD)         │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│  📊 MODELS           outlet-orm (User, Post, etc.)          │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                        DATABASE                             │
└─────────────────────────────────────────────────────────────┘

Layer Responsibilities

LayerFilesResponsibilitySecurity
Controllerssrc/controllers/HTTP only (req/res)Input validation
Servicessrc/services/Business logic, rulesAuthorization
Repositoriessrc/repositories/DB abstraction, queriesSanitization
Modelssrc/models/Data structure, relationsFillable/Hidden
Middlewaressrc/middlewares/Auth, validation, errors🔒 Critical
Configsrc/config/Environment variables🔒 Reads .env
Utilssrc/utils/Hash, tokens, helpers🔒 Never expose

Quick Setup Commands

bash
# Initialize project structure
outlet-init

# Create a migration
outlet-migrate make create_users_table

# Run migrations
outlet-migrate migrate

Rule Categories by Priority

PriorityCategoryImpactDocument
1Model DefinitionCRITICALMODELS.md
2Query BuildingCRITICALQUERIES.md
3RelationshipsHIGHRELATIONS.md
4Eager LoadingHIGHRELATIONS.md
5TransactionsMEDIUM-HIGHADVANCED.md
6Soft DeletesMEDIUMADVANCED.md
7Validation & EventsMEDIUMADVANCED.md
8Migrations & CLILOW-MEDIUMMIGRATIONS.md

References