@venizia/ignis-docs 0.0.3 → 0.0.4-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +4 -2
- package/wiki/best-practices/api-usage-examples.md +591 -0
- package/wiki/best-practices/architectural-patterns.md +415 -0
- package/wiki/best-practices/architecture-decisions.md +488 -0
- package/wiki/{get-started/best-practices → best-practices}/code-style-standards.md +406 -17
- package/wiki/{get-started/best-practices → best-practices}/common-pitfalls.md +109 -4
- package/wiki/{get-started/best-practices → best-practices}/contribution-workflow.md +34 -7
- package/wiki/best-practices/data-modeling.md +376 -0
- package/wiki/best-practices/deployment-strategies.md +698 -0
- package/wiki/best-practices/index.md +27 -0
- package/wiki/best-practices/performance-optimization.md +196 -0
- package/wiki/best-practices/security-guidelines.md +218 -0
- package/wiki/{get-started/best-practices → best-practices}/troubleshooting-tips.md +97 -1
- package/wiki/changelogs/2025-12-16-initial-architecture.md +1 -1
- package/wiki/changelogs/2025-12-16-model-repo-datasource-refactor.md +1 -1
- package/wiki/changelogs/2025-12-17-refactor.md +1 -1
- package/wiki/changelogs/2025-12-18-performance-optimizations.md +5 -5
- package/wiki/changelogs/2025-12-18-repository-validation-security.md +13 -7
- package/wiki/changelogs/2025-12-26-nested-relations-and-generics.md +2 -2
- package/wiki/changelogs/2025-12-29-dynamic-binding-registration.md +104 -0
- package/wiki/changelogs/2025-12-29-snowflake-uid-helper.md +100 -0
- package/wiki/changelogs/2025-12-30-repository-enhancements.md +214 -0
- package/wiki/changelogs/2025-12-31-json-path-filtering-array-operators.md +214 -0
- package/wiki/changelogs/2025-12-31-string-id-custom-generator.md +137 -0
- package/wiki/changelogs/2026-01-02-default-filter-and-repository-mixins.md +418 -0
- package/wiki/changelogs/index.md +6 -0
- package/wiki/changelogs/planned-schema-migrator.md +0 -8
- package/wiki/{get-started/core-concepts → guides/core-concepts/application}/bootstrapping.md +18 -5
- package/wiki/{get-started/core-concepts/application.md → guides/core-concepts/application/index.md} +47 -104
- package/wiki/guides/core-concepts/components-guide.md +509 -0
- package/wiki/{get-started → guides}/core-concepts/components.md +24 -17
- package/wiki/{get-started → guides}/core-concepts/controllers.md +30 -13
- package/wiki/{get-started → guides}/core-concepts/dependency-injection.md +97 -0
- package/wiki/guides/core-concepts/persistent/datasources.md +179 -0
- package/wiki/guides/core-concepts/persistent/index.md +119 -0
- package/wiki/guides/core-concepts/persistent/models.md +241 -0
- package/wiki/guides/core-concepts/persistent/repositories.md +219 -0
- package/wiki/guides/core-concepts/persistent/transactions.md +170 -0
- package/wiki/{get-started → guides}/core-concepts/services.md +26 -3
- package/wiki/{get-started → guides/get-started}/5-minute-quickstart.md +59 -14
- package/wiki/guides/get-started/philosophy.md +682 -0
- package/wiki/guides/get-started/setup.md +157 -0
- package/wiki/guides/index.md +89 -0
- package/wiki/guides/reference/glossary.md +243 -0
- package/wiki/{get-started → guides/reference}/mcp-docs-server.md +0 -10
- package/wiki/{get-started → guides/tutorials}/building-a-crud-api.md +134 -132
- package/wiki/{get-started/quickstart.md → guides/tutorials/complete-installation.md} +107 -71
- package/wiki/guides/tutorials/ecommerce-api.md +1399 -0
- package/wiki/guides/tutorials/realtime-chat.md +1261 -0
- package/wiki/guides/tutorials/testing.md +723 -0
- package/wiki/index.md +176 -37
- package/wiki/references/base/application.md +27 -0
- package/wiki/references/base/bootstrapping.md +30 -26
- package/wiki/references/base/components.md +24 -7
- package/wiki/references/base/controllers.md +51 -20
- package/wiki/references/base/datasources.md +30 -0
- package/wiki/references/base/dependency-injection.md +39 -3
- package/wiki/references/base/filter-system/application-usage.md +224 -0
- package/wiki/references/base/filter-system/array-operators.md +132 -0
- package/wiki/references/base/filter-system/comparison-operators.md +109 -0
- package/wiki/references/base/filter-system/default-filter.md +428 -0
- package/wiki/references/base/filter-system/fields-order-pagination.md +155 -0
- package/wiki/references/base/filter-system/index.md +127 -0
- package/wiki/references/base/filter-system/json-filtering.md +197 -0
- package/wiki/references/base/filter-system/list-operators.md +71 -0
- package/wiki/references/base/filter-system/logical-operators.md +156 -0
- package/wiki/references/base/filter-system/null-operators.md +58 -0
- package/wiki/references/base/filter-system/pattern-matching.md +108 -0
- package/wiki/references/base/filter-system/quick-reference.md +431 -0
- package/wiki/references/base/filter-system/range-operators.md +63 -0
- package/wiki/references/base/filter-system/tips.md +190 -0
- package/wiki/references/base/filter-system/use-cases.md +452 -0
- package/wiki/references/base/index.md +90 -0
- package/wiki/references/base/middlewares.md +602 -0
- package/wiki/references/base/models.md +215 -23
- package/wiki/references/base/providers.md +732 -0
- package/wiki/references/base/repositories/advanced.md +555 -0
- package/wiki/references/base/repositories/index.md +228 -0
- package/wiki/references/base/repositories/mixins.md +331 -0
- package/wiki/references/base/repositories/relations.md +486 -0
- package/wiki/references/base/repositories.md +40 -635
- package/wiki/references/base/services.md +28 -4
- package/wiki/references/components/authentication.md +22 -2
- package/wiki/references/components/health-check.md +12 -0
- package/wiki/references/components/index.md +23 -0
- package/wiki/references/components/mail.md +687 -0
- package/wiki/references/components/request-tracker.md +16 -0
- package/wiki/references/components/socket-io.md +18 -0
- package/wiki/references/components/static-asset.md +14 -26
- package/wiki/references/components/swagger.md +17 -0
- package/wiki/references/configuration/environment-variables.md +427 -0
- package/wiki/references/configuration/index.md +73 -0
- package/wiki/references/helpers/cron.md +14 -0
- package/wiki/references/helpers/crypto.md +15 -0
- package/wiki/references/helpers/env.md +16 -0
- package/wiki/references/helpers/error.md +17 -0
- package/wiki/references/helpers/index.md +14 -0
- package/wiki/references/helpers/inversion.md +24 -4
- package/wiki/references/helpers/logger.md +19 -0
- package/wiki/references/helpers/network.md +11 -0
- package/wiki/references/helpers/queue.md +19 -0
- package/wiki/references/helpers/redis.md +21 -0
- package/wiki/references/helpers/socket-io.md +24 -5
- package/wiki/references/helpers/storage.md +18 -10
- package/wiki/references/helpers/testing.md +18 -0
- package/wiki/references/helpers/types.md +16 -0
- package/wiki/references/helpers/uid.md +167 -0
- package/wiki/references/helpers/worker-thread.md +16 -0
- package/wiki/references/index.md +177 -0
- package/wiki/references/quick-reference.md +634 -0
- package/wiki/references/src-details/boot.md +3 -3
- package/wiki/references/src-details/dev-configs.md +0 -4
- package/wiki/references/src-details/docs.md +2 -2
- package/wiki/references/src-details/index.md +86 -0
- package/wiki/references/src-details/inversion.md +1 -6
- package/wiki/references/src-details/mcp-server.md +3 -15
- package/wiki/references/utilities/index.md +86 -10
- package/wiki/references/utilities/jsx.md +577 -0
- package/wiki/references/utilities/request.md +0 -2
- package/wiki/references/utilities/statuses.md +740 -0
- package/wiki/get-started/best-practices/api-usage-examples.md +0 -266
- package/wiki/get-started/best-practices/architectural-patterns.md +0 -170
- package/wiki/get-started/best-practices/data-modeling.md +0 -177
- package/wiki/get-started/best-practices/deployment-strategies.md +0 -121
- package/wiki/get-started/best-practices/performance-optimization.md +0 -97
- package/wiki/get-started/best-practices/security-guidelines.md +0 -99
- package/wiki/get-started/core-concepts/persistent.md +0 -539
- package/wiki/get-started/index.md +0 -65
- package/wiki/get-started/philosophy.md +0 -296
- package/wiki/get-started/prerequisites.md +0 -113
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Setup
|
|
2
|
+
|
|
3
|
+
Everything you need to start building with Ignis. This guide covers installation for macOS, Linux, and Windows (via WSL2).
|
|
4
|
+
|
|
5
|
+
## Requirements
|
|
6
|
+
|
|
7
|
+
| Tool | Version | Required | Notes |
|
|
8
|
+
|------|---------|----------|-------|
|
|
9
|
+
| **Bun** | >= 1.3 | Yes | Primary runtime, fastest performance |
|
|
10
|
+
| **Node.js** | >= 18 | Alternative | Use if Bun isn't available |
|
|
11
|
+
| **PostgreSQL** | >= 14 | Yes | Primary database |
|
|
12
|
+
| **VS Code** | Latest | Recommended | Best IDE experience with extensions |
|
|
13
|
+
|
|
14
|
+
## Install Runtime
|
|
15
|
+
|
|
16
|
+
### Bun (Recommended)
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# macOS / Linux
|
|
20
|
+
curl -fsSL https://bun.sh/install | bash
|
|
21
|
+
|
|
22
|
+
# Windows (use WSL2)
|
|
23
|
+
# First install WSL2: wsl --install
|
|
24
|
+
# Then run the curl command above in WSL
|
|
25
|
+
|
|
26
|
+
# Verify
|
|
27
|
+
bun --version # Should be 1.3+
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Node.js (Alternative)
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# macOS (Homebrew)
|
|
34
|
+
brew install node@18
|
|
35
|
+
|
|
36
|
+
# Ubuntu/Debian
|
|
37
|
+
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
|
38
|
+
sudo apt-get install -y nodejs
|
|
39
|
+
|
|
40
|
+
# Windows
|
|
41
|
+
# Download from https://nodejs.org/
|
|
42
|
+
|
|
43
|
+
# Verify
|
|
44
|
+
node --version # Should be 18+
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Install PostgreSQL
|
|
48
|
+
|
|
49
|
+
### macOS
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
brew install postgresql@14
|
|
53
|
+
brew services start postgresql@14
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Ubuntu/Debian
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
sudo apt-get update
|
|
60
|
+
sudo apt-get install postgresql-14
|
|
61
|
+
sudo service postgresql start
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Windows
|
|
65
|
+
|
|
66
|
+
Download from [postgresql.org/download/windows](https://www.postgresql.org/download/windows/) or use WSL2.
|
|
67
|
+
|
|
68
|
+
### Create Database
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# macOS
|
|
72
|
+
psql postgres -c "CREATE DATABASE my_app_db;"
|
|
73
|
+
|
|
74
|
+
# Linux (Ubuntu/Debian)
|
|
75
|
+
sudo -u postgres psql -c "CREATE DATABASE my_app_db;"
|
|
76
|
+
|
|
77
|
+
# Verify
|
|
78
|
+
psql my_app_db -c "SELECT 1;" # Should return 1
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## VS Code Setup (Recommended)
|
|
82
|
+
|
|
83
|
+
### Extensions
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Essential
|
|
87
|
+
code --install-extension dbaeumer.vscode-eslint
|
|
88
|
+
code --install-extension esbenp.prettier-vscode
|
|
89
|
+
|
|
90
|
+
# Recommended
|
|
91
|
+
code --install-extension usernamehw.errorlens
|
|
92
|
+
code --install-extension humao.rest-client
|
|
93
|
+
code --install-extension prisma.prisma # Works with Drizzle too
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Settings
|
|
97
|
+
|
|
98
|
+
Create `.vscode/settings.json`:
|
|
99
|
+
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"editor.formatOnSave": true,
|
|
103
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
104
|
+
"editor.codeActionsOnSave": {
|
|
105
|
+
"source.fixAll.eslint": "explicit"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Verify Setup
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
bun --version # >= 1.3 (or node --version >= 18)
|
|
114
|
+
psql --version # >= 14
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Troubleshooting
|
|
118
|
+
|
|
119
|
+
### Bun not found after install
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Add to ~/.bashrc or ~/.zshrc
|
|
123
|
+
export BUN_INSTALL="$HOME/.bun"
|
|
124
|
+
export PATH="$BUN_INSTALL/bin:$PATH"
|
|
125
|
+
|
|
126
|
+
# Then reload
|
|
127
|
+
source ~/.bashrc # or ~/.zshrc
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### PostgreSQL permission denied
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Linux: Use sudo -u postgres
|
|
134
|
+
sudo -u postgres psql -c "CREATE DATABASE my_app_db;"
|
|
135
|
+
|
|
136
|
+
# macOS: Check if PostgreSQL is running
|
|
137
|
+
brew services list | grep postgresql
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### PostgreSQL connection refused
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
# Check if running
|
|
144
|
+
pg_isready
|
|
145
|
+
|
|
146
|
+
# Start service
|
|
147
|
+
# macOS
|
|
148
|
+
brew services start postgresql@14
|
|
149
|
+
|
|
150
|
+
# Linux
|
|
151
|
+
sudo service postgresql start
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Next Steps
|
|
155
|
+
|
|
156
|
+
- [5-Minute Quickstart](./5-minute-quickstart.md) — Build your first API
|
|
157
|
+
- [Complete Installation](../tutorials/complete-installation.md) — Full project setup
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Getting Started with Ignis
|
|
2
|
+
|
|
3
|
+
Welcome to Ignis — a TypeScript framework that combines enterprise architecture patterns with Hono's blazing performance. Whether you're building a SaaS backend, REST API, or microservice, these guides will take you from installation to production-ready code with type-safe database operations, auto-generated OpenAPI docs, and clean dependency injection.
|
|
4
|
+
|
|
5
|
+
<div class="guide-cards">
|
|
6
|
+
|
|
7
|
+
<a href="./get-started/setup" class="guide-card">
|
|
8
|
+
<span class="guide-icon">🛠️</span>
|
|
9
|
+
<h3>Setup</h3>
|
|
10
|
+
<p>Install Bun, PostgreSQL, and configure your IDE</p>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<a href="./get-started/5-minute-quickstart" class="guide-card highlight">
|
|
14
|
+
<span class="guide-icon">⚡</span>
|
|
15
|
+
<h3>5-Min Quickstart</h3>
|
|
16
|
+
<p>Your first endpoint in 5 minutes</p>
|
|
17
|
+
</a>
|
|
18
|
+
|
|
19
|
+
<a href="./tutorials/complete-installation" class="guide-card">
|
|
20
|
+
<span class="guide-icon">📦</span>
|
|
21
|
+
<h3>Full Installation</h3>
|
|
22
|
+
<p>Production-ready project setup</p>
|
|
23
|
+
</a>
|
|
24
|
+
|
|
25
|
+
<a href="./tutorials/building-a-crud-api" class="guide-card">
|
|
26
|
+
<span class="guide-icon">🗄️</span>
|
|
27
|
+
<h3>Build a CRUD API</h3>
|
|
28
|
+
<p>Complete Todo API with database</p>
|
|
29
|
+
</a>
|
|
30
|
+
|
|
31
|
+
<a href="./tutorials/testing" class="guide-card">
|
|
32
|
+
<span class="guide-icon">🧪</span>
|
|
33
|
+
<h3>Testing</h3>
|
|
34
|
+
<p>Write tests for your application</p>
|
|
35
|
+
</a>
|
|
36
|
+
|
|
37
|
+
<a href="./get-started/philosophy" class="guide-card">
|
|
38
|
+
<span class="guide-icon">💡</span>
|
|
39
|
+
<h3>Philosophy</h3>
|
|
40
|
+
<p>Why Ignis? Design decisions explained</p>
|
|
41
|
+
</a>
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
## Learning Roadmap
|
|
46
|
+
|
|
47
|
+
<div class="roadmap">
|
|
48
|
+
|
|
49
|
+
<div class="roadmap-stage">
|
|
50
|
+
<div class="stage-header">
|
|
51
|
+
<span class="stage-num">1</span>
|
|
52
|
+
<h4>First Steps</h4>
|
|
53
|
+
</div>
|
|
54
|
+
<p><a href="./get-started/setup">Setup</a> → <a href="./get-started/5-minute-quickstart">5-Min Quickstart</a></p>
|
|
55
|
+
<span class="stage-desc">Get your environment ready and build your first endpoint</span>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div class="roadmap-stage">
|
|
59
|
+
<div class="stage-header">
|
|
60
|
+
<span class="stage-num">2</span>
|
|
61
|
+
<h4>Build Something Real</h4>
|
|
62
|
+
</div>
|
|
63
|
+
<p><a href="./tutorials/complete-installation">Full Installation</a> → <a href="./tutorials/building-a-crud-api">CRUD API</a> → <a href="./tutorials/testing">Testing</a></p>
|
|
64
|
+
<span class="stage-desc">Create a complete API with database, validation, and tests</span>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="roadmap-stage">
|
|
68
|
+
<div class="stage-header">
|
|
69
|
+
<span class="stage-num">3</span>
|
|
70
|
+
<h4>Understand the Framework</h4>
|
|
71
|
+
</div>
|
|
72
|
+
<p><a href="./core-concepts/application">Application</a> → <a href="./core-concepts/controllers">Controllers</a> → <a href="./core-concepts/services">Services</a> → <a href="./core-concepts/dependency-injection">DI</a></p>
|
|
73
|
+
<span class="stage-desc">Deep dive into core concepts and architecture patterns</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="roadmap-stage">
|
|
77
|
+
<div class="stage-header">
|
|
78
|
+
<span class="stage-num">4</span>
|
|
79
|
+
<h4>Go to Production</h4>
|
|
80
|
+
</div>
|
|
81
|
+
<p><a href="/best-practices/">Best Practices</a> → <a href="/references/">API Reference</a></p>
|
|
82
|
+
<span class="stage-desc">Learn patterns, security, performance, and deployment</span>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
</div>
|
|
86
|
+
|
|
87
|
+
::: tip New to backend development?
|
|
88
|
+
Check out our [Glossary](./reference/glossary) for explanations of key terms like Controllers, Repositories, and Dependency Injection.
|
|
89
|
+
:::
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# Glossary for Beginners
|
|
2
|
+
|
|
3
|
+
Quick reference for key terms in Ignis documentation.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Core Framework Terms
|
|
7
|
+
|
|
8
|
+
| Term | Description |
|
|
9
|
+
|------|-------------|
|
|
10
|
+
| **Application** | Main entry point extending `BaseApplication`. Registers all components. |
|
|
11
|
+
| **Controller** | Handles HTTP requests, defines API endpoints (`@controller`, `@get`, `@post`) |
|
|
12
|
+
| **Service** | Contains business logic between controllers and repositories |
|
|
13
|
+
| **Repository** | Database operations for one entity (`find`, `create`, `updateById`, etc.) |
|
|
14
|
+
| **DataSource** | Database connection configuration (host, port, credentials) |
|
|
15
|
+
| **Model/Entity** | Defines data structure and relationships using Drizzle schema |
|
|
16
|
+
| **Component** | Reusable plugin that bundles related functionality |
|
|
17
|
+
| **DI Container** | Central registry that stores and resolves dependencies. The `Application` class acts as the container. |
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
// Application registers everything
|
|
21
|
+
export class Application extends BaseApplication {
|
|
22
|
+
preConfigure() {
|
|
23
|
+
this.dataSource(PostgresDataSource);
|
|
24
|
+
this.repository(TodoRepository);
|
|
25
|
+
this.controller(TodoController);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Controller handles HTTP
|
|
30
|
+
const TodoRoutes = {
|
|
31
|
+
GET_ALL: {
|
|
32
|
+
method: HTTP.Methods.GET,
|
|
33
|
+
path: '/',
|
|
34
|
+
responses: jsonResponse({ schema: z.array(z.object({ id: z.string() })) }),
|
|
35
|
+
},
|
|
36
|
+
} as const;
|
|
37
|
+
|
|
38
|
+
@controller({ path: '/todos' })
|
|
39
|
+
export class TodoController extends BaseController {
|
|
40
|
+
@get({ configs: TodoRoutes.GET_ALL })
|
|
41
|
+
async getAll(c: TRouteContext<typeof TodoRoutes.GET_ALL>) {
|
|
42
|
+
const todos = await this.repository.find({});
|
|
43
|
+
return c.json(todos, HTTP.ResultCodes.RS_2.Ok);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Repository handles database
|
|
48
|
+
@repository({ model: Todo, dataSource: PostgresDataSource })
|
|
49
|
+
export class TodoRepository extends DefaultCRUDRepository<typeof Todo.schema> {}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Related:** [Application](../core-concepts/application/) | [Controllers](../core-concepts/controllers) | [Services](../core-concepts/services) | [Repositories](../../references/base/repositories/)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## TypeScript & Pattern Terms
|
|
56
|
+
|
|
57
|
+
### Decorators
|
|
58
|
+
Annotations starting with `@` that add behavior to classes/methods.
|
|
59
|
+
|
|
60
|
+
| Decorator | Purpose |
|
|
61
|
+
|-----------|---------|
|
|
62
|
+
| `@controller` | Marks class as controller |
|
|
63
|
+
| `@model` | Marks class as model/entity |
|
|
64
|
+
| `@repository` | Marks class as repository |
|
|
65
|
+
| `@datasource` | Marks class as datasource |
|
|
66
|
+
| `@inject` | Requests dependency from container |
|
|
67
|
+
| `@get`, `@post`, `@patch`, `@delete` | HTTP route handlers |
|
|
68
|
+
|
|
69
|
+
### Dependency Injection (DI)
|
|
70
|
+
Classes receive dependencies from an external container instead of creating them internally. Benefits: testable, flexible, maintainable.
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// ❌ Without DI - creates own dependencies
|
|
74
|
+
class TodoController {
|
|
75
|
+
private repository = new TodoRepository(new PostgresDataSource());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// ✅ With DI - receives from container
|
|
79
|
+
class TodoController {
|
|
80
|
+
constructor(
|
|
81
|
+
@inject({ key: 'repositories.TodoRepository' })
|
|
82
|
+
private repository: TodoRepository
|
|
83
|
+
) {}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Container & Binding
|
|
88
|
+
Container stores all dependencies. Binding registers classes/values under keys.
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
// Register in Application
|
|
92
|
+
this.repository(TodoRepository); // Key: 'repositories.TodoRepository'
|
|
93
|
+
this.bind({ key: 'config.apiKey' }).toValue('sk_live_xxx');
|
|
94
|
+
|
|
95
|
+
// Resolve via @inject
|
|
96
|
+
@inject({ key: 'repositories.TodoRepository' }) private repository: TodoRepository;
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Generic Types
|
|
100
|
+
TypeScript feature for reusable components: `<T>` or `<SomeType>`.
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
class DefaultCRUDRepository<TSchema> { find(): TSchema[] { ... } }
|
|
104
|
+
class TodoRepository extends DefaultCRUDRepository<typeof Todo.schema> {}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Related:** [Dependency Injection Guide](../core-concepts/dependency-injection)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## Database Terms
|
|
111
|
+
|
|
112
|
+
| Term | Description |
|
|
113
|
+
|------|-------------|
|
|
114
|
+
| **ORM** | Tool to work with databases using code instead of raw SQL. Ignis uses Drizzle ORM. |
|
|
115
|
+
| **Drizzle ORM** | Type-safe ORM library. [Docs](https://orm.drizzle.team/) |
|
|
116
|
+
| **Schema** | Table structure definition using Drizzle syntax |
|
|
117
|
+
| **Migration** | Script that creates/modifies tables. Version control for database structure. |
|
|
118
|
+
| **Connector** | Database driver that executes queries (via `dataSource.connector`) |
|
|
119
|
+
| **Relations** | Connections between tables (hasMany, belongsTo, hasOne) |
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// Schema definition
|
|
123
|
+
export const todoTable = pgTable('Todo', {
|
|
124
|
+
id: text('id').primaryKey(),
|
|
125
|
+
title: text('title').notNull(),
|
|
126
|
+
completed: boolean('completed').default(false),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Relations
|
|
130
|
+
export const userRelations = createRelations({
|
|
131
|
+
source: userTable,
|
|
132
|
+
relations: [{ type: 'hasMany', model: () => Post, foreignKey: 'authorId' }],
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// Query with relations
|
|
136
|
+
await userRepo.find({ filter: { include: [{ relation: 'posts' }] } });
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
# Migrations
|
|
141
|
+
bun run drizzle-kit generate # Generate from schema changes
|
|
142
|
+
bun run migrate:dev # Apply to database
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
## Query & Filter Terms
|
|
147
|
+
|
|
148
|
+
### Filter Object
|
|
149
|
+
Specifies what data to retrieve: `where`, `limit`, `order`, `include`.
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
await repository.find({
|
|
153
|
+
filter: {
|
|
154
|
+
where: { status: 'active', age: { gte: 18 } },
|
|
155
|
+
order: ['createdAt DESC'],
|
|
156
|
+
limit: 10,
|
|
157
|
+
include: [{ relation: 'author' }],
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Operators
|
|
163
|
+
|
|
164
|
+
| Operator | Meaning | Example |
|
|
165
|
+
|----------|---------|---------|
|
|
166
|
+
| `eq` | Equal | `{ status: { eq: 'active' } }` |
|
|
167
|
+
| `ne` | Not equal | `{ status: { ne: 'deleted' } }` |
|
|
168
|
+
| `gt`, `gte` | Greater than (or equal) | `{ age: { gte: 18 } }` |
|
|
169
|
+
| `lt`, `lte` | Less than (or equal) | `{ price: { lt: 100 } }` |
|
|
170
|
+
| `like`, `ilike` | Pattern match | `{ name: { like: '%john%' } }` |
|
|
171
|
+
| `in`, `nin` | In list / not in list | `{ id: { in: [1, 2, 3] } }` |
|
|
172
|
+
| `between` | Range | `{ age: { between: [18, 65] } }` |
|
|
173
|
+
|
|
174
|
+
**Related:** [Filter System](../../references/base/filter-system/) | [Repositories](../../references/base/repositories/)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
## HTTP & API Terms
|
|
178
|
+
|
|
179
|
+
### REST API Methods
|
|
180
|
+
|
|
181
|
+
| Method | URL | Action |
|
|
182
|
+
|--------|-----|--------|
|
|
183
|
+
| GET | `/todos` | List all |
|
|
184
|
+
| GET | `/todos/:id` | Get one |
|
|
185
|
+
| POST | `/todos` | Create |
|
|
186
|
+
| PATCH | `/todos/:id` | Update |
|
|
187
|
+
| DELETE | `/todos/:id` | Delete |
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
const TodoRoutes = {
|
|
191
|
+
GET_ALL: { method: HTTP.Methods.GET, path: '/', responses: jsonResponse({ schema: z.array(z.any()) }) },
|
|
192
|
+
GET_BY_ID: { method: HTTP.Methods.GET, path: '/:id', request: { params: z.object({ id: z.string() }) }, responses: jsonResponse({ schema: z.any() }) },
|
|
193
|
+
CREATE: { method: HTTP.Methods.POST, path: '/', request: { body: jsonContent({ schema: z.any() }) }, responses: jsonResponse({ schema: z.any() }) },
|
|
194
|
+
} as const;
|
|
195
|
+
|
|
196
|
+
@controller({ path: '/todos' })
|
|
197
|
+
class TodoController {
|
|
198
|
+
@get({ configs: TodoRoutes.GET_ALL })
|
|
199
|
+
async getAll(c: TRouteContext<typeof TodoRoutes.GET_ALL>) { ... }
|
|
200
|
+
|
|
201
|
+
@get({ configs: TodoRoutes.GET_BY_ID })
|
|
202
|
+
async getById(c: TRouteContext<typeof TodoRoutes.GET_BY_ID>) {
|
|
203
|
+
const { id } = c.req.valid('param');
|
|
204
|
+
...
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
@post({ configs: TodoRoutes.CREATE })
|
|
208
|
+
async create(c: TRouteContext<typeof TodoRoutes.CREATE>) {
|
|
209
|
+
const data = c.req.valid('json');
|
|
210
|
+
...
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
| Term | Description |
|
|
216
|
+
|------|-------------|
|
|
217
|
+
| **Endpoint** | URL path that API responds to (e.g., `GET /todos`) |
|
|
218
|
+
| **Route Parameter** | Variable in URL marked with `:` (e.g., `:id`) |
|
|
219
|
+
| **Request Body** | JSON data sent with POST/PATCH requests |
|
|
220
|
+
| **OpenAPI/Swagger** | Auto-generated API docs at `/docs` |
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
## Environment & Configuration
|
|
224
|
+
|
|
225
|
+
Environment variables store configuration outside code (in `.env` files). Ignis uses `APP_ENV_` prefix to avoid system conflicts.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# .env file
|
|
229
|
+
APP_ENV_POSTGRES_HOST=localhost
|
|
230
|
+
APP_ENV_POSTGRES_PASSWORD=secret123
|
|
231
|
+
APP_ENV_SERVER_PORT=3000
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
```typescript
|
|
235
|
+
const host = process.env.APP_ENV_POSTGRES_HOST;
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Related:** [Environment Variables Reference](../../references/configuration/environment-variables)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
## See Also
|
|
242
|
+
|
|
243
|
+
[5-Minute Quickstart](../get-started/5-minute-quickstart) | [Building a CRUD API](../tutorials/building-a-crud-api) | [Repositories](../../references/base/repositories/)
|
|
@@ -594,7 +594,6 @@ AI: [Uses listCategories, then listDocs with category filter]
|
|
|
594
594
|
AI: "The Helpers category contains: Redis, Logger, Queue..."
|
|
595
595
|
```
|
|
596
596
|
|
|
597
|
-
---
|
|
598
597
|
|
|
599
598
|
## Local Development Setup
|
|
600
599
|
|
|
@@ -649,7 +648,6 @@ Use absolute paths in your config:
|
|
|
649
648
|
}
|
|
650
649
|
```
|
|
651
650
|
|
|
652
|
-
---
|
|
653
651
|
|
|
654
652
|
## Comprehensive Troubleshooting Guide
|
|
655
653
|
|
|
@@ -678,7 +676,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
|
|
|
678
676
|
- Ask: `Can you search the Ignis docs for "controller"?`
|
|
679
677
|
- Look for: `[Using tool: searchDocs]`
|
|
680
678
|
|
|
681
|
-
---
|
|
682
679
|
|
|
683
680
|
### Common Issues and Solutions
|
|
684
681
|
|
|
@@ -725,7 +722,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
|
|
|
725
722
|
npm install -g @venizia/ignis-docs
|
|
726
723
|
```
|
|
727
724
|
|
|
728
|
-
---
|
|
729
725
|
|
|
730
726
|
#### ❌ Issue #2: AI assistant doesn't use MCP tools
|
|
731
727
|
|
|
@@ -784,7 +780,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
|
|
|
784
780
|
# Should NOT error. Press Ctrl+C to stop.
|
|
785
781
|
```
|
|
786
782
|
|
|
787
|
-
---
|
|
788
783
|
|
|
789
784
|
#### ❌ Issue #3: "Module not found" errors
|
|
790
785
|
|
|
@@ -818,7 +813,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
|
|
|
818
813
|
bun x -p @venizia/ignis-docs@latest ignis-docs-mcp
|
|
819
814
|
```
|
|
820
815
|
|
|
821
|
-
---
|
|
822
816
|
|
|
823
817
|
#### ❌ Issue #4: First search takes 10+ seconds
|
|
824
818
|
|
|
@@ -831,7 +825,6 @@ cat ~/.config/claude-code/config.json | python -m json.tool
|
|
|
831
825
|
|
|
832
826
|
**Not an error - just one-time startup cost.**
|
|
833
827
|
|
|
834
|
-
---
|
|
835
828
|
|
|
836
829
|
#### ❌ Issue #5: Config file doesn't exist
|
|
837
830
|
|
|
@@ -854,7 +847,6 @@ cat > ~/.config/claude-code/config.json <<'EOF'
|
|
|
854
847
|
EOF
|
|
855
848
|
```
|
|
856
849
|
|
|
857
|
-
---
|
|
858
850
|
|
|
859
851
|
### 🐛 Advanced Troubleshooting
|
|
860
852
|
|
|
@@ -894,7 +886,6 @@ If this works, the issue is specific to `@venizia/ignis-docs`.
|
|
|
894
886
|
- Error messages
|
|
895
887
|
- Your config file (remove secrets)
|
|
896
888
|
|
|
897
|
-
---
|
|
898
889
|
|
|
899
890
|
## What's Next?
|
|
900
891
|
|
|
@@ -902,7 +893,6 @@ If this works, the issue is specific to `@venizia/ignis-docs`.
|
|
|
902
893
|
- **Advanced Usage:** Explore how to chain tools for complex documentation queries
|
|
903
894
|
- **Contribute:** Help improve the docs or add new features
|
|
904
895
|
|
|
905
|
-
---
|
|
906
896
|
|
|
907
897
|
## FAQ
|
|
908
898
|
|