Skip to content

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:

typescript
class UserProfile {}
type RequestConfig = {};
interface ApiResponse {}

Constants and Functions

Use camelCase for constants, functions, and variables:

typescript
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.ts

Common 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:

typescript
✅ medical-stays-page.tsx
getMedicalStays()
✅ instance-definitions-page.tsx

3. REST API Routes

Follow REST conventions for route naming:

✅ /users
✅ /products
✅ /orders

TIP

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):

typescript
// ✅ 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:

typescript
// ✅ 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 singular

TIP

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.ts

Application Layer

evaluate-optimization.use-case.ts
evaluate-optimization.use-case.module.ts
optimization.repository.ts

Infrastructure Layer

prisma-optimization.repository.ts
optimization.mapper.ts
evaluate-optimization.dto.ts
optimization.controller.ts

Frontend

medical-stay-card.tsx           // Component (singular entity)
medical-stays-page.tsx          // Page showing list (plural)
use-optimization.ts             // Hook
optimization.service.ts         // Service

Quick Reference

TypeConventionExample
ClassPascalCaseUserProfile
Type/InterfacePascalCaseApiResponse
FunctioncamelCasefetchUserData
VariablecamelCasemaxRetries
Filekebab-case + suffixuser-profile.service.ts
Folderkebab-case (singular)medical-stay/
Collection Folderkebab-case (plural)components/
REST Routeplural/users