Naming Conventions
This guide outlines the naming conventions used across the Parallel monorepo to ensure consistency and readability.
Casing Rules
Classes and Types
Use PascalCase for all classes, types, and interfaces:
class UserProfile {}
type RequestConfig = {};
interface ApiResponse {}Constants and Functions
Use camelCase for constants, functions, and variables:
const maxRetries = 3;
function fetchUserData() {}
const getUserById = () => {};Files and Folders
Use kebab-case with suffixes to indicate file type:
user-profile.service.ts
api-config.enum.ts
database.type.ts
auth.module.ts
user.repository.tsCommon Suffix Patterns
.enum.ts- Enumerations.type.ts- Type definitions.module.ts- Module files.service.ts- Service classes.repository.ts- Repository classes.aggregate.ts- Domain aggregates.entity.ts- Domain entities.value-object.ts- Domain value objects.use-case.ts- Application use cases.dto.ts- Data transfer objects.mapper.ts- Data mappers
Singular vs Plural
Default: Use singular names
Files, folders, and variables should use singular names by default. Plural forms are reserved for specific cases outlined below.
Exceptions (use plural):
1. Collections
Folders or files containing multiple related objects:
✅ features/
✅ components/
✅ routes/
✅ clients/
✅ utils.ts
✅ services/
✅ 2-molecules/
✅ instance-definitions/
✅ instance-actions/
✅ CodingSocketProviderProps
✅ UploadDocumentOptions
✅ UpdateSearchParams
❌ documents/
❌ medical-codes/2. List Operations
Logic that operates on a list of objects:
✅ medical-stays-page.tsx
✅ getMedicalStays()
✅ instance-definitions-page.tsx3. REST API Routes
Follow REST conventions for route naming:
✅ /users
✅ /products
✅ /ordersTIP
Route conventions directly impact folder/file naming in frameworks like Next.js where file structure defines routes.
Enums and Constants Collections
Enums (Singular)
Use singular names for enums since they represent a type (one value at a time):
// ✅ Correct - represents ONE permission when used as a type
export enum CodingOrchestratorPermission {
CREATE_FROM_IMPORTED_MEDICAL_STAY = "c.ms.cfims",
TRIGGER_AI_CODING = "c.ms.tac",
}
// Usage: the variable holds ONE permission
function checkPermission(permission: CodingOrchestratorPermission) {}
// ✅ Other examples
export enum UserRole {}
export enum ErrorCode {}
export enum DomainErrorMetric {}Const Objects as Collections (Plural)
Use plural names for const objects that serve as collections/namespaces:
// ✅ Correct - this is a collection of queues, not a type
export const BullMqQueues = {
CODING_MEDICAL_STAY_PREPROCESS_QUEUE: 'CODING_MEDICAL_STAY_PREPROCESS_QUEUE',
OCR_DOCUMENT_QUEUE: 'OCR_DOCUMENT_QUEUE',
} as const
// Usage: accessing a value from the collection
const queueName = BullMqQueues.OCR_DOCUMENT_QUEUE
// If you need a type from it, derive it with singular name
type BullMqQueue = keyof typeof BullMqQueues // Singular for the type
// ✅ Other examples
export const Routes = { HOME: '/home', PROFILE: '/profile' }
export const ApiEndpoints = { USERS: '/api/users' }
export const Colors = { PRIMARY: '#007bff' }Constants Files
Use plural for files containing multiple constants:
✅ symbol.constants.ts // Will contain multiple symbols
✅ api.constants.ts // Multiple API-related constants
✅ error.constants.ts // Multiple error constants
❌ symbol.constant.ts // Avoid singularTIP
Remember the distinction:
- Enums = Type definition (singular) - "What kind of value is this?"
- Const objects = Collection/namespace (plural) - "Get a value from this collection"
Examples by Context
Domain Layer
optimization.aggregate.ts
coding.entity.ts
citation.value-object.ts
optimization.events.tsApplication Layer
evaluate-optimization.use-case.ts
evaluate-optimization.use-case.module.ts
optimization.repository.tsInfrastructure Layer
prisma-optimization.repository.ts
optimization.mapper.ts
evaluate-optimization.dto.ts
optimization.controller.tsFrontend
medical-stay-card.tsx // Component (singular entity)
medical-stays-page.tsx // Page showing list (plural)
use-optimization.ts // Hook
optimization.service.ts // ServiceQuick Reference
| Type | Convention | Example |
|---|---|---|
| Class | PascalCase | UserProfile |
| Type/Interface | PascalCase | ApiResponse |
| Function | camelCase | fetchUserData |
| Variable | camelCase | maxRetries |
| File | kebab-case + suffix | user-profile.service.ts |
| Folder | kebab-case (singular) | medical-stay/ |
| Collection Folder | kebab-case (plural) | components/ |
| REST Route | plural | /users |