mirror of
https://github.com/Infisical/infisical.git
synced 2026-05-02 03:02:03 -04:00
82 lines
2.9 KiB
Plaintext
82 lines
2.9 KiB
Plaintext
---
|
|
title: 'Backend folder structure'
|
|
---
|
|
|
|
```
|
|
├── scripts
|
|
├── e2e-test
|
|
└── src/
|
|
├── @types/
|
|
│ ├── knex.d.ts
|
|
│ └── fastify.d.ts
|
|
├── db/
|
|
│ ├── migrations
|
|
│ ├── schemas
|
|
│ └── seed
|
|
├── lib/
|
|
│ ├── fn
|
|
│ ├── date
|
|
│ └── config
|
|
├── queue
|
|
├── server/
|
|
│ ├── routes/
|
|
│ │ ├── v1
|
|
│ │ └── v2
|
|
│ ├── plugins
|
|
│ └── config
|
|
├── services/
|
|
│ ├── auth
|
|
│ ├── org
|
|
│ └── project/
|
|
│ ├── project-service.ts
|
|
│ ├── project-types.ts
|
|
│ └── project-dal.ts
|
|
└── ee/
|
|
├── routes
|
|
└── services
|
|
```
|
|
|
|
### `backend/scripts`
|
|
Contains reusable scripts for backend automation, like running migrations and generating SQL schemas.
|
|
|
|
### `backend/e2e-test`
|
|
Integration tests for the APIs.
|
|
|
|
### `backend/src`
|
|
The source code of the backend.
|
|
|
|
- `@types`: Type definitions for libraries like Fastify and Knex.
|
|
- `db`: Knex.js configuration for the database, including migration, seed files, and SQL type schemas.
|
|
- `lib`: Stateless, reusable functions used across the codebase.
|
|
- `queue`: Infisical's queue system based on BullMQ.
|
|
|
|
### `src/server`
|
|
|
|
- Scope anything related to Fastify/service here.
|
|
- Includes routes, Fastify plugins, and server configurations.
|
|
- The routes folder contains various versions of routes separated into v1, v2, etc.
|
|
|
|
### `src/services`
|
|
|
|
- Handles the core business logic for all operations.
|
|
- Follows the co-location principle: related components should be kept together.
|
|
- Each service component typically contains:
|
|
|
|
1. **dal**: Database Access Layer functions for database operations
|
|
2. **service**: The service layer containing business logic.
|
|
3. **type**: Type definitions used within the service component.
|
|
4. **fns**: An optional component for sharing reusable functions related to the service.
|
|
5. **queue**: An optional component for queue-specific logic, like `secret-queue.ts`.
|
|
|
|
### `src/ee`
|
|
|
|
Follows the same pattern as above, with the exception of a license change from MIT to Infisical Proprietary License.
|
|
|
|
### Guidelines and Best Practices
|
|
|
|
- All services are interconnected at `/src/server/routes/index.ts`, following the principle of simple dependency injection.
|
|
- Files should be named in dash-case.
|
|
- Avoid using classes in the codebase; opt for simple functions instead.
|
|
- All committed code must be properly linted using `npm run lint:fix` and type-checked with `npm run type:check`.
|
|
- Minimize shared logic between services as much as possible.
|
|
- Controllers within a router component should ideally call only one service layer, with exceptions for services like `audit-log` that require access to request object data. |