@venizia/ignis-docs 0.0.2 → 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 +647 -182
- 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 +86 -0
- package/wiki/changelogs/2025-12-26-transaction-support.md +57 -0
- 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 +8 -1
- package/wiki/changelogs/planned-schema-migrator.md +2 -10
- 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/guides/core-concepts/components.md +122 -0
- 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 +532 -31
- package/wiki/references/base/controllers.md +136 -38
- package/wiki/references/base/datasources.md +108 -5
- 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 -549
- 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 +15 -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 +167 -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/changelogs/planned-transaction-support.md +0 -216
- 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 -88
- package/wiki/get-started/best-practices/security-guidelines.md +0 -99
- package/wiki/get-started/core-concepts/components.md +0 -98
- package/wiki/get-started/core-concepts/persistent.md +0 -543
- 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,167 @@
|
|
|
1
|
+
# UID Helper
|
|
2
|
+
|
|
3
|
+
Snowflake ID generator with Base62 encoding for generating unique, time-sortable IDs suitable for distributed systems.
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
| Class | Purpose | Key Features |
|
|
8
|
+
|-------|---------|--------------|
|
|
9
|
+
| **SnowflakeConfig** | Configuration constants | Bit structure, limits, defaults |
|
|
10
|
+
| **SnowflakeUidHelper** | ID generation | Snowflake IDs, Base62 encoding/decoding |
|
|
11
|
+
|
|
12
|
+
### Snowflake ID Structure (70 bits)
|
|
13
|
+
|
|
14
|
+
| Component | Bits | Range | Purpose |
|
|
15
|
+
|-----------|------|-------|---------|
|
|
16
|
+
| Timestamp | 48 | ~8,919 years | Time since epoch |
|
|
17
|
+
| Worker ID | 10 | 0-1023 | Unique worker identifier |
|
|
18
|
+
| Sequence | 12 | 0-4095 | IDs per millisecond |
|
|
19
|
+
|
|
20
|
+
### Key Specifications
|
|
21
|
+
|
|
22
|
+
| Spec | Value |
|
|
23
|
+
|------|-------|
|
|
24
|
+
| Base62 Output | 10-12 characters |
|
|
25
|
+
| Throughput | 4,096,000 IDs/second/worker |
|
|
26
|
+
| Max Workers | 1024 |
|
|
27
|
+
| Lifespan | Until ~10,944 AD |
|
|
28
|
+
| Default Epoch | 2025-01-01 00:00:00 UTC |
|
|
29
|
+
|
|
30
|
+
## Basic Usage
|
|
31
|
+
|
|
32
|
+
### Creating an Instance
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { SnowflakeUidHelper, SnowflakeConfig } from '@venizia/ignis-helpers';
|
|
36
|
+
|
|
37
|
+
// Use defaults (workerId: 199, epoch: 2025-01-01 00:00:00 UTC)
|
|
38
|
+
const generator = new SnowflakeUidHelper();
|
|
39
|
+
|
|
40
|
+
// Or with custom values
|
|
41
|
+
const customGenerator = new SnowflakeUidHelper({
|
|
42
|
+
workerId: 123,
|
|
43
|
+
epoch: BigInt(1735689600000),
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Generating IDs
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// Generate Base62 encoded ID (recommended for most use cases)
|
|
51
|
+
const id = generator.nextId();
|
|
52
|
+
// => e.g., "9du1sJXO88"
|
|
53
|
+
|
|
54
|
+
// Generate raw Snowflake ID as bigint
|
|
55
|
+
const snowflakeId = generator.nextSnowflake();
|
|
56
|
+
// => e.g., 130546360012247045n
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Base62 Encoding/Decoding
|
|
60
|
+
|
|
61
|
+
### Encode a BigInt to Base62
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
const encoded = generator.encodeBase62(130546360012247045n);
|
|
65
|
+
// => "9du1sJXO88"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Decode Base62 to BigInt
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
const decoded = generator.decodeBase62("9du1sJXO88");
|
|
72
|
+
// => 130546360012247045n
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Parsing and Extracting Components
|
|
76
|
+
|
|
77
|
+
### Parse a Base62 ID
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
const parsed = generator.parseId("9du1sJXO88");
|
|
81
|
+
// => {
|
|
82
|
+
// raw: 130546360012247045n,
|
|
83
|
+
// timestamp: Date,
|
|
84
|
+
// workerId: 199,
|
|
85
|
+
// sequence: 0
|
|
86
|
+
// }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Extract Individual Components
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
const snowflakeId = generator.nextSnowflake();
|
|
93
|
+
|
|
94
|
+
// Extract timestamp
|
|
95
|
+
const timestamp = generator.extractTimestamp(snowflakeId);
|
|
96
|
+
// => Date object
|
|
97
|
+
|
|
98
|
+
// Extract worker ID
|
|
99
|
+
const workerId = generator.extractWorkerId(snowflakeId);
|
|
100
|
+
// => 199
|
|
101
|
+
|
|
102
|
+
// Extract sequence
|
|
103
|
+
const sequence = generator.extractSequence(snowflakeId);
|
|
104
|
+
// => 0-4095
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Configuration
|
|
108
|
+
|
|
109
|
+
### SnowflakeConfig Constants
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { SnowflakeConfig } from '@venizia/ignis-helpers';
|
|
113
|
+
|
|
114
|
+
SnowflakeConfig.DEFAULT_EPOCH // BigInt(1735689600000) - 2025-01-01 00:00:00 UTC
|
|
115
|
+
SnowflakeConfig.MAX_WORKER_ID // 1023n
|
|
116
|
+
SnowflakeConfig.MAX_SEQUENCE // 4095n
|
|
117
|
+
SnowflakeConfig.TIMESTAMP_SHIFT // 22n
|
|
118
|
+
SnowflakeConfig.WORKER_ID_SHIFT // 12n
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Constructor Options
|
|
122
|
+
|
|
123
|
+
| Option | Type | Default | Description |
|
|
124
|
+
|--------|------|---------|-------------|
|
|
125
|
+
| `workerId` | `number` | `199` | Worker ID (0-1023) |
|
|
126
|
+
| `epoch` | `bigint` | `SnowflakeConfig.DEFAULT_EPOCH` | Custom epoch timestamp in milliseconds |
|
|
127
|
+
|
|
128
|
+
## Error Handling
|
|
129
|
+
|
|
130
|
+
The helper throws errors in these cases:
|
|
131
|
+
|
|
132
|
+
- **Invalid Worker ID**: Worker ID outside 0-1023 range
|
|
133
|
+
- **Invalid Epoch**: Epoch is zero, negative, or in the future
|
|
134
|
+
- **Clock Backward**: System clock moved backward by more than 100ms
|
|
135
|
+
- **Invalid Base62**: Decoding a string with invalid characters
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
try {
|
|
139
|
+
const generator = new SnowflakeUidHelper({ workerId: 2000 }); // Invalid
|
|
140
|
+
} catch (error) {
|
|
141
|
+
// Worker ID must be between 0 and 1023
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Best Practices
|
|
146
|
+
|
|
147
|
+
1. **Use unique worker IDs** in distributed systems to prevent ID collisions
|
|
148
|
+
2. **Keep epoch consistent** across all instances to ensure proper ID ordering
|
|
149
|
+
3. **Use `nextId()`** for most cases (returns compact Base62 string)
|
|
150
|
+
4. **Use `nextSnowflake()`** when you need the raw bigint for arithmetic operations
|
|
151
|
+
|
|
152
|
+
## See Also
|
|
153
|
+
|
|
154
|
+
- **Related Concepts:**
|
|
155
|
+
- [Models](/guides/core-concepts/persistent/models) - Using UIDs as primary keys
|
|
156
|
+
- [Services](/guides/core-concepts/services) - Generating unique IDs
|
|
157
|
+
|
|
158
|
+
- **Other Helpers:**
|
|
159
|
+
- [Helpers Index](./index) - All available helpers
|
|
160
|
+
- [Crypto Helper](./crypto) - For cryptographic random values
|
|
161
|
+
|
|
162
|
+
- **External Resources:**
|
|
163
|
+
- [Snowflake ID](https://en.wikipedia.org/wiki/Snowflake_ID) - Snowflake algorithm explained
|
|
164
|
+
- [Base62 Encoding](https://en.wikipedia.org/wiki/Base62) - Base62 encoding overview
|
|
165
|
+
|
|
166
|
+
- **Best Practices:**
|
|
167
|
+
- [Data Modeling](/best-practices/data-modeling) - ID generation strategies
|
|
@@ -160,3 +160,19 @@ const workerBus = new BaseWorkerBusHelper({
|
|
|
160
160
|
}),
|
|
161
161
|
});
|
|
162
162
|
```
|
|
163
|
+
|
|
164
|
+
## See Also
|
|
165
|
+
|
|
166
|
+
- **Related Concepts:**
|
|
167
|
+
- [Services](/guides/core-concepts/services) - CPU-intensive tasks in services
|
|
168
|
+
|
|
169
|
+
- **Other Helpers:**
|
|
170
|
+
- [Helpers Index](./index) - All available helpers
|
|
171
|
+
- [Queue Helper](./queue) - For I/O-bound background tasks
|
|
172
|
+
|
|
173
|
+
- **External Resources:**
|
|
174
|
+
- [Node.js Worker Threads](https://nodejs.org/api/worker_threads.html) - Official worker_threads API
|
|
175
|
+
- [MessageChannel](https://nodejs.org/api/worker_threads.html#class-messagechannel) - Two-way communication
|
|
176
|
+
|
|
177
|
+
- **Best Practices:**
|
|
178
|
+
- [Performance Optimization](/best-practices/performance-optimization) - Worker thread strategies
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
Complete reference documentation for the Ignis framework. Find detailed API docs, type definitions, and usage examples for every class, component, and utility in the framework.
|
|
4
|
+
|
|
5
|
+
<div class="guide-cards">
|
|
6
|
+
|
|
7
|
+
<a href="./base/" class="guide-card highlight">
|
|
8
|
+
<span class="guide-icon">🏗️</span>
|
|
9
|
+
<h3>Base Abstractions</h3>
|
|
10
|
+
<p>Application, Controller, Service, Repository, Model</p>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<a href="./components/" class="guide-card">
|
|
14
|
+
<span class="guide-icon">🧩</span>
|
|
15
|
+
<h3>Components</h3>
|
|
16
|
+
<p>Auth, Mail, Socket.IO, Swagger, Health Check</p>
|
|
17
|
+
</a>
|
|
18
|
+
|
|
19
|
+
<a href="./helpers/" class="guide-card">
|
|
20
|
+
<span class="guide-icon">🛠️</span>
|
|
21
|
+
<h3>Helpers</h3>
|
|
22
|
+
<p>Logger, Redis, Queue, Storage, Cron, Crypto</p>
|
|
23
|
+
</a>
|
|
24
|
+
|
|
25
|
+
<a href="./utilities/" class="guide-card">
|
|
26
|
+
<span class="guide-icon">⚙️</span>
|
|
27
|
+
<h3>Utilities</h3>
|
|
28
|
+
<p>Date, Parse, Promise, Schema, Performance</p>
|
|
29
|
+
</a>
|
|
30
|
+
|
|
31
|
+
<a href="./configuration/" class="guide-card">
|
|
32
|
+
<span class="guide-icon">📝</span>
|
|
33
|
+
<h3>Configuration</h3>
|
|
34
|
+
<p>Environment variables and settings</p>
|
|
35
|
+
</a>
|
|
36
|
+
|
|
37
|
+
<a href="./src-details/" class="guide-card">
|
|
38
|
+
<span class="guide-icon">📦</span>
|
|
39
|
+
<h3>Framework Internals</h3>
|
|
40
|
+
<p>Package structure and architecture</p>
|
|
41
|
+
</a>
|
|
42
|
+
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
## Find What You Need
|
|
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>Building an API</h4>
|
|
53
|
+
</div>
|
|
54
|
+
<p><a href="./base/application">Application</a> → <a href="./base/controllers">Controllers</a> → <a href="./base/services">Services</a> → <a href="./base/repositories/">Repositories</a></p>
|
|
55
|
+
<span class="stage-desc">Request handling, business logic, and data access</span>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div class="roadmap-stage">
|
|
59
|
+
<div class="stage-header">
|
|
60
|
+
<span class="stage-num">2</span>
|
|
61
|
+
<h4>Data Layer</h4>
|
|
62
|
+
</div>
|
|
63
|
+
<p><a href="./base/models">Models</a> → <a href="./base/datasources">DataSources</a> → <a href="./base/filter-system/">Filtering</a> → <a href="./base/repositories/relations">Relations</a></p>
|
|
64
|
+
<span class="stage-desc">Entities, database connections, and query building</span>
|
|
65
|
+
</div>
|
|
66
|
+
|
|
67
|
+
<div class="roadmap-stage">
|
|
68
|
+
<div class="stage-header">
|
|
69
|
+
<span class="stage-num">3</span>
|
|
70
|
+
<h4>Adding Features</h4>
|
|
71
|
+
</div>
|
|
72
|
+
<p><a href="./components/authentication">Auth</a> → <a href="./components/socket-io">Real-time</a> → <a href="./components/mail">Email</a> → <a href="./components/swagger">API Docs</a></p>
|
|
73
|
+
<span class="stage-desc">Pre-built components for common features</span>
|
|
74
|
+
</div>
|
|
75
|
+
|
|
76
|
+
<div class="roadmap-stage">
|
|
77
|
+
<div class="stage-header">
|
|
78
|
+
<span class="stage-num">4</span>
|
|
79
|
+
<h4>Infrastructure</h4>
|
|
80
|
+
</div>
|
|
81
|
+
<p><a href="./helpers/logger">Logging</a> → <a href="./helpers/redis">Caching</a> → <a href="./helpers/queue">Queues</a> → <a href="./helpers/cron">Scheduling</a></p>
|
|
82
|
+
<span class="stage-desc">Background jobs, caching, and observability</span>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div class="roadmap-stage">
|
|
86
|
+
<div class="stage-header">
|
|
87
|
+
<span class="stage-num">5</span>
|
|
88
|
+
<h4>Advanced Patterns</h4>
|
|
89
|
+
</div>
|
|
90
|
+
<p><a href="./base/dependency-injection">Dependency Injection</a> → <a href="./base/providers">Custom Providers</a> → <a href="./base/middlewares">Middlewares</a> → <a href="./base/components">Components</a></p>
|
|
91
|
+
<span class="stage-desc">Advanced architecture patterns and customization</span>
|
|
92
|
+
</div>
|
|
93
|
+
|
|
94
|
+
<div class="roadmap-stage">
|
|
95
|
+
<div class="stage-header">
|
|
96
|
+
<span class="stage-num">6</span>
|
|
97
|
+
<h4>Production Ready</h4>
|
|
98
|
+
</div>
|
|
99
|
+
<p><a href="./base/middlewares">Error Handling</a> → <a href="./components/health-check">Health Checks</a> → <a href="./configuration/environment-variables">Configuration</a> → <a href="./base/bootstrapping">Auto-Discovery</a></p>
|
|
100
|
+
<span class="stage-desc">Production deployment, monitoring, and reliability</span>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<div class="roadmap-stage">
|
|
104
|
+
<div class="stage-header">
|
|
105
|
+
<span class="stage-num">7</span>
|
|
106
|
+
<h4>Testing & Quality</h4>
|
|
107
|
+
</div>
|
|
108
|
+
<p><a href="./helpers/testing">Unit Testing</a> → <a href="./base/repositories/advanced">Mocking & Stubs</a> → <a href="./quick-reference">Best Practices</a></p>
|
|
109
|
+
<span class="stage-desc">Testing strategies, quality assurance, and code review</span>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
::: tip Looking for tutorials?
|
|
115
|
+
Check out the [Getting Started Guide](/guides/) for step-by-step tutorials and the [Core Concepts](/guides/core-concepts/application/) for architectural explanations.
|
|
116
|
+
:::
|
|
117
|
+
|
|
118
|
+
## Quick Examples
|
|
119
|
+
|
|
120
|
+
**Define a Controller:**
|
|
121
|
+
```typescript
|
|
122
|
+
@controller({ path: '/users' })
|
|
123
|
+
class UserController extends BaseController {
|
|
124
|
+
@get({ configs: { path: '/:id' } })
|
|
125
|
+
getUser(c: Context) {
|
|
126
|
+
return c.json({ id: c.req.param('id') });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Query with Repository:**
|
|
132
|
+
```typescript
|
|
133
|
+
const users = await userRepo.find({
|
|
134
|
+
where: { isActive: true },
|
|
135
|
+
orderBy: { createdAt: 'desc' },
|
|
136
|
+
limit: 10,
|
|
137
|
+
});
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Schedule a Job:**
|
|
141
|
+
```typescript
|
|
142
|
+
CronHelper.schedule('0 * * * *', async () => {
|
|
143
|
+
await cleanupExpiredSessions();
|
|
144
|
+
});
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Common Imports
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// Core framework
|
|
151
|
+
import {
|
|
152
|
+
BaseApplication,
|
|
153
|
+
BaseController,
|
|
154
|
+
BaseService,
|
|
155
|
+
BaseRepository,
|
|
156
|
+
controller,
|
|
157
|
+
get, post, put, del,
|
|
158
|
+
inject,
|
|
159
|
+
} from '@venizia/ignis';
|
|
160
|
+
|
|
161
|
+
// Helpers
|
|
162
|
+
import {
|
|
163
|
+
LoggerFactory,
|
|
164
|
+
RedisHelper,
|
|
165
|
+
QueueHelper,
|
|
166
|
+
} from '@venizia/ignis-helpers';
|
|
167
|
+
|
|
168
|
+
// DI Container
|
|
169
|
+
import { Container } from '@venizia/ignis-inversion';
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## See Also
|
|
173
|
+
|
|
174
|
+
- [Getting Started](/guides/) - New to Ignis? Start here
|
|
175
|
+
- [Core Concepts](/guides/core-concepts/application/) - Deep dive into architecture
|
|
176
|
+
- [Best Practices](/best-practices/) - Production patterns
|
|
177
|
+
- [Changelogs](/changelogs/) - Version history
|