create-craftjs 1.0.4 → 1.0.5
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 +137 -137
- package/bin/index.js +158 -158
- package/package.json +24 -24
- package/template/Dockerfile +57 -12
- package/template/babel.config.json +3 -3
- package/template/craft/commands/build.js +16 -15
- package/template/craft/commands/db-fresh.js +22 -22
- package/template/craft/commands/db-generate.js +23 -23
- package/template/craft/commands/db-migrate.js +22 -22
- package/template/craft/commands/dev.js +16 -16
- package/template/craft/commands/key-generate.js +41 -41
- package/template/craft/commands/make-apidocs.js +121 -121
- package/template/craft/commands/make-command.js +38 -38
- package/template/craft/commands/make-controller.js +95 -95
- package/template/craft/commands/make-dto.js +39 -39
- package/template/craft/commands/make-middleware.js +46 -46
- package/template/craft/commands/make-repository.js +36 -36
- package/template/craft/commands/make-route.js +92 -92
- package/template/craft/commands/make-service.js +39 -39
- package/template/craft/commands/make-test.js +48 -48
- package/template/craft/commands/make-utils.js +30 -30
- package/template/craft/commands/make-validation.js +42 -42
- package/template/craft/commands/make-view.js +42 -42
- package/template/craft/commands/start.js +29 -29
- package/template/craft/commands/test.js +20 -20
- package/template/craft.js +256 -256
- package/template/docker-compose.yml +8 -0
- package/template/nodemon.json +6 -6
- package/template/package-lock.json +8877 -8877
- package/template/package.json +84 -84
- package/template/prisma/schema.prisma +22 -22
- package/template/prisma/seed.ts +29 -29
- package/template/src/apidocs/auth-docs.ts +314 -314
- package/template/src/apidocs/users-docs.ts +240 -240
- package/template/src/config/cloudinary.ts +21 -21
- package/template/src/config/database.ts +90 -90
- package/template/src/config/env.ts +67 -67
- package/template/src/config/logger.ts +139 -139
- package/template/src/config/nodemailer.ts +23 -23
- package/template/src/config/web.ts +47 -47
- package/template/src/controllers/auth-controller.ts +88 -88
- package/template/src/controllers/user-controller.ts +79 -79
- package/template/src/dtos/list-dto.ts +12 -12
- package/template/src/dtos/user-dto.ts +57 -57
- package/template/src/main.ts +28 -28
- package/template/src/middleware/auth-middleware.ts +44 -44
- package/template/src/middleware/error-middleware.ts +27 -27
- package/template/src/middleware/http-logger-middleware.ts +31 -31
- package/template/src/repositories/user-repository.ts +75 -75
- package/template/src/routes/auth-route.ts +20 -20
- package/template/src/routes/main-route.ts +25 -25
- package/template/src/routes/user-route.ts +35 -35
- package/template/src/services/auth-service.ts +162 -162
- package/template/src/services/user-service.ts +102 -102
- package/template/src/types/type-request.ts +6 -6
- package/template/src/utils/async-handler.ts +9 -9
- package/template/src/utils/response-error.ts +10 -10
- package/template/src/utils/response.ts +60 -60
- package/template/src/utils/swagger.ts +135 -135
- package/template/src/utils/validation.ts +7 -7
- package/template/src/validations/user-validation.ts +127 -127
- package/template/src/views/index.ejs +6 -6
- package/template/src/views/layouts/main.ejs +14 -14
- package/template/src/views/partials/header.ejs +3 -3
- package/template/test/user.test.ts +16 -16
- package/template/tsconfig.json +13 -13
- package/template/.dockerignore +0 -4
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
import express from "express";
|
|
2
|
-
import fileUpload from "express-fileupload";
|
|
3
|
-
import cors from "cors";
|
|
4
|
-
import cookieParser from "cookie-parser";
|
|
5
|
-
import { env } from "./env";
|
|
6
|
-
// import expressLayouts from "express-ejs-layouts";
|
|
7
|
-
// import path from "path";
|
|
8
|
-
|
|
9
|
-
import { errorMiddleware } from "../middleware/error-middleware";
|
|
10
|
-
import { httpLogger } from "../middleware/http-logger-middleware";
|
|
11
|
-
import { errorResponse } from "../utils/response";
|
|
12
|
-
import { setupSwagger } from "../utils/swagger";
|
|
13
|
-
import { mainRouter } from "../routes/main-route";
|
|
14
|
-
|
|
15
|
-
export const web = express();
|
|
16
|
-
// EJS View Engine Setup
|
|
17
|
-
// web.set("view engine", "ejs");
|
|
18
|
-
// web.set("views", path.join(__dirname, "..", "views"));
|
|
19
|
-
// web.use(expressLayouts);
|
|
20
|
-
// web.set("layout", "layouts/main");
|
|
21
|
-
|
|
22
|
-
// Middleware
|
|
23
|
-
web.use(express.json());
|
|
24
|
-
web.use(cookieParser());
|
|
25
|
-
web.use(
|
|
26
|
-
cors({
|
|
27
|
-
origin: env.CLIENT_URLS,
|
|
28
|
-
credentials: true,
|
|
29
|
-
})
|
|
30
|
-
);
|
|
31
|
-
web.use(fileUpload({ useTempFiles: true, tempFileDir: "./temp/" }));
|
|
32
|
-
web.use(express.static("public"));
|
|
33
|
-
web.use(httpLogger);
|
|
34
|
-
|
|
35
|
-
// Swagger Setup
|
|
36
|
-
setupSwagger(web);
|
|
37
|
-
|
|
38
|
-
// Routes
|
|
39
|
-
web.use(mainRouter);
|
|
40
|
-
|
|
41
|
-
// 404 Handler
|
|
42
|
-
web.use((req, res) => {
|
|
43
|
-
res.status(404).json(errorResponse("Request Tidak Ada", 404));
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// Global Error Handler
|
|
47
|
-
web.use(errorMiddleware);
|
|
1
|
+
import express from "express";
|
|
2
|
+
import fileUpload from "express-fileupload";
|
|
3
|
+
import cors from "cors";
|
|
4
|
+
import cookieParser from "cookie-parser";
|
|
5
|
+
import { env } from "./env";
|
|
6
|
+
// import expressLayouts from "express-ejs-layouts";
|
|
7
|
+
// import path from "path";
|
|
8
|
+
|
|
9
|
+
import { errorMiddleware } from "../middleware/error-middleware";
|
|
10
|
+
import { httpLogger } from "../middleware/http-logger-middleware";
|
|
11
|
+
import { errorResponse } from "../utils/response";
|
|
12
|
+
import { setupSwagger } from "../utils/swagger";
|
|
13
|
+
import { mainRouter } from "../routes/main-route";
|
|
14
|
+
|
|
15
|
+
export const web = express();
|
|
16
|
+
// EJS View Engine Setup
|
|
17
|
+
// web.set("view engine", "ejs");
|
|
18
|
+
// web.set("views", path.join(__dirname, "..", "views"));
|
|
19
|
+
// web.use(expressLayouts);
|
|
20
|
+
// web.set("layout", "layouts/main");
|
|
21
|
+
|
|
22
|
+
// Middleware
|
|
23
|
+
web.use(express.json());
|
|
24
|
+
web.use(cookieParser());
|
|
25
|
+
web.use(
|
|
26
|
+
cors({
|
|
27
|
+
origin: env.CLIENT_URLS,
|
|
28
|
+
credentials: true,
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
web.use(fileUpload({ useTempFiles: true, tempFileDir: "./temp/" }));
|
|
32
|
+
web.use(express.static("public"));
|
|
33
|
+
web.use(httpLogger);
|
|
34
|
+
|
|
35
|
+
// Swagger Setup
|
|
36
|
+
setupSwagger(web);
|
|
37
|
+
|
|
38
|
+
// Routes
|
|
39
|
+
web.use(mainRouter);
|
|
40
|
+
|
|
41
|
+
// 404 Handler
|
|
42
|
+
web.use((req, res) => {
|
|
43
|
+
res.status(404).json(errorResponse("Request Tidak Ada", 404));
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Global Error Handler
|
|
47
|
+
web.use(errorMiddleware);
|
|
@@ -1,88 +1,88 @@
|
|
|
1
|
-
import { NextFunction, Request, Response } from "express";
|
|
2
|
-
import {
|
|
3
|
-
loginRequest,
|
|
4
|
-
CreateUserRequest,
|
|
5
|
-
UpdateUserRequest,
|
|
6
|
-
} from "../dtos/user-dto";
|
|
7
|
-
import { successResponse, successUpdateResponse } from "../utils/response";
|
|
8
|
-
import { AuthService } from "../services/auth-service";
|
|
9
|
-
import { UserRequest } from "../types/type-request";
|
|
10
|
-
import { env } from "../config/env";
|
|
11
|
-
|
|
12
|
-
export class AuthController {
|
|
13
|
-
static async register(req: Request, res: Response, next: NextFunction) {
|
|
14
|
-
try {
|
|
15
|
-
const request: CreateUserRequest = req.body as CreateUserRequest;
|
|
16
|
-
const response = await AuthService.register(request);
|
|
17
|
-
res.status(201).json(successResponse("Register Berhasil", 201, response));
|
|
18
|
-
} catch (error) {
|
|
19
|
-
next(error);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
static async login(req: Request, res: Response, next: NextFunction) {
|
|
24
|
-
try {
|
|
25
|
-
const request: loginRequest = req.body as loginRequest;
|
|
26
|
-
const response = await AuthService.login(request);
|
|
27
|
-
res.cookie("refresh_token", response.refreshToken, {
|
|
28
|
-
httpOnly: true,
|
|
29
|
-
maxAge: 24 * 60 * 60 * 1000,
|
|
30
|
-
secure: env.NODE_ENV === "production",
|
|
31
|
-
sameSite: "lax",
|
|
32
|
-
path: "/",
|
|
33
|
-
});
|
|
34
|
-
res.status(200).json(
|
|
35
|
-
successResponse("Login Berhasil", 200, {
|
|
36
|
-
user: response.user,
|
|
37
|
-
accessToken: response.accessToken,
|
|
38
|
-
})
|
|
39
|
-
);
|
|
40
|
-
} catch (error) {
|
|
41
|
-
next(error);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
static async me(req: UserRequest, res: Response, next: NextFunction) {
|
|
46
|
-
try {
|
|
47
|
-
const response = await AuthService.me(req.user!);
|
|
48
|
-
res
|
|
49
|
-
.status(200)
|
|
50
|
-
.json(successResponse("Get Detail User Berhasil", 200, response));
|
|
51
|
-
} catch (error) {
|
|
52
|
-
next(error);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
static async updateProfile(
|
|
57
|
-
req: UserRequest,
|
|
58
|
-
res: Response,
|
|
59
|
-
next: NextFunction
|
|
60
|
-
) {
|
|
61
|
-
try {
|
|
62
|
-
const request: UpdateUserRequest = req.body as UpdateUserRequest;
|
|
63
|
-
const response = await AuthService.updateProfile(req.user!, request);
|
|
64
|
-
res.status(200).json(successUpdateResponse(response));
|
|
65
|
-
} catch (error) {
|
|
66
|
-
next(error);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static async logout(req: UserRequest, res: Response, next: NextFunction) {
|
|
71
|
-
await AuthService.logout(req);
|
|
72
|
-
res.clearCookie("refresh_token");
|
|
73
|
-
res.status(200).json(successResponse("Logout berhasil", 200));
|
|
74
|
-
}
|
|
75
|
-
static async refreshToken(req: Request, res: Response, next: NextFunction) {
|
|
76
|
-
try {
|
|
77
|
-
const response = await AuthService.refreshToken(req);
|
|
78
|
-
res.status(200).json(
|
|
79
|
-
successResponse("Get Access Token Berhasil", 200, {
|
|
80
|
-
user: response.user,
|
|
81
|
-
accessToken: response.accessToken,
|
|
82
|
-
})
|
|
83
|
-
);
|
|
84
|
-
} catch (error) {
|
|
85
|
-
next(error);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
1
|
+
import { NextFunction, Request, Response } from "express";
|
|
2
|
+
import {
|
|
3
|
+
loginRequest,
|
|
4
|
+
CreateUserRequest,
|
|
5
|
+
UpdateUserRequest,
|
|
6
|
+
} from "../dtos/user-dto";
|
|
7
|
+
import { successResponse, successUpdateResponse } from "../utils/response";
|
|
8
|
+
import { AuthService } from "../services/auth-service";
|
|
9
|
+
import { UserRequest } from "../types/type-request";
|
|
10
|
+
import { env } from "../config/env";
|
|
11
|
+
|
|
12
|
+
export class AuthController {
|
|
13
|
+
static async register(req: Request, res: Response, next: NextFunction) {
|
|
14
|
+
try {
|
|
15
|
+
const request: CreateUserRequest = req.body as CreateUserRequest;
|
|
16
|
+
const response = await AuthService.register(request);
|
|
17
|
+
res.status(201).json(successResponse("Register Berhasil", 201, response));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
next(error);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
static async login(req: Request, res: Response, next: NextFunction) {
|
|
24
|
+
try {
|
|
25
|
+
const request: loginRequest = req.body as loginRequest;
|
|
26
|
+
const response = await AuthService.login(request);
|
|
27
|
+
res.cookie("refresh_token", response.refreshToken, {
|
|
28
|
+
httpOnly: true,
|
|
29
|
+
maxAge: 24 * 60 * 60 * 1000,
|
|
30
|
+
secure: env.NODE_ENV === "production",
|
|
31
|
+
sameSite: "lax",
|
|
32
|
+
path: "/",
|
|
33
|
+
});
|
|
34
|
+
res.status(200).json(
|
|
35
|
+
successResponse("Login Berhasil", 200, {
|
|
36
|
+
user: response.user,
|
|
37
|
+
accessToken: response.accessToken,
|
|
38
|
+
})
|
|
39
|
+
);
|
|
40
|
+
} catch (error) {
|
|
41
|
+
next(error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
static async me(req: UserRequest, res: Response, next: NextFunction) {
|
|
46
|
+
try {
|
|
47
|
+
const response = await AuthService.me(req.user!);
|
|
48
|
+
res
|
|
49
|
+
.status(200)
|
|
50
|
+
.json(successResponse("Get Detail User Berhasil", 200, response));
|
|
51
|
+
} catch (error) {
|
|
52
|
+
next(error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
static async updateProfile(
|
|
57
|
+
req: UserRequest,
|
|
58
|
+
res: Response,
|
|
59
|
+
next: NextFunction
|
|
60
|
+
) {
|
|
61
|
+
try {
|
|
62
|
+
const request: UpdateUserRequest = req.body as UpdateUserRequest;
|
|
63
|
+
const response = await AuthService.updateProfile(req.user!, request);
|
|
64
|
+
res.status(200).json(successUpdateResponse(response));
|
|
65
|
+
} catch (error) {
|
|
66
|
+
next(error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static async logout(req: UserRequest, res: Response, next: NextFunction) {
|
|
71
|
+
await AuthService.logout(req);
|
|
72
|
+
res.clearCookie("refresh_token");
|
|
73
|
+
res.status(200).json(successResponse("Logout berhasil", 200));
|
|
74
|
+
}
|
|
75
|
+
static async refreshToken(req: Request, res: Response, next: NextFunction) {
|
|
76
|
+
try {
|
|
77
|
+
const response = await AuthService.refreshToken(req);
|
|
78
|
+
res.status(200).json(
|
|
79
|
+
successResponse("Get Access Token Berhasil", 200, {
|
|
80
|
+
user: response.user,
|
|
81
|
+
accessToken: response.accessToken,
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
next(error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
import { NextFunction, Request, Response } from "express";
|
|
2
|
-
import {
|
|
3
|
-
CreateUserRequest,
|
|
4
|
-
ListUserRequest,
|
|
5
|
-
UpdateUserRequest,
|
|
6
|
-
} from "../dtos/user-dto";
|
|
7
|
-
import { UserService } from "../services/user-service";
|
|
8
|
-
import {
|
|
9
|
-
successCreateResponse,
|
|
10
|
-
successDeleteResponse,
|
|
11
|
-
successResponse,
|
|
12
|
-
successUpdateResponse,
|
|
13
|
-
} from "../utils/response";
|
|
14
|
-
import { UserRequest } from "../types/type-request";
|
|
15
|
-
|
|
16
|
-
export class UserController {
|
|
17
|
-
static async getAll(req: Request, res: Response, next: NextFunction) {
|
|
18
|
-
try {
|
|
19
|
-
const page = Number(req.query.page) || 1;
|
|
20
|
-
const take = Number(req.query.take) || 10;
|
|
21
|
-
const request: ListUserRequest = {
|
|
22
|
-
page: page,
|
|
23
|
-
take: take,
|
|
24
|
-
skip: (page - 1) * take,
|
|
25
|
-
name: req.query.name as string,
|
|
26
|
-
};
|
|
27
|
-
const response = await UserService.getAll(request);
|
|
28
|
-
res
|
|
29
|
-
.status(200)
|
|
30
|
-
.json(successResponse("Berhasil Get All Data", 200, response));
|
|
31
|
-
} catch (e) {
|
|
32
|
-
next(e);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
static async getOne(req: Request, res: Response, next: NextFunction) {
|
|
37
|
-
try {
|
|
38
|
-
const id = req.params.id;
|
|
39
|
-
const response = await UserService.getOne(id);
|
|
40
|
-
res
|
|
41
|
-
.status(200)
|
|
42
|
-
.json(successResponse("Berhasil Get Detail Data", 200, response));
|
|
43
|
-
} catch (e) {
|
|
44
|
-
next(e);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
static async create(req: Request, res: Response, next: NextFunction) {
|
|
49
|
-
try {
|
|
50
|
-
const request: CreateUserRequest = req.body as CreateUserRequest;
|
|
51
|
-
console.log(request);
|
|
52
|
-
const response = await UserService.create(request);
|
|
53
|
-
res.status(201).json(successCreateResponse(response));
|
|
54
|
-
} catch (error) {
|
|
55
|
-
next(error);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
static async update(req: UserRequest, res: Response, next: NextFunction) {
|
|
60
|
-
try {
|
|
61
|
-
const id = req.params.id;
|
|
62
|
-
const request: UpdateUserRequest = req.body as UpdateUserRequest;
|
|
63
|
-
const response = await UserService.update(id, request);
|
|
64
|
-
res.status(200).json(successUpdateResponse(response));
|
|
65
|
-
} catch (error) {
|
|
66
|
-
next(error);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
static async delete(req: Request, res: Response, next: NextFunction) {
|
|
71
|
-
try {
|
|
72
|
-
const id = req.params.id;
|
|
73
|
-
await UserService.delete(id);
|
|
74
|
-
res.status(200).json(successDeleteResponse());
|
|
75
|
-
} catch (e) {
|
|
76
|
-
next(e);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
1
|
+
import { NextFunction, Request, Response } from "express";
|
|
2
|
+
import {
|
|
3
|
+
CreateUserRequest,
|
|
4
|
+
ListUserRequest,
|
|
5
|
+
UpdateUserRequest,
|
|
6
|
+
} from "../dtos/user-dto";
|
|
7
|
+
import { UserService } from "../services/user-service";
|
|
8
|
+
import {
|
|
9
|
+
successCreateResponse,
|
|
10
|
+
successDeleteResponse,
|
|
11
|
+
successResponse,
|
|
12
|
+
successUpdateResponse,
|
|
13
|
+
} from "../utils/response";
|
|
14
|
+
import { UserRequest } from "../types/type-request";
|
|
15
|
+
|
|
16
|
+
export class UserController {
|
|
17
|
+
static async getAll(req: Request, res: Response, next: NextFunction) {
|
|
18
|
+
try {
|
|
19
|
+
const page = Number(req.query.page) || 1;
|
|
20
|
+
const take = Number(req.query.take) || 10;
|
|
21
|
+
const request: ListUserRequest = {
|
|
22
|
+
page: page,
|
|
23
|
+
take: take,
|
|
24
|
+
skip: (page - 1) * take,
|
|
25
|
+
name: req.query.name as string,
|
|
26
|
+
};
|
|
27
|
+
const response = await UserService.getAll(request);
|
|
28
|
+
res
|
|
29
|
+
.status(200)
|
|
30
|
+
.json(successResponse("Berhasil Get All Data", 200, response));
|
|
31
|
+
} catch (e) {
|
|
32
|
+
next(e);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static async getOne(req: Request, res: Response, next: NextFunction) {
|
|
37
|
+
try {
|
|
38
|
+
const id = req.params.id;
|
|
39
|
+
const response = await UserService.getOne(id);
|
|
40
|
+
res
|
|
41
|
+
.status(200)
|
|
42
|
+
.json(successResponse("Berhasil Get Detail Data", 200, response));
|
|
43
|
+
} catch (e) {
|
|
44
|
+
next(e);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
static async create(req: Request, res: Response, next: NextFunction) {
|
|
49
|
+
try {
|
|
50
|
+
const request: CreateUserRequest = req.body as CreateUserRequest;
|
|
51
|
+
console.log(request);
|
|
52
|
+
const response = await UserService.create(request);
|
|
53
|
+
res.status(201).json(successCreateResponse(response));
|
|
54
|
+
} catch (error) {
|
|
55
|
+
next(error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
static async update(req: UserRequest, res: Response, next: NextFunction) {
|
|
60
|
+
try {
|
|
61
|
+
const id = req.params.id;
|
|
62
|
+
const request: UpdateUserRequest = req.body as UpdateUserRequest;
|
|
63
|
+
const response = await UserService.update(id, request);
|
|
64
|
+
res.status(200).json(successUpdateResponse(response));
|
|
65
|
+
} catch (error) {
|
|
66
|
+
next(error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
static async delete(req: Request, res: Response, next: NextFunction) {
|
|
71
|
+
try {
|
|
72
|
+
const id = req.params.id;
|
|
73
|
+
await UserService.delete(id);
|
|
74
|
+
res.status(200).json(successDeleteResponse());
|
|
75
|
+
} catch (e) {
|
|
76
|
+
next(e);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export type listResponse = {
|
|
2
|
-
data: any;
|
|
3
|
-
total_data: number;
|
|
4
|
-
paging: any;
|
|
5
|
-
};
|
|
6
|
-
export function tolistResponse(data: any): listResponse {
|
|
7
|
-
return {
|
|
8
|
-
data: data.data,
|
|
9
|
-
total_data: data.total_data,
|
|
10
|
-
paging: data.paging,
|
|
11
|
-
};
|
|
12
|
-
}
|
|
1
|
+
export type listResponse = {
|
|
2
|
+
data: any;
|
|
3
|
+
total_data: number;
|
|
4
|
+
paging: any;
|
|
5
|
+
};
|
|
6
|
+
export function tolistResponse(data: any): listResponse {
|
|
7
|
+
return {
|
|
8
|
+
data: data.data,
|
|
9
|
+
total_data: data.total_data,
|
|
10
|
+
paging: data.paging,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
import { User } from "@prisma/client";
|
|
2
|
-
export type loginRequest = {
|
|
3
|
-
email: string;
|
|
4
|
-
password: string;
|
|
5
|
-
};
|
|
6
|
-
export type CreateUserRequest = {
|
|
7
|
-
fullName: string;
|
|
8
|
-
email: string;
|
|
9
|
-
password: string;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export type UpdateUserRequest = {
|
|
13
|
-
fullName?: string;
|
|
14
|
-
email?: string;
|
|
15
|
-
password?: string;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export type ListUserRequest = {
|
|
19
|
-
page: number;
|
|
20
|
-
take: number;
|
|
21
|
-
skip: number;
|
|
22
|
-
name?: string;
|
|
23
|
-
};
|
|
24
|
-
export type UserDetailResponse = {
|
|
25
|
-
id: string;
|
|
26
|
-
fullName: string;
|
|
27
|
-
email: string;
|
|
28
|
-
image_id?: string;
|
|
29
|
-
image_url?: string;
|
|
30
|
-
created_at: Date;
|
|
31
|
-
updated_at: Date;
|
|
32
|
-
deleted_at?: Date;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export type UserResponse = {
|
|
36
|
-
id: string;
|
|
37
|
-
fullName: string;
|
|
38
|
-
email: string;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export function toUserDetailResponse(user: User): UserDetailResponse {
|
|
42
|
-
return {
|
|
43
|
-
id: user.id,
|
|
44
|
-
fullName: user.fullName,
|
|
45
|
-
email: user.email,
|
|
46
|
-
created_at: user.created_at,
|
|
47
|
-
updated_at: user.updated_at,
|
|
48
|
-
deleted_at: user.deleted_at!,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
export function toUserResponse(user: User): UserResponse {
|
|
52
|
-
return {
|
|
53
|
-
id: user.id,
|
|
54
|
-
fullName: user.fullName,
|
|
55
|
-
email: user.email,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
1
|
+
import { User } from "@prisma/client";
|
|
2
|
+
export type loginRequest = {
|
|
3
|
+
email: string;
|
|
4
|
+
password: string;
|
|
5
|
+
};
|
|
6
|
+
export type CreateUserRequest = {
|
|
7
|
+
fullName: string;
|
|
8
|
+
email: string;
|
|
9
|
+
password: string;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type UpdateUserRequest = {
|
|
13
|
+
fullName?: string;
|
|
14
|
+
email?: string;
|
|
15
|
+
password?: string;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export type ListUserRequest = {
|
|
19
|
+
page: number;
|
|
20
|
+
take: number;
|
|
21
|
+
skip: number;
|
|
22
|
+
name?: string;
|
|
23
|
+
};
|
|
24
|
+
export type UserDetailResponse = {
|
|
25
|
+
id: string;
|
|
26
|
+
fullName: string;
|
|
27
|
+
email: string;
|
|
28
|
+
image_id?: string;
|
|
29
|
+
image_url?: string;
|
|
30
|
+
created_at: Date;
|
|
31
|
+
updated_at: Date;
|
|
32
|
+
deleted_at?: Date;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export type UserResponse = {
|
|
36
|
+
id: string;
|
|
37
|
+
fullName: string;
|
|
38
|
+
email: string;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export function toUserDetailResponse(user: User): UserDetailResponse {
|
|
42
|
+
return {
|
|
43
|
+
id: user.id,
|
|
44
|
+
fullName: user.fullName,
|
|
45
|
+
email: user.email,
|
|
46
|
+
created_at: user.created_at,
|
|
47
|
+
updated_at: user.updated_at,
|
|
48
|
+
deleted_at: user.deleted_at!,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function toUserResponse(user: User): UserResponse {
|
|
52
|
+
return {
|
|
53
|
+
id: user.id,
|
|
54
|
+
fullName: user.fullName,
|
|
55
|
+
email: user.email,
|
|
56
|
+
};
|
|
57
|
+
}
|
package/template/src/main.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { web } from "./config/web";
|
|
2
|
-
import { connectDatabase } from "./config/database";
|
|
3
|
-
import { env } from "./config/env";
|
|
4
|
-
import { logger } from "./config/logger";
|
|
5
|
-
|
|
6
|
-
async function startServer() {
|
|
7
|
-
try {
|
|
8
|
-
if (
|
|
9
|
-
!env.APP_SECRET ||
|
|
10
|
-
env.APP_SECRET.trim() === "" ||
|
|
11
|
-
!env.JWT_SECRET ||
|
|
12
|
-
env.JWT_SECRET.trim() === ""
|
|
13
|
-
) {
|
|
14
|
-
logger.error("❌ APP_SECRET or JWT_SECRET is missing in your .env file.");
|
|
15
|
-
logger.error("👉 Please run `node craft key:generate` to create them.");
|
|
16
|
-
process.exit(0);
|
|
17
|
-
}
|
|
18
|
-
await connectDatabase();
|
|
19
|
-
web.listen(env.PORT, () => {
|
|
20
|
-
logger.info(`🚀 Server is listening on: ${env.BASE_URL}`);
|
|
21
|
-
logger.info(`🔗 API Docs available at: ${env.BASE_API_URL}/docs`);
|
|
22
|
-
});
|
|
23
|
-
} catch (error) {
|
|
24
|
-
process.exit(0);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
startServer();
|
|
1
|
+
import { web } from "./config/web";
|
|
2
|
+
import { connectDatabase } from "./config/database";
|
|
3
|
+
import { env } from "./config/env";
|
|
4
|
+
import { logger } from "./config/logger";
|
|
5
|
+
|
|
6
|
+
async function startServer() {
|
|
7
|
+
try {
|
|
8
|
+
if (
|
|
9
|
+
!env.APP_SECRET ||
|
|
10
|
+
env.APP_SECRET.trim() === "" ||
|
|
11
|
+
!env.JWT_SECRET ||
|
|
12
|
+
env.JWT_SECRET.trim() === ""
|
|
13
|
+
) {
|
|
14
|
+
logger.error("❌ APP_SECRET or JWT_SECRET is missing in your .env file.");
|
|
15
|
+
logger.error("👉 Please run `node craft key:generate` to create them.");
|
|
16
|
+
process.exit(0);
|
|
17
|
+
}
|
|
18
|
+
await connectDatabase();
|
|
19
|
+
web.listen(env.PORT, () => {
|
|
20
|
+
logger.info(`🚀 Server is listening on: ${env.BASE_URL}`);
|
|
21
|
+
logger.info(`🔗 API Docs available at: ${env.BASE_API_URL}/docs`);
|
|
22
|
+
});
|
|
23
|
+
} catch (error) {
|
|
24
|
+
process.exit(0);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
startServer();
|