lapeh 2.2.7 → 2.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/{api-testing-sepuluh → api-testing-enambelas}/package-lock.json +22 -34
- package/{api-testing-sepuluh → api-testing-enambelas}/package.json +12 -9
- package/{api-testing-sepuluh → api-testing-enambelas}/tsconfig.json +5 -1
- package/api-testing-tujuhbelas/.env.example +19 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/.env.example +19 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/ARCHITECTURE_GUIDE.md +73 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/CHANGELOG.md +77 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/CHEATSHEET.md +94 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/CLI.md +106 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/CONTRIBUTING.md +105 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/DEPLOYMENT.md +122 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/FAQ.md +81 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/FEATURES.md +165 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/GETTING_STARTED.md +108 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/INTRODUCTION.md +60 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/PACKAGES.md +66 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/PERFORMANCE.md +91 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/ROADMAP.md +93 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/SECURITY.md +93 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/STRUCTURE.md +90 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/doc/TUTORIAL.md +192 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/docker-compose.yml +24 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/eslint.config.mjs +26 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/framework.md +168 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/nodemon.json +6 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/package.json +106 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/prisma/base.prisma.template +7 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/prisma/schema.prisma +183 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/prisma/seed.ts +411 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/prisma.config.ts +15 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/readme.md +414 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/check-update.js +92 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/compile-schema.js +29 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/config-clear.js +45 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/generate-jwt-secret.js +38 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/init-project.js +178 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-controller.js +205 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-model.js +42 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-module.js +158 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/scripts/verify-rbac-functional.js +187 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/authController.ts +469 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/petController.ts +194 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/rbacController.ts +478 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/models/core.prisma +163 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/models/pets.prisma +9 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/auth.ts +74 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/index.ts +10 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/pets.ts +13 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/rbac.ts +42 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/storage/logs/.gitkeep +0 -0
- package/api-testing-tujuhbelas/api-testing-enambelas/tsconfig.json +43 -0
- package/api-testing-tujuhbelas/doc/ARCHITECTURE_GUIDE.md +73 -0
- package/api-testing-tujuhbelas/doc/CHANGELOG.md +77 -0
- package/api-testing-tujuhbelas/doc/CHEATSHEET.md +94 -0
- package/api-testing-tujuhbelas/doc/CLI.md +106 -0
- package/api-testing-tujuhbelas/doc/CONTRIBUTING.md +105 -0
- package/api-testing-tujuhbelas/doc/DEPLOYMENT.md +122 -0
- package/api-testing-tujuhbelas/doc/FAQ.md +81 -0
- package/api-testing-tujuhbelas/doc/FEATURES.md +165 -0
- package/api-testing-tujuhbelas/doc/GETTING_STARTED.md +108 -0
- package/api-testing-tujuhbelas/doc/INTRODUCTION.md +60 -0
- package/api-testing-tujuhbelas/doc/PACKAGES.md +66 -0
- package/api-testing-tujuhbelas/doc/PERFORMANCE.md +91 -0
- package/api-testing-tujuhbelas/doc/ROADMAP.md +93 -0
- package/api-testing-tujuhbelas/doc/SECURITY.md +93 -0
- package/api-testing-tujuhbelas/doc/STRUCTURE.md +90 -0
- package/api-testing-tujuhbelas/doc/TUTORIAL.md +192 -0
- package/api-testing-tujuhbelas/docker-compose.yml +24 -0
- package/api-testing-tujuhbelas/eslint.config.mjs +26 -0
- package/api-testing-tujuhbelas/framework.md +168 -0
- package/api-testing-tujuhbelas/nodemon.json +6 -0
- package/api-testing-tujuhbelas/package-lock.json +5527 -0
- package/api-testing-tujuhbelas/package.json +106 -0
- package/api-testing-tujuhbelas/prisma/base.prisma.template +7 -0
- package/api-testing-tujuhbelas/prisma/migrations/20251227043210_init_setup/migration.sql +248 -0
- package/api-testing-tujuhbelas/prisma/migrations/migration_lock.toml +3 -0
- package/api-testing-tujuhbelas/prisma/schema.prisma +183 -0
- package/api-testing-tujuhbelas/prisma/seed.ts +411 -0
- package/api-testing-tujuhbelas/prisma.config.ts +15 -0
- package/api-testing-tujuhbelas/readme.md +414 -0
- package/api-testing-tujuhbelas/scripts/check-update.js +92 -0
- package/api-testing-tujuhbelas/scripts/compile-schema.js +29 -0
- package/api-testing-tujuhbelas/scripts/config-clear.js +45 -0
- package/api-testing-tujuhbelas/scripts/generate-jwt-secret.js +38 -0
- package/api-testing-tujuhbelas/scripts/init-project.js +178 -0
- package/api-testing-tujuhbelas/scripts/make-controller.js +205 -0
- package/api-testing-tujuhbelas/scripts/make-model.js +42 -0
- package/api-testing-tujuhbelas/scripts/make-module.js +158 -0
- package/api-testing-tujuhbelas/scripts/verify-rbac-functional.js +187 -0
- package/api-testing-tujuhbelas/src/controllers/authController.ts +469 -0
- package/api-testing-tujuhbelas/src/controllers/petController.ts +194 -0
- package/api-testing-tujuhbelas/src/controllers/rbacController.ts +478 -0
- package/api-testing-tujuhbelas/src/models/core.prisma +163 -0
- package/api-testing-tujuhbelas/src/models/pets.prisma +9 -0
- package/api-testing-tujuhbelas/src/routes/auth.ts +74 -0
- package/api-testing-tujuhbelas/src/routes/index.ts +10 -0
- package/api-testing-tujuhbelas/src/routes/pets.ts +13 -0
- package/api-testing-tujuhbelas/src/routes/rbac.ts +42 -0
- package/api-testing-tujuhbelas/storage/logs/.gitkeep +0 -0
- package/api-testing-tujuhbelas/tsconfig.json +43 -0
- package/bin/index.js +182 -13
- package/package.json +6 -6
- /package/{api-testing-sepuluh → api-testing-enambelas}/.env.example +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/ARCHITECTURE_GUIDE.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CHANGELOG.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CHEATSHEET.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CLI.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CONTRIBUTING.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/DEPLOYMENT.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/FAQ.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/FEATURES.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/GETTING_STARTED.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/INTRODUCTION.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/PACKAGES.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/PERFORMANCE.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/ROADMAP.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/SECURITY.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/STRUCTURE.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/doc/TUTORIAL.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/docker-compose.yml +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/eslint.config.mjs +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/framework.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/nodemon.json +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/base.prisma.template +0 -0
- /package/{api-testing-sepuluh/prisma/migrations/20251227034737_init_setup → api-testing-enambelas/prisma/migrations/20251227042956_init_setup}/migration.sql +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/migrations/migration_lock.toml +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/schema.prisma +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/seed.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/prisma.config.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/readme.md +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/check-update.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/compile-schema.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/config-clear.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/generate-jwt-secret.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/init-project.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-controller.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-model.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-module.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/verify-rbac-functional.js +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/authController.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/petController.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/rbacController.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/models/core.prisma +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/models/pets.prisma +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/auth.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/index.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/pets.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/rbac.ts +0 -0
- /package/{api-testing-sepuluh → api-testing-enambelas}/storage/logs/.gitkeep +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Lapeh Framework
|
|
2
|
+
|
|
3
|
+
## Quick Start
|
|
4
|
+
|
|
5
|
+
Untuk memulai project ini (Setup awal):
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm i
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm run first
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Perintah di atas akan secara otomatis melakukan:
|
|
16
|
+
|
|
17
|
+
1. Copy `.env.example` ke `.env`
|
|
18
|
+
2. Install dependencies (`npm install`)
|
|
19
|
+
3. Generate JWT Secret baru di `.env`
|
|
20
|
+
4. Setup database (Migrate)
|
|
21
|
+
5. Menjalankan Database Seeder
|
|
22
|
+
|
|
23
|
+
Setelah selesai, Anda bisa langsung menjalankan project:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm run dev
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Akun Default
|
|
30
|
+
|
|
31
|
+
Jika seeder dijalankan (via `npm run first` atau `npm run db:seed`), gunakan akun berikut:
|
|
32
|
+
|
|
33
|
+
- **Super Admin**: `sa@sa.com` / `string`
|
|
34
|
+
- **Admin**: `a@a.com` / `string`
|
|
35
|
+
- **User**: `u@u.com` / `string`
|
|
36
|
+
|
|
37
|
+
## Code Standards & Best Practices (Baru)
|
|
38
|
+
|
|
39
|
+
### 1. Import Path Aliases
|
|
40
|
+
Gunakan alias `@/` untuk mengimpor module dari folder `src/`. Hindari relative path yang panjang seperti `../../utils/response`.
|
|
41
|
+
|
|
42
|
+
**Contoh:**
|
|
43
|
+
```typescript
|
|
44
|
+
// ✅ Benar (Recommended)
|
|
45
|
+
import { prisma } from "@/core/database";
|
|
46
|
+
import { sendSuccess } from "@/utils/response";
|
|
47
|
+
|
|
48
|
+
// ❌ Salah (Legacy)
|
|
49
|
+
import { prisma } from "../core/database";
|
|
50
|
+
import { sendSuccess } from "../../utils/response";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Strict Linting (Dead Code Elimination)
|
|
54
|
+
Framework ini menerapkan aturan linter yang ketat untuk menjaga kebersihan kode. Variabel, parameter, atau import yang tidak digunakan akan menyebabkan error.
|
|
55
|
+
|
|
56
|
+
- **Variabel tidak terpakai**: Hapus atau beri prefix `_` (underscore).
|
|
57
|
+
```typescript
|
|
58
|
+
// ✅ Benar
|
|
59
|
+
const _unusedVariable = 123;
|
|
60
|
+
function example(_req: Request, res: Response) { ... }
|
|
61
|
+
|
|
62
|
+
// ❌ Error
|
|
63
|
+
const unusedVariable = 123;
|
|
64
|
+
function example(req: Request, res: Response) { ... } // jika req tidak dipakai
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 3. High Performance Response (Fastify-Style)
|
|
68
|
+
Untuk endpoint dengan throughput tinggi (GET lists, data besar), gunakan `sendFastSuccess` dengan JSON Schema serializer. Ini 2-3x lebih cepat dari `res.json` standar Express.
|
|
69
|
+
|
|
70
|
+
**Langkah-langkah:**
|
|
71
|
+
|
|
72
|
+
1. **Definisikan Schema** (sesuai field Prisma):
|
|
73
|
+
```typescript
|
|
74
|
+
const userSchema = {
|
|
75
|
+
type: "object",
|
|
76
|
+
properties: {
|
|
77
|
+
id: { type: "string" }, // BigInt otomatis dicovert ke string
|
|
78
|
+
name: { type: "string" },
|
|
79
|
+
email: { type: "string" }
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
2. **Buat Serializer**:
|
|
85
|
+
```typescript
|
|
86
|
+
import { getSerializer, createResponseSchema } from "@/core/serializer";
|
|
87
|
+
|
|
88
|
+
const userSerializer = getSerializer("user-detail", createResponseSchema(userSchema));
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
3. **Gunakan di Controller**:
|
|
92
|
+
```typescript
|
|
93
|
+
import { sendFastSuccess } from "@/utils/response";
|
|
94
|
+
|
|
95
|
+
export async function getUser(req, res) {
|
|
96
|
+
const user = await prisma.user.findFirst();
|
|
97
|
+
sendFastSuccess(res, 200, userSerializer, {
|
|
98
|
+
status: "success",
|
|
99
|
+
message: "User found",
|
|
100
|
+
data: user
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Database Workflow (Prisma)
|
|
106
|
+
|
|
107
|
+
Framework ini menggunakan **Prisma ORM** dengan struktur schema yang modular (dipecah per file). Berikut adalah panduan lengkap dari Development hingga Deployment.
|
|
108
|
+
|
|
109
|
+
### 1. Development (Lokal)
|
|
110
|
+
|
|
111
|
+
Saat mengembangkan aplikasi di local environment:
|
|
112
|
+
|
|
113
|
+
**a. Mengupdate Schema Database**
|
|
114
|
+
Jika Anda mengubah file schema di `src/models/*.prisma` atau konfigurasi di `prisma/base.prisma.template`:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
npm run prisma:migrate
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
_Perintah ini akan menggabungkan semua file schema, membuat file migrasi baru, menerapkan ke database lokal, dan men-generate ulang Prisma Client._
|
|
121
|
+
|
|
122
|
+
**b. Melihat/Edit Data (GUI)**
|
|
123
|
+
Untuk membuka dashboard visual database:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm run db:studio
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**c. Mengisi Data Awal (Seeding)**
|
|
130
|
+
Jika Anda butuh data dummy atau data awal (seperti roles/permissions):
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm run db:seed
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**d. Reset Database Total**
|
|
137
|
+
Jika database berantakan dan ingin mengulang dari awal (HATI-HATI: Menghapus semua data):
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
npm run db:reset
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
_Perintah ini akan menghapus database, membuat ulang schema dari awal, dan otomatis menjalankan seeder._
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
### 2. Deployment (Production)
|
|
148
|
+
|
|
149
|
+
Saat deploy ke server production:
|
|
150
|
+
|
|
151
|
+
**a. Setup Awal**
|
|
152
|
+
Pastikan `.env` di production sudah disetup dengan benar (DATABASE_URL, dll).
|
|
153
|
+
|
|
154
|
+
**b. Menerapkan Migrasi**
|
|
155
|
+
Jangan gunakan `migrate dev` di production. Gunakan perintah ini:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm run prisma:deploy
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
_Perintah ini hanya akan menerapkan file migrasi yang sudah ada ke database production tanpa mereset data atau meminta konfirmasi interaktif._
|
|
162
|
+
|
|
163
|
+
**c. Generate Client (Opsional)**
|
|
164
|
+
Biasanya dilakukan otomatis saat `npm install` (karena `postinstall`), tapi jika perlu manual:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
npm run prisma:generate
|
|
168
|
+
```
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "api-testing-enambelas",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Generated by lapeh",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"homepage": "https://github.com/robyajo/lapeh#readme",
|
|
7
|
+
"bugs": {
|
|
8
|
+
"url": "https://github.com/robyajo/lapeh/issues"
|
|
9
|
+
},
|
|
10
|
+
"types": "dist/src/index.d.ts",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"dev": "lapeh dev",
|
|
13
|
+
"first": "node scripts/init-project.js",
|
|
14
|
+
"prebuild": "npm run prisma:generate",
|
|
15
|
+
"build": "lapeh build",
|
|
16
|
+
"prestart": "npm run prisma:generate",
|
|
17
|
+
"start": "lapeh start",
|
|
18
|
+
"prestart:prod": "npm run prisma:generate",
|
|
19
|
+
"start:prod": "lapeh start",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"lint": "eslint .",
|
|
22
|
+
"lint:fix": "eslint . --fix",
|
|
23
|
+
"prisma:generate": "node scripts/compile-schema.js && prisma generate",
|
|
24
|
+
"prisma:migrate": "node scripts/compile-schema.js && prisma migrate dev",
|
|
25
|
+
"prisma:deploy": "node scripts/compile-schema.js && prisma migrate deploy",
|
|
26
|
+
"db:seed": "prisma db seed",
|
|
27
|
+
"db:reset": "prisma migrate reset",
|
|
28
|
+
"db:rs": "prisma migrate reset --force && prisma db seed",
|
|
29
|
+
"db:studio": "prisma studio",
|
|
30
|
+
"generate:jwt": "node scripts/generate-jwt-secret.js",
|
|
31
|
+
"make:module": "node scripts/make-module.js",
|
|
32
|
+
"make:model": "node scripts/make-model.js",
|
|
33
|
+
"make:controller": "node scripts/make-controller.js",
|
|
34
|
+
"config:clear": "node scripts/config-clear.js",
|
|
35
|
+
"postinstall": "node scripts/compile-schema.js && prisma generate"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"nodejs-framework",
|
|
39
|
+
"typescript-framework",
|
|
40
|
+
"express-framework",
|
|
41
|
+
"backend-framework",
|
|
42
|
+
"rest-api",
|
|
43
|
+
"prisma-orm",
|
|
44
|
+
"production-ready",
|
|
45
|
+
"api-generator",
|
|
46
|
+
"boilerplate",
|
|
47
|
+
"starter-kit",
|
|
48
|
+
"mvc",
|
|
49
|
+
"cli",
|
|
50
|
+
"lapeh",
|
|
51
|
+
"roby-ajo",
|
|
52
|
+
"ajo-roby",
|
|
53
|
+
"roby-karti-s",
|
|
54
|
+
"lapeh"
|
|
55
|
+
],
|
|
56
|
+
"author": "Roby Karti S <robyfull.dev@gmail.com>",
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"type": "commonjs",
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@prisma/adapter-mariadb": "7.2.0",
|
|
61
|
+
"@prisma/adapter-pg": "7.2.0",
|
|
62
|
+
"@prisma/client": "7.2.0",
|
|
63
|
+
"bcryptjs": "3.0.3",
|
|
64
|
+
"compression": "^1.8.1",
|
|
65
|
+
"cors": "2.8.5",
|
|
66
|
+
"dotenv": "17.2.3",
|
|
67
|
+
"express": "5.2.1",
|
|
68
|
+
"express-rate-limit": "8.2.1",
|
|
69
|
+
"fast-json-stringify": "^6.1.1",
|
|
70
|
+
"helmet": "8.1.0",
|
|
71
|
+
"ioredis": "5.8.2",
|
|
72
|
+
"ioredis-mock": "^8.13.1",
|
|
73
|
+
"jsonwebtoken": "9.0.3",
|
|
74
|
+
"multer": "2.0.2",
|
|
75
|
+
"pg": "8.16.3",
|
|
76
|
+
"slugify": "1.6.6",
|
|
77
|
+
"socket.io": "4.8.3",
|
|
78
|
+
"ts-node": "^10.9.2",
|
|
79
|
+
"tsconfig-paths": "^4.2.0",
|
|
80
|
+
"typescript": "^5.9.3",
|
|
81
|
+
"uuid": "13.0.0",
|
|
82
|
+
"winston": "^3.19.0",
|
|
83
|
+
"winston-daily-rotate-file": "^5.0.0",
|
|
84
|
+
"zod": "3.23.8",
|
|
85
|
+
"prisma": "7.2.0",
|
|
86
|
+
"@types/bcryptjs": "2.4.6",
|
|
87
|
+
"@types/compression": "^1.8.1",
|
|
88
|
+
"@types/cors": "2.8.19",
|
|
89
|
+
"@types/express": "5.0.6",
|
|
90
|
+
"@types/jsonwebtoken": "9.0.10",
|
|
91
|
+
"@types/multer": "^2.0.0",
|
|
92
|
+
"@types/node": "25.0.3",
|
|
93
|
+
"@types/pg": "8.16.0",
|
|
94
|
+
"@types/uuid": "10.0.0",
|
|
95
|
+
"lapeh": "file:../"
|
|
96
|
+
},
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"@eslint/js": "^9.39.2",
|
|
99
|
+
"eslint": "^9.39.2",
|
|
100
|
+
"globals": "^16.5.0",
|
|
101
|
+
"typescript-eslint": "^8.50.1",
|
|
102
|
+
"prisma": "7.2.0",
|
|
103
|
+
"@types/express": "^5.0.0",
|
|
104
|
+
"@types/compression": "^1.7.5"
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
datasource db {
|
|
6
|
+
provider = "postgresql"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
model cache {
|
|
11
|
+
key String @id
|
|
12
|
+
value String
|
|
13
|
+
expiration Int
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
model cache_locks {
|
|
17
|
+
key String @id
|
|
18
|
+
owner String
|
|
19
|
+
expiration Int
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
model failed_jobs {
|
|
23
|
+
id BigInt @id @default(autoincrement())
|
|
24
|
+
uuid String @unique
|
|
25
|
+
connection String
|
|
26
|
+
queue String
|
|
27
|
+
payload String
|
|
28
|
+
exception String
|
|
29
|
+
failed_at DateTime @default(now())
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
model job_batches {
|
|
33
|
+
id String @id
|
|
34
|
+
name String
|
|
35
|
+
total_jobs Int
|
|
36
|
+
pending_jobs Int
|
|
37
|
+
failed_jobs Int
|
|
38
|
+
failed_job_ids String
|
|
39
|
+
options String?
|
|
40
|
+
cancelled_at Int?
|
|
41
|
+
created_at Int
|
|
42
|
+
finished_at Int?
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
model jobs {
|
|
46
|
+
id BigInt @id @default(autoincrement())
|
|
47
|
+
queue String
|
|
48
|
+
payload String
|
|
49
|
+
attempts Int
|
|
50
|
+
reserved_at Int?
|
|
51
|
+
available_at Int
|
|
52
|
+
created_at Int
|
|
53
|
+
|
|
54
|
+
@@index([queue])
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
model migrations {
|
|
58
|
+
id Int @id @default(autoincrement())
|
|
59
|
+
migration String
|
|
60
|
+
batch Int
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
model password_reset_tokens {
|
|
64
|
+
email String @id
|
|
65
|
+
token String
|
|
66
|
+
created_at DateTime?
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
model personal_access_tokens {
|
|
70
|
+
id BigInt @id @default(autoincrement())
|
|
71
|
+
tokenable_type String
|
|
72
|
+
tokenable_id BigInt
|
|
73
|
+
name String
|
|
74
|
+
token String @unique
|
|
75
|
+
abilities String?
|
|
76
|
+
last_used_at DateTime?
|
|
77
|
+
expires_at DateTime?
|
|
78
|
+
created_at DateTime?
|
|
79
|
+
updated_at DateTime?
|
|
80
|
+
|
|
81
|
+
@@index([expires_at])
|
|
82
|
+
@@index([tokenable_type, tokenable_id])
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
model sessions {
|
|
86
|
+
id String @id
|
|
87
|
+
user_id BigInt?
|
|
88
|
+
ip_address String?
|
|
89
|
+
user_agent String?
|
|
90
|
+
payload String
|
|
91
|
+
last_activity Int
|
|
92
|
+
|
|
93
|
+
@@index([last_activity])
|
|
94
|
+
@@index([user_id])
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
model users {
|
|
98
|
+
id BigInt @id @default(autoincrement())
|
|
99
|
+
uuid String @unique
|
|
100
|
+
name String
|
|
101
|
+
email String @unique
|
|
102
|
+
avatar String?
|
|
103
|
+
avatar_url String?
|
|
104
|
+
email_verified_at DateTime?
|
|
105
|
+
password String
|
|
106
|
+
remember_token String?
|
|
107
|
+
created_at DateTime?
|
|
108
|
+
updated_at DateTime?
|
|
109
|
+
|
|
110
|
+
user_roles user_roles[]
|
|
111
|
+
user_permissions user_permissions[]
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
model roles {
|
|
115
|
+
id BigInt @id @default(autoincrement())
|
|
116
|
+
name String
|
|
117
|
+
slug String @unique
|
|
118
|
+
description String?
|
|
119
|
+
created_at DateTime?
|
|
120
|
+
updated_at DateTime?
|
|
121
|
+
|
|
122
|
+
user_roles user_roles[]
|
|
123
|
+
role_permissions role_permissions[]
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
model permissions {
|
|
127
|
+
id BigInt @id @default(autoincrement())
|
|
128
|
+
name String
|
|
129
|
+
slug String @unique
|
|
130
|
+
description String?
|
|
131
|
+
created_at DateTime?
|
|
132
|
+
updated_at DateTime?
|
|
133
|
+
|
|
134
|
+
role_permissions role_permissions[]
|
|
135
|
+
user_permissions user_permissions[]
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
model user_roles {
|
|
139
|
+
id BigInt @id @default(autoincrement())
|
|
140
|
+
user_id BigInt
|
|
141
|
+
role_id BigInt
|
|
142
|
+
created_at DateTime?
|
|
143
|
+
|
|
144
|
+
user users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
145
|
+
role roles @relation(fields: [role_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
146
|
+
|
|
147
|
+
@@unique([user_id, role_id])
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
model role_permissions {
|
|
151
|
+
id BigInt @id @default(autoincrement())
|
|
152
|
+
role_id BigInt
|
|
153
|
+
permission_id BigInt
|
|
154
|
+
created_at DateTime?
|
|
155
|
+
|
|
156
|
+
role roles @relation(fields: [role_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
157
|
+
permission permissions @relation(fields: [permission_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
158
|
+
|
|
159
|
+
@@unique([role_id, permission_id])
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
model user_permissions {
|
|
163
|
+
id BigInt @id @default(autoincrement())
|
|
164
|
+
user_id BigInt
|
|
165
|
+
permission_id BigInt
|
|
166
|
+
created_at DateTime?
|
|
167
|
+
|
|
168
|
+
user users @relation(fields: [user_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
169
|
+
permission permissions @relation(fields: [permission_id], references: [id], onDelete: Cascade, onUpdate: NoAction)
|
|
170
|
+
|
|
171
|
+
@@unique([user_id, permission_id])
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
model pets {
|
|
177
|
+
id BigInt @id @default(autoincrement())
|
|
178
|
+
name String
|
|
179
|
+
species String
|
|
180
|
+
age Int
|
|
181
|
+
created_at DateTime?
|
|
182
|
+
updated_at DateTime?
|
|
183
|
+
}
|