@venizia/ignis-docs 0.0.3 → 0.0.4-1
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 +31 -26
- package/wiki/references/base/components.md +24 -7
- package/wiki/references/base/controllers.md +50 -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 +604 -0
- package/wiki/references/base/models.md +215 -23
- package/wiki/references/base/providers.md +731 -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
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Complete Installation
|
|
2
2
|
|
|
3
3
|
This guide walks you through creating a new web application with Ignis and setting up a professional development environment.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**⏱️ Time to Complete:** ~20 minutes
|
|
6
|
+
|
|
7
|
+
> **Prerequisites:** Ensure you have [Bun installed and basic TypeScript knowledge](../get-started/setup.md) before starting.
|
|
6
8
|
|
|
7
9
|
## 1. Initialize Your Project
|
|
8
10
|
|
|
@@ -30,7 +32,7 @@ bun add hono @hono/zod-openapi @scalar/hono-api-reference @venizia/ignis dotenv-
|
|
|
30
32
|
### Development Dependencies
|
|
31
33
|
|
|
32
34
|
```bash
|
|
33
|
-
bun add -d typescript @types/bun @venizia/dev-configs tsc-alias
|
|
35
|
+
bun add -d typescript @types/bun @venizia/dev-configs eslint prettier tsc-alias
|
|
34
36
|
```
|
|
35
37
|
|
|
36
38
|
**What `@venizia/dev-configs` provides:**
|
|
@@ -108,38 +110,10 @@ export default eslintConfigs;
|
|
|
108
110
|
> export default [...eslintConfigs, { rules: { 'no-console': 'warn' } }];
|
|
109
111
|
> ```
|
|
110
112
|
|
|
111
|
-
> **Deep Dive:** See [Code Style Standards](
|
|
112
|
-
|
|
113
|
-
:::tip A Note on Setup for Express/Hono/Fastify Developers
|
|
114
|
-
If you're coming from a minimal framework like Express, Hono, or Fastify, you might be thinking: "This is a lot of setup just to get started!"
|
|
115
|
-
|
|
116
|
-
You're right—and it's intentional. Here's why:
|
|
117
|
-
|
|
118
|
-
**In Express/Hono/Fastify, you might start with:**
|
|
119
|
-
```javascript
|
|
120
|
-
const app = require('express')();
|
|
121
|
-
app.get('/', (req, res) => res.json({ hello: 'world' }));
|
|
122
|
-
app.listen(3000);
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
That's 3 lines. Beautiful and fast.
|
|
113
|
+
> **Deep Dive:** See [Code Style Standards](/best-practices/code-style-standards) for detailed configuration options.
|
|
126
114
|
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
- How do you organize routes when you have 50+ endpoints?
|
|
130
|
-
- How do you share code between routes?
|
|
131
|
-
- How do you validate requests?
|
|
132
|
-
- How do you generate API docs?
|
|
133
|
-
- How do you test business logic in isolation?
|
|
134
|
-
|
|
135
|
-
`Ignis` answers these questions upfront with:
|
|
136
|
-
- **Type Safety (`tsconfig.json`):** Catches errors before they reach production
|
|
137
|
-
- **Consistent Formatting (`.prettierrc.mjs`):** No more debates about code style in PRs
|
|
138
|
-
- **Code Quality (`eslint.config.mjs`):** Prevents common bugs and enforces best practices
|
|
139
|
-
|
|
140
|
-
**The trade-off:** You write 50-100 lines of config once. In return, you get a scalable architecture that handles projects with 10, 100, or 1000+ endpoints without becoming spaghetti code.
|
|
141
|
-
|
|
142
|
-
If you're building a quick prototype or tiny API (< 5 endpoints), stick with plain Hono. But if your API will grow or be maintained by a team, this setup pays for itself within a week.
|
|
115
|
+
:::tip Coming from Express/Hono/Fastify?
|
|
116
|
+
This setup might seem verbose compared to minimal frameworks. The trade-off: ~50 lines of config upfront gives you scalable architecture for 10-1000+ endpoints without spaghetti code. For quick prototypes (< 5 endpoints), use plain Hono instead.
|
|
143
117
|
:::
|
|
144
118
|
|
|
145
119
|
## 4. Build Your First Application
|
|
@@ -147,24 +121,48 @@ If you're building a quick prototype or tiny API (< 5 endpoints), stick with pla
|
|
|
147
121
|
### Create Project Structure
|
|
148
122
|
|
|
149
123
|
```bash
|
|
150
|
-
mkdir -p src/controllers
|
|
124
|
+
mkdir -p src/{common,components,configurations,controllers,datasources,helpers,models/{entities,requests,responses},repositories,services,utilities}
|
|
151
125
|
```
|
|
152
126
|
|
|
153
127
|
Your structure will look like:
|
|
154
128
|
```
|
|
155
129
|
src/
|
|
156
|
-
├──
|
|
157
|
-
├──
|
|
158
|
-
|
|
159
|
-
|
|
130
|
+
├── index.ts # Entry point
|
|
131
|
+
├── application.ts # Application class
|
|
132
|
+
├── common/
|
|
133
|
+
│ └── index.ts # Shared constants, types, bindings
|
|
134
|
+
├── components/
|
|
135
|
+
│ └── index.ts # Reusable modules (auth, swagger, etc.)
|
|
136
|
+
├── configurations/
|
|
137
|
+
│ └── index.ts # App configuration files
|
|
138
|
+
├── controllers/
|
|
139
|
+
│ ├── index.ts # Export all controllers
|
|
140
|
+
│ └── hello.controller.ts
|
|
141
|
+
├── datasources/
|
|
142
|
+
│ └── index.ts # Database connections
|
|
143
|
+
├── helpers/
|
|
144
|
+
│ └── index.ts # Helper functions and classes
|
|
145
|
+
├── models/
|
|
146
|
+
│ ├── index.ts # Export all models
|
|
147
|
+
│ ├── entities/ # Drizzle schema definitions
|
|
148
|
+
│ ├── requests/ # Request DTOs (Zod schemas)
|
|
149
|
+
│ └── responses/ # Response DTOs (Zod schemas)
|
|
150
|
+
├── repositories/
|
|
151
|
+
│ └── index.ts # Data access layer
|
|
152
|
+
├── services/
|
|
153
|
+
│ └── index.ts # Business logic
|
|
154
|
+
└── utilities/
|
|
155
|
+
└── index.ts # Utility functions
|
|
160
156
|
```
|
|
161
157
|
|
|
158
|
+
> **Note:** For this guide, we only use `controllers/`. Other folders will be used in the [CRUD Tutorial](./building-a-crud-api.md) when you add database support.
|
|
159
|
+
|
|
162
160
|
### Create Application Class
|
|
163
161
|
|
|
164
162
|
Create `src/application.ts` - this is where you configure and register all your application resources:
|
|
165
163
|
|
|
166
164
|
```typescript
|
|
167
|
-
import { BaseApplication, IApplicationConfigs, IApplicationInfo, ValueOrPromise } from '@venizia/ignis';
|
|
165
|
+
import { BaseApplication, IApplicationConfigs, IApplicationInfo, SwaggerComponent, ValueOrPromise } from '@venizia/ignis';
|
|
168
166
|
import { HelloController } from './controllers/hello.controller';
|
|
169
167
|
import packageJson from '../package.json';
|
|
170
168
|
|
|
@@ -178,7 +176,15 @@ export const appConfigs: IApplicationConfigs = {
|
|
|
178
176
|
export class Application extends BaseApplication {
|
|
179
177
|
// Required: Tell the framework about your app (used for API docs)
|
|
180
178
|
override getAppInfo(): ValueOrPromise<IApplicationInfo> {
|
|
179
|
+
// Option 1: Read from package.json (recommended for consistency)
|
|
181
180
|
return packageJson;
|
|
181
|
+
|
|
182
|
+
// Option 2: Static app info (if package.json doesn't have correct fields)
|
|
183
|
+
// return {
|
|
184
|
+
// name: 'my-app',
|
|
185
|
+
// version: '1.0.0',
|
|
186
|
+
// description: 'My Ignis application',
|
|
187
|
+
// };
|
|
182
188
|
}
|
|
183
189
|
|
|
184
190
|
// Hook 1: Configure static file serving (e.g., serve images from /public)
|
|
@@ -186,20 +192,31 @@ export class Application extends BaseApplication {
|
|
|
186
192
|
// Example: this.static({ folderPath: './public' })
|
|
187
193
|
}
|
|
188
194
|
|
|
189
|
-
// Hook 2: Add global middlewares (CORS,
|
|
190
|
-
setupMiddlewares():
|
|
191
|
-
|
|
195
|
+
// Hook 2: Add global middlewares (CORS, etc.)
|
|
196
|
+
override async setupMiddlewares(): Promise<void> {
|
|
197
|
+
const server = this.getServer();
|
|
198
|
+
const { cors } = await import('hono/cors');
|
|
199
|
+
|
|
200
|
+
server.use('*', cors({
|
|
201
|
+
origin: '*',
|
|
202
|
+
allowMethods: ['GET', 'HEAD', 'PUT', 'PATCH', 'POST', 'DELETE', 'OPTIONS'],
|
|
203
|
+
maxAge: 86_400,
|
|
204
|
+
credentials: true,
|
|
205
|
+
}));
|
|
192
206
|
}
|
|
193
207
|
|
|
194
208
|
// Hook 3: Register your resources (THIS IS THE MOST IMPORTANT ONE)
|
|
195
209
|
preConfigure(): ValueOrPromise<void> {
|
|
210
|
+
// Register SwaggerComponent for API documentation at /doc/explorer
|
|
211
|
+
this.component(SwaggerComponent);
|
|
212
|
+
|
|
196
213
|
// As your app grows, you'll add:
|
|
197
214
|
// this.dataSource(PostgresDataSource); // Database connection
|
|
198
215
|
// this.repository(UserRepository); // Data access layer
|
|
199
216
|
// this.service(UserService); // Business logic
|
|
200
217
|
// this.component(AuthComponent); // Auth setup
|
|
201
218
|
|
|
202
|
-
//
|
|
219
|
+
// Register our controller
|
|
203
220
|
this.controller(HelloController);
|
|
204
221
|
}
|
|
205
222
|
|
|
@@ -210,6 +227,17 @@ export class Application extends BaseApplication {
|
|
|
210
227
|
}
|
|
211
228
|
```
|
|
212
229
|
|
|
230
|
+
::: info IApplicationInfo
|
|
231
|
+
**Required fields in `package.json`:**
|
|
232
|
+
- `name` — App name (shown in API docs title)
|
|
233
|
+
- `version` — App version (shown in API docs)
|
|
234
|
+
- `description` — App description (shown in API docs)
|
|
235
|
+
|
|
236
|
+
**No proper `package.json`?** Use static app info instead (see Option 2 in code above).
|
|
237
|
+
|
|
238
|
+
**Recommendation:** Read from `package.json` for consistency between app metadata and API docs.
|
|
239
|
+
:::
|
|
240
|
+
|
|
213
241
|
**Key takeaway:** You'll mostly work in `preConfigure()` when building your app. The other hooks are there when you need them.
|
|
214
242
|
|
|
215
243
|
**Application Lifecycle Hooks:**
|
|
@@ -221,7 +249,7 @@ export class Application extends BaseApplication {
|
|
|
221
249
|
| `preConfigure()` | **Register resources** | **Main hook** - register controllers, services, etc. |
|
|
222
250
|
| `postConfigure()` | Post-initialization | Optional - seed data, background jobs |
|
|
223
251
|
|
|
224
|
-
> **Deep Dive:** See [Application Class Reference](
|
|
252
|
+
> **Deep Dive:** See [Application Class Reference](../core-concepts/application/) for detailed lifecycle documentation.
|
|
225
253
|
|
|
226
254
|
### Create Controller
|
|
227
255
|
|
|
@@ -231,7 +259,7 @@ Create `src/controllers/hello.controller.ts` - controllers handle HTTP requests
|
|
|
231
259
|
import {
|
|
232
260
|
BaseController,
|
|
233
261
|
controller,
|
|
234
|
-
|
|
262
|
+
api,
|
|
235
263
|
HTTP,
|
|
236
264
|
jsonContent,
|
|
237
265
|
} from '@venizia/ignis';
|
|
@@ -248,9 +276,18 @@ export class HelloController extends BaseController {
|
|
|
248
276
|
super({ scope: HelloController.name, path: BASE_PATH });
|
|
249
277
|
}
|
|
250
278
|
|
|
251
|
-
//
|
|
252
|
-
|
|
279
|
+
// Required: Override binding() to register routes or dependencies
|
|
280
|
+
override binding() {
|
|
281
|
+
// Option 1: Use bindRoute() or defineRoute() for programmatic route registration
|
|
282
|
+
// this.bindRoute({ method: 'get', path: '/programmatic', handler: this.myHandler });
|
|
283
|
+
|
|
284
|
+
// Option 2: Use @api decorator on methods (shown below) - recommended
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// The @api decorator defines a route (prefer @api with method over @get/@post)
|
|
288
|
+
@api({
|
|
253
289
|
configs: {
|
|
290
|
+
method: HTTP.Methods.GET,
|
|
254
291
|
path: '/',
|
|
255
292
|
// This 'responses' config does two things:
|
|
256
293
|
// 1. Generates OpenAPI/Swagger documentation automatically
|
|
@@ -258,34 +295,31 @@ export class HelloController extends BaseController {
|
|
|
258
295
|
responses: {
|
|
259
296
|
[HTTP.ResultCodes.RS_2.Ok]: jsonContent({
|
|
260
297
|
description: 'A simple hello message',
|
|
261
|
-
schema: z.object({ message: z.string() }),
|
|
298
|
+
schema: z.object({ message: z.string() }),
|
|
262
299
|
}),
|
|
263
300
|
},
|
|
264
301
|
},
|
|
265
302
|
})
|
|
266
303
|
sayHello(c: Context) {
|
|
267
|
-
// This looks just like Hono! Because it IS Hono under the hood.
|
|
268
304
|
return c.json({ message: 'Hello, World!' }, HTTP.ResultCodes.RS_2.Ok);
|
|
269
305
|
}
|
|
270
306
|
|
|
271
|
-
//
|
|
272
|
-
// @
|
|
273
|
-
// createSomething(c: Context) { ... }
|
|
274
|
-
|
|
275
|
-
// For authenticated endpoints, add 'authStrategies' to the configs:
|
|
276
|
-
// @get({ configs: { path: '/secure', authStrategies: [Authentication.STRATEGY_JWT] } })
|
|
277
|
-
// secureMethod(c: Context) { /* ... */ }
|
|
278
|
-
|
|
279
|
-
// For database CRUD operations, use ControllerFactory (covered in the CRUD tutorial)
|
|
307
|
+
// For authenticated endpoints, add 'authStrategies':
|
|
308
|
+
// @api({ configs: { method: HTTP.Methods.GET, path: '/secure', authStrategies: [Authentication.STRATEGY_JWT] } })
|
|
280
309
|
}
|
|
281
310
|
```
|
|
282
311
|
|
|
283
|
-
**Controller
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
312
|
+
**Controller Patterns:**
|
|
313
|
+
|
|
314
|
+
| Pattern | Description |
|
|
315
|
+
|---------|-------------|
|
|
316
|
+
| `@controller` | Registers the class as a controller with a base path |
|
|
317
|
+
| `@api` | Defines a route with `method` specified (recommended) |
|
|
318
|
+
| `@get`, `@post`, etc. | Shorthand decorators (also work) |
|
|
319
|
+
| `binding()` | Required override — use `bindRoute()` or `defineRoute()` for programmatic routes |
|
|
320
|
+
| Zod schemas | Provide automatic validation and OpenAPI docs |
|
|
287
321
|
|
|
288
|
-
> **Deep Dive:** See [Controllers Reference](
|
|
322
|
+
> **Deep Dive:** See [Controllers Reference](../core-concepts/controllers.md) for advanced routing patterns and validation.
|
|
289
323
|
|
|
290
324
|
### Create Entry Point
|
|
291
325
|
|
|
@@ -324,17 +358,15 @@ Add common application scripts to your `package.json`:
|
|
|
324
358
|
"prettier:fix": "bun run prettier:cli --write",
|
|
325
359
|
"eslint": "eslint --report-unused-disable-directives .",
|
|
326
360
|
"build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
|
327
|
-
"compile:linux": "bun build --compile --minify --sourcemap --target=bun-linux-x64 ./src/index.ts --outfile ./dist/my_app",
|
|
328
361
|
"clean": "sh ./scripts/clean.sh",
|
|
329
362
|
"rebuild": "bun run clean && bun run build",
|
|
330
|
-
"migrate:dev": "NODE_ENV=development drizzle-kit push --config=src/migration.ts",
|
|
331
|
-
"generate-migration:dev": "NODE_ENV=development drizzle-kit generate --config=src/migration.ts",
|
|
332
|
-
"preserver:dev": "bun run rebuild",
|
|
333
363
|
"server:dev": "NODE_ENV=development bun .",
|
|
334
364
|
"server:prod": "NODE_ENV=production bun ."
|
|
335
365
|
}
|
|
336
366
|
```
|
|
337
367
|
|
|
368
|
+
> **Note:** Database migration scripts (`migrate:dev`, `generate-migration:dev`) will be added in the [CRUD Tutorial](./building-a-crud-api.md) when you set up Drizzle ORM.
|
|
369
|
+
|
|
338
370
|
Create a cleanup script at `scripts/clean.sh`:
|
|
339
371
|
|
|
340
372
|
```bash
|
|
@@ -367,6 +399,10 @@ Response:
|
|
|
367
399
|
{"message":"Hello, World!"}
|
|
368
400
|
```
|
|
369
401
|
|
|
402
|
+
**View API Documentation:**
|
|
403
|
+
|
|
404
|
+
Open `http://localhost:3000/doc/explorer` to see interactive Swagger UI with your endpoints.
|
|
405
|
+
|
|
370
406
|
Congratulations! You have successfully created and configured your first application with the `Ignis` framework.
|
|
371
407
|
|
|
372
408
|
## Continue Your Journey
|
|
@@ -376,7 +412,7 @@ Congratulations! You have successfully created and configured your first applica
|
|
|
376
412
|
**Next steps:**
|
|
377
413
|
|
|
378
414
|
1. **[Building a CRUD API](./building-a-crud-api.md)** - Add database, create full REST API with CRUD operations
|
|
379
|
-
2. **[Core Concepts](
|
|
380
|
-
3. **[Best Practices](
|
|
415
|
+
2. **[Core Concepts](../core-concepts/application/)** - Deep dive into application architecture
|
|
416
|
+
3. **[Best Practices](/best-practices/architectural-patterns)** - Learn recommended patterns and practices
|
|
381
417
|
|
|
382
|
-
> **Deep Dive:** See [API Usage Examples](
|
|
418
|
+
> **Deep Dive:** See [API Usage Examples](/best-practices/api-usage-examples) for more routing patterns and controller techniques.
|