@bloomneo/appkit 1.2.9
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/LICENSE +21 -0
- package/README.md +902 -0
- package/bin/appkit.js +71 -0
- package/bin/commands/generate.js +1050 -0
- package/bin/templates/backend/README.md.template +39 -0
- package/bin/templates/backend/api.http.template +0 -0
- package/bin/templates/backend/docs/APPKIT_CLI.md +507 -0
- package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +61 -0
- package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +2539 -0
- package/bin/templates/backend/package.json.template +34 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.http.template +29 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.route.ts.template +36 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.service.ts.template +88 -0
- package/bin/templates/backend/src/api/features/welcome/welcome.types.ts.template +18 -0
- package/bin/templates/backend/src/api/lib/api-router.ts.template +84 -0
- package/bin/templates/backend/src/api/server.ts.template +188 -0
- package/bin/templates/backend/tsconfig.api.json.template +24 -0
- package/bin/templates/backend/tsconfig.json.template +40 -0
- package/bin/templates/feature/feature.http.template +63 -0
- package/bin/templates/feature/feature.route.ts.template +36 -0
- package/bin/templates/feature/feature.service.ts.template +81 -0
- package/bin/templates/feature/feature.types.ts.template +23 -0
- package/bin/templates/feature-db/feature.http.template +63 -0
- package/bin/templates/feature-db/feature.model.ts.template +74 -0
- package/bin/templates/feature-db/feature.route.ts.template +58 -0
- package/bin/templates/feature-db/feature.service.ts.template +231 -0
- package/bin/templates/feature-db/feature.types.ts.template +25 -0
- package/bin/templates/feature-db/schema-addition.prisma.template +9 -0
- package/bin/templates/feature-db/seeding/README.md.template +57 -0
- package/bin/templates/feature-db/seeding/feature.seed.js.template +67 -0
- package/bin/templates/feature-user/schema-addition.prisma.template +19 -0
- package/bin/templates/feature-user/user.http.template +157 -0
- package/bin/templates/feature-user/user.model.ts.template +244 -0
- package/bin/templates/feature-user/user.route.ts.template +379 -0
- package/bin/templates/feature-user/user.seed.js.template +182 -0
- package/bin/templates/feature-user/user.service.ts.template +426 -0
- package/bin/templates/feature-user/user.types.ts.template +127 -0
- package/dist/auth/auth.d.ts +182 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +477 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/defaults.d.ts +104 -0
- package/dist/auth/defaults.d.ts.map +1 -0
- package/dist/auth/defaults.js +374 -0
- package/dist/auth/defaults.js.map +1 -0
- package/dist/auth/index.d.ts +70 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +94 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/cache/cache.d.ts +118 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +249 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cache/defaults.d.ts +63 -0
- package/dist/cache/defaults.d.ts.map +1 -0
- package/dist/cache/defaults.js +193 -0
- package/dist/cache/defaults.js.map +1 -0
- package/dist/cache/index.d.ts +101 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +203 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/strategies/memory.d.ts +138 -0
- package/dist/cache/strategies/memory.d.ts.map +1 -0
- package/dist/cache/strategies/memory.js +348 -0
- package/dist/cache/strategies/memory.js.map +1 -0
- package/dist/cache/strategies/redis.d.ts +105 -0
- package/dist/cache/strategies/redis.d.ts.map +1 -0
- package/dist/cache/strategies/redis.js +318 -0
- package/dist/cache/strategies/redis.js.map +1 -0
- package/dist/config/config.d.ts +62 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +107 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +44 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +217 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +105 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +163 -0
- package/dist/config/index.js.map +1 -0
- package/dist/database/adapters/mongoose.d.ts +106 -0
- package/dist/database/adapters/mongoose.d.ts.map +1 -0
- package/dist/database/adapters/mongoose.js +480 -0
- package/dist/database/adapters/mongoose.js.map +1 -0
- package/dist/database/adapters/prisma.d.ts +106 -0
- package/dist/database/adapters/prisma.d.ts.map +1 -0
- package/dist/database/adapters/prisma.js +494 -0
- package/dist/database/adapters/prisma.js.map +1 -0
- package/dist/database/defaults.d.ts +87 -0
- package/dist/database/defaults.d.ts.map +1 -0
- package/dist/database/defaults.js +271 -0
- package/dist/database/defaults.js.map +1 -0
- package/dist/database/index.d.ts +137 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +490 -0
- package/dist/database/index.js.map +1 -0
- package/dist/email/defaults.d.ts +100 -0
- package/dist/email/defaults.d.ts.map +1 -0
- package/dist/email/defaults.js +400 -0
- package/dist/email/defaults.js.map +1 -0
- package/dist/email/email.d.ts +139 -0
- package/dist/email/email.d.ts.map +1 -0
- package/dist/email/email.js +316 -0
- package/dist/email/email.js.map +1 -0
- package/dist/email/index.d.ts +176 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +251 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/strategies/console.d.ts +90 -0
- package/dist/email/strategies/console.d.ts.map +1 -0
- package/dist/email/strategies/console.js +268 -0
- package/dist/email/strategies/console.js.map +1 -0
- package/dist/email/strategies/resend.d.ts +84 -0
- package/dist/email/strategies/resend.d.ts.map +1 -0
- package/dist/email/strategies/resend.js +266 -0
- package/dist/email/strategies/resend.js.map +1 -0
- package/dist/email/strategies/smtp.d.ts +77 -0
- package/dist/email/strategies/smtp.d.ts.map +1 -0
- package/dist/email/strategies/smtp.js +286 -0
- package/dist/email/strategies/smtp.js.map +1 -0
- package/dist/error/defaults.d.ts +40 -0
- package/dist/error/defaults.d.ts.map +1 -0
- package/dist/error/defaults.js +75 -0
- package/dist/error/defaults.js.map +1 -0
- package/dist/error/error.d.ts +140 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/error.js +200 -0
- package/dist/error/error.js.map +1 -0
- package/dist/error/index.d.ts +145 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +145 -0
- package/dist/error/index.js.map +1 -0
- package/dist/event/defaults.d.ts +111 -0
- package/dist/event/defaults.d.ts.map +1 -0
- package/dist/event/defaults.js +378 -0
- package/dist/event/defaults.js.map +1 -0
- package/dist/event/event.d.ts +171 -0
- package/dist/event/event.d.ts.map +1 -0
- package/dist/event/event.js +391 -0
- package/dist/event/event.js.map +1 -0
- package/dist/event/index.d.ts +173 -0
- package/dist/event/index.d.ts.map +1 -0
- package/dist/event/index.js +302 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/strategies/memory.d.ts +122 -0
- package/dist/event/strategies/memory.d.ts.map +1 -0
- package/dist/event/strategies/memory.js +331 -0
- package/dist/event/strategies/memory.js.map +1 -0
- package/dist/event/strategies/redis.d.ts +115 -0
- package/dist/event/strategies/redis.d.ts.map +1 -0
- package/dist/event/strategies/redis.js +434 -0
- package/dist/event/strategies/redis.js.map +1 -0
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/defaults.d.ts +67 -0
- package/dist/logger/defaults.d.ts.map +1 -0
- package/dist/logger/defaults.js +213 -0
- package/dist/logger/defaults.js.map +1 -0
- package/dist/logger/index.d.ts +84 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +101 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.d.ts +165 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +843 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/logger/transports/console.d.ts +102 -0
- package/dist/logger/transports/console.d.ts.map +1 -0
- package/dist/logger/transports/console.js +276 -0
- package/dist/logger/transports/console.js.map +1 -0
- package/dist/logger/transports/database.d.ts +153 -0
- package/dist/logger/transports/database.d.ts.map +1 -0
- package/dist/logger/transports/database.js +539 -0
- package/dist/logger/transports/database.js.map +1 -0
- package/dist/logger/transports/file.d.ts +146 -0
- package/dist/logger/transports/file.d.ts.map +1 -0
- package/dist/logger/transports/file.js +464 -0
- package/dist/logger/transports/file.js.map +1 -0
- package/dist/logger/transports/http.d.ts +128 -0
- package/dist/logger/transports/http.d.ts.map +1 -0
- package/dist/logger/transports/http.js +401 -0
- package/dist/logger/transports/http.js.map +1 -0
- package/dist/logger/transports/webhook.d.ts +152 -0
- package/dist/logger/transports/webhook.d.ts.map +1 -0
- package/dist/logger/transports/webhook.js +485 -0
- package/dist/logger/transports/webhook.js.map +1 -0
- package/dist/queue/defaults.d.ts +66 -0
- package/dist/queue/defaults.d.ts.map +1 -0
- package/dist/queue/defaults.js +205 -0
- package/dist/queue/defaults.js.map +1 -0
- package/dist/queue/index.d.ts +124 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +116 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/queue.d.ts +156 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +387 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/transports/database.d.ts +165 -0
- package/dist/queue/transports/database.d.ts.map +1 -0
- package/dist/queue/transports/database.js +595 -0
- package/dist/queue/transports/database.js.map +1 -0
- package/dist/queue/transports/memory.d.ts +143 -0
- package/dist/queue/transports/memory.d.ts.map +1 -0
- package/dist/queue/transports/memory.js +415 -0
- package/dist/queue/transports/memory.js.map +1 -0
- package/dist/queue/transports/redis.d.ts +203 -0
- package/dist/queue/transports/redis.d.ts.map +1 -0
- package/dist/queue/transports/redis.js +744 -0
- package/dist/queue/transports/redis.js.map +1 -0
- package/dist/security/defaults.d.ts +64 -0
- package/dist/security/defaults.d.ts.map +1 -0
- package/dist/security/defaults.js +159 -0
- package/dist/security/defaults.js.map +1 -0
- package/dist/security/index.d.ts +110 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +160 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/security.d.ts +138 -0
- package/dist/security/security.d.ts.map +1 -0
- package/dist/security/security.js +419 -0
- package/dist/security/security.js.map +1 -0
- package/dist/storage/defaults.d.ts +79 -0
- package/dist/storage/defaults.d.ts.map +1 -0
- package/dist/storage/defaults.js +358 -0
- package/dist/storage/defaults.js.map +1 -0
- package/dist/storage/index.d.ts +153 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +242 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/storage.d.ts +151 -0
- package/dist/storage/storage.d.ts.map +1 -0
- package/dist/storage/storage.js +439 -0
- package/dist/storage/storage.js.map +1 -0
- package/dist/storage/strategies/local.d.ts +117 -0
- package/dist/storage/strategies/local.d.ts.map +1 -0
- package/dist/storage/strategies/local.js +368 -0
- package/dist/storage/strategies/local.js.map +1 -0
- package/dist/storage/strategies/r2.d.ts +130 -0
- package/dist/storage/strategies/r2.d.ts.map +1 -0
- package/dist/storage/strategies/r2.js +470 -0
- package/dist/storage/strategies/r2.js.map +1 -0
- package/dist/storage/strategies/s3.d.ts +121 -0
- package/dist/storage/strategies/s3.d.ts.map +1 -0
- package/dist/storage/strategies/s3.js +461 -0
- package/dist/storage/strategies/s3.js.map +1 -0
- package/dist/util/defaults.d.ts +77 -0
- package/dist/util/defaults.d.ts.map +1 -0
- package/dist/util/defaults.js +193 -0
- package/dist/util/defaults.js.map +1 -0
- package/dist/util/index.d.ts +97 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +165 -0
- package/dist/util/index.js.map +1 -0
- package/dist/util/util.d.ts +145 -0
- package/dist/util/util.d.ts.map +1 -0
- package/dist/util/util.js +481 -0
- package/dist/util/util.js.map +1 -0
- package/package.json +234 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# {{projectName}}
|
|
2
|
+
|
|
3
|
+
TypeScript backend application built with AppKit.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install
|
|
9
|
+
npm run dev:api
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Your API will be available at: http://localhost:3000/api
|
|
13
|
+
|
|
14
|
+
## Scripts
|
|
15
|
+
|
|
16
|
+
- `npm run dev:api` - Development server with hot-reload
|
|
17
|
+
- `npm run build` - Build for production
|
|
18
|
+
- `npm run start:prod` - Start production server
|
|
19
|
+
|
|
20
|
+
## Adding Features
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Custom feature
|
|
24
|
+
npx appkit generate feature product
|
|
25
|
+
|
|
26
|
+
# User authentication
|
|
27
|
+
npx appkit generate feature user
|
|
28
|
+
|
|
29
|
+
# With database
|
|
30
|
+
npx appkit generate feature order --db
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Documentation
|
|
34
|
+
|
|
35
|
+
- [CLI Reference](docs/APPKIT_CLI.md)
|
|
36
|
+
- [LLM Guide](docs/APPKIT_LLM_GUIDE.md)
|
|
37
|
+
- [Code Standards](docs/APPKIT_COMMENTS_GUIDELINES.md)
|
|
38
|
+
|
|
39
|
+
Built with **AppKit** ⚡
|
|
File without changes
|
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
# AppKit CLI Documentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The AppKit CLI is a powerful command-line interface for creating production-ready TypeScript backend applications with Feature-Based Component Architecture (FBCA). It provides auto-discovery routing, complete authentication systems, secure environment configuration, database integration, and follows modern development best practices.
|
|
6
|
+
|
|
7
|
+
## Installation
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @bloomneo/appkit
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Create a new app
|
|
17
|
+
appkit generate app myproject
|
|
18
|
+
cd myproject
|
|
19
|
+
|
|
20
|
+
# Add authentication system
|
|
21
|
+
appkit generate feature user
|
|
22
|
+
|
|
23
|
+
# Add custom features
|
|
24
|
+
appkit generate feature product
|
|
25
|
+
appkit generate feature order
|
|
26
|
+
|
|
27
|
+
# Start development
|
|
28
|
+
npm run dev:api
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Commands Overview
|
|
32
|
+
|
|
33
|
+
| Command | Description | When to Use | Security Features |
|
|
34
|
+
|---------|-------------|-------------|-------------------|
|
|
35
|
+
| `generate app [name]` | Create complete backend app | Starting new project | Random secure keys, GitHub-safe |
|
|
36
|
+
| `generate feature <name>` | Add custom CRUD feature | Need basic API endpoints | Follows security patterns |
|
|
37
|
+
| `generate feature user` | Add authentication system | Need user management/auth | JWT, role-based access, 9-role hierarchy |
|
|
38
|
+
|
|
39
|
+
## Commands Reference
|
|
40
|
+
|
|
41
|
+
### 🚀 `appkit generate app [name]`
|
|
42
|
+
|
|
43
|
+
Creates a complete TypeScript backend application with modern architecture.
|
|
44
|
+
|
|
45
|
+
**Usage:**
|
|
46
|
+
```bash
|
|
47
|
+
# Create in current directory
|
|
48
|
+
appkit generate app
|
|
49
|
+
|
|
50
|
+
# Create in new directory
|
|
51
|
+
appkit generate app myproject
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**What it creates:**
|
|
55
|
+
```
|
|
56
|
+
myproject/
|
|
57
|
+
├── package.json # Dependencies & scripts
|
|
58
|
+
├── tsconfig.json # TypeScript configuration
|
|
59
|
+
├── .env # Secure environment variables
|
|
60
|
+
├── prisma/
|
|
61
|
+
│ └── schema.prisma # Database schema
|
|
62
|
+
└── src/api/
|
|
63
|
+
├── server.ts # Main server
|
|
64
|
+
├── lib/
|
|
65
|
+
│ └── api-router.ts # Auto-discovery router
|
|
66
|
+
└── features/
|
|
67
|
+
├── welcome/ # Default welcome feature
|
|
68
|
+
├── sample/ # Example CRUD feature
|
|
69
|
+
└── new/ # Example feature
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**✨ Features:**
|
|
73
|
+
- ✅ **Secure by default** - Random 44-char auth secrets, 26-char API keys
|
|
74
|
+
- ✅ **GitHub-safe** - No hardcoded credentials
|
|
75
|
+
- ✅ **TypeScript ready** - Full type safety with proper configuration
|
|
76
|
+
- ✅ **Auto-discovery** - Routes automatically discovered and mounted
|
|
77
|
+
- ✅ **Production-ready** - Environment separation, logging, error handling
|
|
78
|
+
- ✅ **Database ready** - Prisma integration with SQLite default
|
|
79
|
+
|
|
80
|
+
**Generated .env file:**
|
|
81
|
+
```bash
|
|
82
|
+
DATABASE_URL="file:./dev.db"
|
|
83
|
+
VOILA_FRONTEND_KEY="voila_abc123..." # 26 characters
|
|
84
|
+
VOILA_AUTH_SECRET="auth_xyz789..." # 44 characters
|
|
85
|
+
DEFAULT_USER_PASSWORD="pwd9x7k4m2" # 10 alphanumeric
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 🔧 `appkit generate feature <name>`
|
|
89
|
+
|
|
90
|
+
Creates a custom feature with complete CRUD operations.
|
|
91
|
+
|
|
92
|
+
**Usage:**
|
|
93
|
+
```bash
|
|
94
|
+
appkit generate feature product
|
|
95
|
+
appkit generate feature order
|
|
96
|
+
appkit generate feature blog
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**What it creates:**
|
|
100
|
+
```
|
|
101
|
+
src/api/features/product/
|
|
102
|
+
├── product.route.ts # Express routes with CRUD endpoints
|
|
103
|
+
├── product.service.ts # Business logic with validation
|
|
104
|
+
├── product.types.ts # TypeScript interfaces
|
|
105
|
+
├── product.model.ts # Database model
|
|
106
|
+
└── product.http # HTTP test file
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Generated endpoints:**
|
|
110
|
+
- `GET /api/product` - Get all records
|
|
111
|
+
- `POST /api/product` - Create new record
|
|
112
|
+
- `GET /api/product/:id` - Get record by ID
|
|
113
|
+
- `PUT /api/product/:id` - Update record
|
|
114
|
+
- `DELETE /api/product/:id` - Delete record
|
|
115
|
+
|
|
116
|
+
**When to use:**
|
|
117
|
+
- ✅ Need custom business logic
|
|
118
|
+
- ✅ Want specific data models
|
|
119
|
+
- ✅ Building domain-specific APIs
|
|
120
|
+
- ✅ Rapid prototyping
|
|
121
|
+
|
|
122
|
+
### 🔐 `appkit generate feature user`
|
|
123
|
+
|
|
124
|
+
Creates a complete authentication and user management system.
|
|
125
|
+
|
|
126
|
+
**Usage:**
|
|
127
|
+
```bash
|
|
128
|
+
appkit generate feature user
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**What it creates:**
|
|
132
|
+
```
|
|
133
|
+
src/api/features/user/
|
|
134
|
+
├── user.route.ts # Authentication routes
|
|
135
|
+
├── user.service.ts # Auth business logic
|
|
136
|
+
├── user.types.ts # User interfaces
|
|
137
|
+
├── user.model.ts # User database model
|
|
138
|
+
└── user.http # Complete test suite
|
|
139
|
+
|
|
140
|
+
prisma/seeding/
|
|
141
|
+
└── user.seed.js # Seed data for all roles
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**🔐 Authentication Features:**
|
|
145
|
+
- ✅ **JWT Authentication** - Secure token-based auth
|
|
146
|
+
- ✅ **9-Role Hierarchy** - user.basic → admin.system
|
|
147
|
+
- ✅ **Password Security** - bcrypt hashing, random generation
|
|
148
|
+
- ✅ **Role-based Access** - Route protection by role/level
|
|
149
|
+
- ✅ **Complete User Management** - CRUD for admin users
|
|
150
|
+
- ✅ **Password Reset** - Forgot/reset password flow
|
|
151
|
+
- ✅ **Account Management** - Profile updates, password changes
|
|
152
|
+
|
|
153
|
+
**Generated endpoints:**
|
|
154
|
+
```
|
|
155
|
+
# Authentication
|
|
156
|
+
POST /api/user/register # Create new user
|
|
157
|
+
POST /api/user/login # User login
|
|
158
|
+
POST /api/user/forgot-password # Request password reset
|
|
159
|
+
POST /api/user/reset-password # Reset with token
|
|
160
|
+
|
|
161
|
+
# Profile Management
|
|
162
|
+
GET /api/user/profile # Get user profile
|
|
163
|
+
PUT /api/user/profile # Update profile
|
|
164
|
+
POST /api/user/change-password # Change password
|
|
165
|
+
|
|
166
|
+
# Admin Only
|
|
167
|
+
GET /api/user/all # Get all users
|
|
168
|
+
GET /api/user/list # Get users (moderator+)
|
|
169
|
+
PUT /api/user/list/:id # Update user
|
|
170
|
+
DELETE /api/user/list/:id # Delete user
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**🛡️ Role Hierarchy:**
|
|
174
|
+
```
|
|
175
|
+
User Roles (Level 1-3):
|
|
176
|
+
├── user.basic # Basic user permissions
|
|
177
|
+
├── user.pro # Pro user features
|
|
178
|
+
└── user.max # Maximum user features
|
|
179
|
+
|
|
180
|
+
Moderator Roles (Level 4-6):
|
|
181
|
+
├── moderator.review # Can review content
|
|
182
|
+
├── moderator.approve # Can approve/reject
|
|
183
|
+
└── moderator.manage # Can manage users
|
|
184
|
+
|
|
185
|
+
Admin Roles (Level 7-9):
|
|
186
|
+
├── admin.tenant # Tenant administration
|
|
187
|
+
├── admin.org # Organization administration
|
|
188
|
+
└── admin.system # System administration
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**When to use:**
|
|
192
|
+
- ✅ Need user accounts and authentication
|
|
193
|
+
- ✅ Building multi-user applications
|
|
194
|
+
- ✅ Need role-based access control
|
|
195
|
+
- ✅ Want production-ready auth system
|
|
196
|
+
- ✅ Building SaaS or enterprise apps
|
|
197
|
+
|
|
198
|
+
## Decision Guide
|
|
199
|
+
|
|
200
|
+
### When to use `generate app`
|
|
201
|
+
- 🎯 **Starting a new project**
|
|
202
|
+
- 🎯 **Need complete backend foundation**
|
|
203
|
+
- 🎯 **Want security best practices built-in**
|
|
204
|
+
- 🎯 **Building production applications**
|
|
205
|
+
|
|
206
|
+
### When to use `generate feature <name>`
|
|
207
|
+
- 🎯 **Adding business-specific functionality**
|
|
208
|
+
- 🎯 **Need custom data models**
|
|
209
|
+
- 🎯 **Building domain APIs (products, orders, etc.)**
|
|
210
|
+
- 🎯 **Rapid prototyping**
|
|
211
|
+
|
|
212
|
+
### When to use `generate feature user`
|
|
213
|
+
- 🎯 **Need user authentication**
|
|
214
|
+
- 🎯 **Building multi-user applications**
|
|
215
|
+
- 🎯 **Need role-based permissions**
|
|
216
|
+
- 🎯 **Want enterprise-grade user management**
|
|
217
|
+
|
|
218
|
+
## Architecture
|
|
219
|
+
|
|
220
|
+
### Feature-Based Component Architecture (FBCA)
|
|
221
|
+
|
|
222
|
+
Each feature is self-contained and follows consistent patterns:
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
src/api/features/<feature>/
|
|
226
|
+
├── <feature>.route.ts # HTTP endpoints & middleware
|
|
227
|
+
├── <feature>.service.ts # Business logic & validation
|
|
228
|
+
├── <feature>.types.ts # TypeScript interfaces
|
|
229
|
+
├── <feature>.model.ts # Database schema
|
|
230
|
+
└── <feature>.http # API testing
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Auto-Discovery System
|
|
234
|
+
|
|
235
|
+
- 🔍 **Automatic route detection** - Scans `/features` directory
|
|
236
|
+
- 🚀 **Zero configuration** - Routes auto-mount at `/api/{feature}`
|
|
237
|
+
- 🔄 **Hot-reload friendly** - Changes reflected immediately
|
|
238
|
+
- 📋 **Discovery endpoint** - `GET /api` lists all features
|
|
239
|
+
|
|
240
|
+
### Security Architecture
|
|
241
|
+
|
|
242
|
+
**Environment Security:**
|
|
243
|
+
- 🔐 **Random key generation** - Unique per project
|
|
244
|
+
- 🚫 **No hardcoded secrets** - GitHub-safe repositories
|
|
245
|
+
- 🛡️ **Environment separation** - Dev/prod configurations
|
|
246
|
+
- 🔑 **Secure defaults** - Strong random passwords
|
|
247
|
+
|
|
248
|
+
**Authentication Security:**
|
|
249
|
+
- 🎫 **JWT tokens** - Stateless authentication
|
|
250
|
+
- 🔒 **Password hashing** - bcrypt with salt rounds
|
|
251
|
+
- 🛡️ **Role-based access** - Granular permissions
|
|
252
|
+
- 🔐 **Token validation** - Middleware protection
|
|
253
|
+
|
|
254
|
+
## Development Workflow
|
|
255
|
+
|
|
256
|
+
### 1. Project Setup
|
|
257
|
+
```bash
|
|
258
|
+
# Create project
|
|
259
|
+
appkit generate app myapp
|
|
260
|
+
cd myapp
|
|
261
|
+
|
|
262
|
+
# Install dependencies (auto-done)
|
|
263
|
+
npm install
|
|
264
|
+
|
|
265
|
+
# Start development
|
|
266
|
+
npm run dev:api
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### 2. Add Authentication
|
|
270
|
+
```bash
|
|
271
|
+
# Add complete auth system
|
|
272
|
+
appkit generate feature user
|
|
273
|
+
|
|
274
|
+
# Seed test users
|
|
275
|
+
node prisma/seeding/user.seed.js
|
|
276
|
+
|
|
277
|
+
# Test login
|
|
278
|
+
curl -X POST http://localhost:3000/api/user/login \
|
|
279
|
+
-H "Content-Type: application/json" \
|
|
280
|
+
-d '{"email":"admin.system@myapp.com","password":"YOUR_DEFAULT_PASSWORD"}'
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### 3. Add Custom Features
|
|
284
|
+
```bash
|
|
285
|
+
# Add business features
|
|
286
|
+
appkit generate feature product
|
|
287
|
+
appkit generate feature order
|
|
288
|
+
appkit generate feature customer
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### 4. Test & Deploy
|
|
292
|
+
```bash
|
|
293
|
+
# Run tests
|
|
294
|
+
npm test
|
|
295
|
+
|
|
296
|
+
# Build for production
|
|
297
|
+
npm run build
|
|
298
|
+
|
|
299
|
+
# Start production
|
|
300
|
+
npm run start:prod
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Environment Configuration
|
|
304
|
+
|
|
305
|
+
### Auto-Generated .env
|
|
306
|
+
```bash
|
|
307
|
+
# Server Configuration
|
|
308
|
+
PORT=3000
|
|
309
|
+
NODE_ENV=development
|
|
310
|
+
|
|
311
|
+
# Database Configuration
|
|
312
|
+
DATABASE_URL="file:./dev.db"
|
|
313
|
+
|
|
314
|
+
# Application Configuration
|
|
315
|
+
APP_NAME=myapp
|
|
316
|
+
API_VERSION=1.0.0
|
|
317
|
+
|
|
318
|
+
# Security (Auto-generated, GitHub-safe)
|
|
319
|
+
VOILA_FRONTEND_KEY=voila_abc123def456... # 26 chars
|
|
320
|
+
VOILA_AUTH_SECRET=auth_xyz789abc123... # 44 chars
|
|
321
|
+
DEFAULT_USER_PASSWORD=pwd9x7k4m2 # 10 chars
|
|
322
|
+
|
|
323
|
+
# Logging
|
|
324
|
+
LOG_LEVEL=info
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Production Environment
|
|
328
|
+
```bash
|
|
329
|
+
# Override for production
|
|
330
|
+
NODE_ENV=production
|
|
331
|
+
PORT=8080
|
|
332
|
+
DATABASE_URL="postgresql://user:pass@host:5432/db"
|
|
333
|
+
LOG_LEVEL=warn
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Available Scripts
|
|
337
|
+
|
|
338
|
+
| Script | Description | When to Use |
|
|
339
|
+
|--------|-------------|-------------|
|
|
340
|
+
| `npm run dev:api` | Development server with hot-reload | During development |
|
|
341
|
+
| `npm run build` | Build TypeScript to JavaScript | Before deployment |
|
|
342
|
+
| `npm run start:prod` | Start production server | Production deployment |
|
|
343
|
+
| `npm run start` | Start without build | Quick production start |
|
|
344
|
+
|
|
345
|
+
## Testing
|
|
346
|
+
|
|
347
|
+
### HTTP Test Files
|
|
348
|
+
|
|
349
|
+
Each feature includes a `.http` file for easy testing:
|
|
350
|
+
|
|
351
|
+
```http
|
|
352
|
+
### Test login
|
|
353
|
+
POST http://localhost:3000/api/user/login
|
|
354
|
+
Content-Type: application/json
|
|
355
|
+
|
|
356
|
+
{
|
|
357
|
+
"email": "admin.system@myapp.com",
|
|
358
|
+
"password": "YOUR_DEFAULT_PASSWORD"
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
### Test protected endpoint
|
|
362
|
+
GET http://localhost:3000/api/user/profile
|
|
363
|
+
Authorization: Bearer YOUR_JWT_TOKEN
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
### Integration Testing
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
# Test endpoints with curl
|
|
370
|
+
curl http://localhost:3000/health
|
|
371
|
+
curl http://localhost:3000/api
|
|
372
|
+
curl http://localhost:3000/api/user/test
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## AppKit Integration
|
|
376
|
+
|
|
377
|
+
### Database
|
|
378
|
+
```typescript
|
|
379
|
+
import { databaseClass } from '@bloomneo/appkit/database';
|
|
380
|
+
|
|
381
|
+
const db = await databaseClass.get();
|
|
382
|
+
const users = await db.user.findMany();
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
### Authentication
|
|
386
|
+
```typescript
|
|
387
|
+
import { authClass } from '@bloomneo/appkit/auth';
|
|
388
|
+
|
|
389
|
+
const auth = authClass.get();
|
|
390
|
+
const token = auth.generateLoginToken({ userId, role, level });
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Error Handling
|
|
394
|
+
```typescript
|
|
395
|
+
import { errorClass } from '@bloomneo/appkit/error';
|
|
396
|
+
|
|
397
|
+
const error = errorClass.get();
|
|
398
|
+
throw error.badRequest('Invalid input');
|
|
399
|
+
throw error.notFound('User not found');
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Logging
|
|
403
|
+
```typescript
|
|
404
|
+
import { loggerClass } from '@bloomneo/appkit/logger';
|
|
405
|
+
|
|
406
|
+
const logger = loggerClass.get('feature-name');
|
|
407
|
+
logger.info('Request processed', { userId });
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
## Best Practices
|
|
411
|
+
|
|
412
|
+
### Security
|
|
413
|
+
- ✅ **Use environment variables** for all secrets
|
|
414
|
+
- ✅ **Never commit .env files** to version control
|
|
415
|
+
- ✅ **Use role-based access control** for sensitive endpoints
|
|
416
|
+
- ✅ **Validate all inputs** in service layers
|
|
417
|
+
- ✅ **Use JWT tokens** for stateless authentication
|
|
418
|
+
|
|
419
|
+
### Code Organization
|
|
420
|
+
- ✅ **Follow FBCA patterns** - keep features self-contained
|
|
421
|
+
- ✅ **Use TypeScript interfaces** for type safety
|
|
422
|
+
- ✅ **Implement proper error handling** with AppKit error classes
|
|
423
|
+
- ✅ **Add comprehensive logging** for debugging
|
|
424
|
+
- ✅ **Write HTTP tests** for all endpoints
|
|
425
|
+
|
|
426
|
+
### Database
|
|
427
|
+
- ✅ **Use AppKit database class** for consistency
|
|
428
|
+
- ✅ **Include tenant_id fields** for multi-tenancy
|
|
429
|
+
- ✅ **Transform dates to ISO strings** in responses
|
|
430
|
+
- ✅ **Implement input validation** before database operations
|
|
431
|
+
|
|
432
|
+
## Troubleshooting
|
|
433
|
+
|
|
434
|
+
### Common Issues
|
|
435
|
+
|
|
436
|
+
**Feature not discovered:**
|
|
437
|
+
- ✅ Check file naming: `{feature}.route.ts`
|
|
438
|
+
- ✅ Ensure default export: `export default router`
|
|
439
|
+
- ✅ Verify directory structure: `features/{feature}/`
|
|
440
|
+
|
|
441
|
+
**Authentication errors:**
|
|
442
|
+
- ✅ Check `VOILA_AUTH_SECRET` in .env
|
|
443
|
+
- ✅ Verify password in seeding
|
|
444
|
+
- ✅ Test with correct user credentials
|
|
445
|
+
|
|
446
|
+
**Database connection issues:**
|
|
447
|
+
- ✅ Verify `DATABASE_URL` in .env
|
|
448
|
+
- ✅ Run `npx prisma generate`
|
|
449
|
+
- ✅ Run `npx prisma db push`
|
|
450
|
+
|
|
451
|
+
**TypeScript compilation errors:**
|
|
452
|
+
- ✅ Check import paths use `.js` extensions
|
|
453
|
+
- ✅ Verify `moduleResolution: "bundler"` in tsconfig
|
|
454
|
+
- ✅ Ensure proper AppKit module imports
|
|
455
|
+
|
|
456
|
+
## Examples
|
|
457
|
+
|
|
458
|
+
### Complete User Management Flow
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
# 1. Create app with auth
|
|
462
|
+
appkit generate app userapp
|
|
463
|
+
cd userapp
|
|
464
|
+
appkit generate feature user
|
|
465
|
+
|
|
466
|
+
# 2. Seed test users
|
|
467
|
+
node prisma/seeding/user.seed.js
|
|
468
|
+
|
|
469
|
+
# 3. Test authentication
|
|
470
|
+
curl -X POST http://localhost:3000/api/user/login \
|
|
471
|
+
-H "Content-Type: application/json" \
|
|
472
|
+
-d '{"email":"admin.system@userapp.com","password":"YOUR_DEFAULT_PASSWORD"}'
|
|
473
|
+
|
|
474
|
+
# 4. Use JWT token for protected endpoints
|
|
475
|
+
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
|
476
|
+
http://localhost:3000/api/user/profile
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
### E-commerce API Example
|
|
480
|
+
|
|
481
|
+
```bash
|
|
482
|
+
# Create e-commerce backend
|
|
483
|
+
appkit generate app shopapi
|
|
484
|
+
cd shopapi
|
|
485
|
+
|
|
486
|
+
# Add authentication
|
|
487
|
+
appkit generate feature user
|
|
488
|
+
|
|
489
|
+
# Add business features
|
|
490
|
+
appkit generate feature product
|
|
491
|
+
appkit generate feature order
|
|
492
|
+
appkit generate feature customer
|
|
493
|
+
appkit generate feature category
|
|
494
|
+
|
|
495
|
+
# Result: Complete e-commerce API with auth
|
|
496
|
+
# GET /api/user/* - User management
|
|
497
|
+
# GET /api/product/* - Product catalog
|
|
498
|
+
# GET /api/order/* - Order management
|
|
499
|
+
# GET /api/customer/* - Customer data
|
|
500
|
+
# GET /api/category/* - Product categories
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
**AppKit CLI - Production-ready backend applications in minutes, not hours.** 🚀
|
|
506
|
+
|
|
507
|
+
**Generated with AppKit CLI v3.0 - Enhanced with Authentication, Security, and GitHub-safe Repositories**
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# AppKit Comment Standards
|
|
2
|
+
|
|
3
|
+
Documentation guidelines for AppKit backend applications optimized for developers and AI systems.
|
|
4
|
+
|
|
5
|
+
## Template
|
|
6
|
+
|
|
7
|
+
**File Header:**
|
|
8
|
+
```typescript
|
|
9
|
+
/**
|
|
10
|
+
* Brief description
|
|
11
|
+
* @module @bloomneo/package/module
|
|
12
|
+
* @file src/path/file.ts
|
|
13
|
+
*
|
|
14
|
+
* @llm-rule WHEN: Use case trigger
|
|
15
|
+
* @llm-rule AVOID: Major pitfalls
|
|
16
|
+
* @llm-rule NOTE: Critical context (optional)
|
|
17
|
+
*/
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Function:**
|
|
21
|
+
```typescript
|
|
22
|
+
/**
|
|
23
|
+
* Function description
|
|
24
|
+
* @llm-rule WHEN: Specific use case
|
|
25
|
+
* @llm-rule AVOID: Common mistakes
|
|
26
|
+
* @llm-rule NOTE: Non-obvious behavior (optional)
|
|
27
|
+
*/
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
**Categories:**
|
|
33
|
+
- **WHEN** - Trigger conditions
|
|
34
|
+
- **AVOID** - Breaking mistakes
|
|
35
|
+
- **NOTE** - Critical context (optional)
|
|
36
|
+
|
|
37
|
+
**Guidelines:**
|
|
38
|
+
- Maximum 3 rules per item
|
|
39
|
+
- One line per rule
|
|
40
|
+
- Action-oriented language
|
|
41
|
+
- Specific use cases vs common pitfalls
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
44
|
+
|
|
45
|
+
**Good:**
|
|
46
|
+
```typescript
|
|
47
|
+
@llm-rule WHEN: Building apps with user roles and permissions
|
|
48
|
+
@llm-rule AVOID: Simple login apps - adds unnecessary complexity
|
|
49
|
+
|
|
50
|
+
@llm-rule WHEN: Storing user passwords
|
|
51
|
+
@llm-rule AVOID: Plain text passwords - security vulnerability
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Avoid:**
|
|
55
|
+
```typescript
|
|
56
|
+
@llm-rule WHEN: Need to call this function
|
|
57
|
+
@llm-rule PURPOSE: Returns user data
|
|
58
|
+
@llm-rule USAGE: This function should be used when...
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Standard for all AppKit backend applications - ensures developer-friendly and AI-ready code.**
|