neatnode 1.0.1 → 3.0.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 +107 -0
- package/bin/index.js +1 -1
- package/package.json +9 -1
- package/src/actions/createProject.js +26 -9
- package/src/actions/removeCRUD.js +49 -0
- package/src/cli.js +48 -8
- package/src/utils/copyTemplate.js +19 -10
- package/templates/express-basic/.env.example +3 -0
- package/templates/express-basic/package-lock.json +1505 -0
- package/templates/express-basic/package.json +21 -0
- package/templates/express-basic/server.js +11 -0
- package/templates/express-basic/src/app.js +45 -0
- package/templates/express-basic/src/config/db.config.js +12 -0
- package/templates/express-basic/src/config/env.config.js +11 -0
- package/templates/express-basic/src/controllers/todo.controller.js +90 -0
- package/templates/express-basic/src/middleware/notFound.middleware.js +5 -0
- package/templates/express-basic/src/models/todo.model.js +21 -0
- package/templates/express-basic/src/routes/index.route.js +10 -0
- package/templates/express-basic/src/routes/todo.route.js +15 -0
- package/templates/express-basic/src/utils/responseHandler.js +7 -0
- package/templates/express-rest-api/.env.example +7 -0
- package/templates/express-rest-api/package-lock.json +1977 -0
- package/templates/express-rest-api/package.json +30 -0
- package/templates/express-rest-api/server.js +14 -0
- package/templates/express-rest-api/src/app.js +55 -0
- package/templates/express-rest-api/src/config/db.config.js +14 -0
- package/templates/express-rest-api/src/config/env.config.js +13 -0
- package/templates/express-rest-api/src/config/logger.config.js +20 -0
- package/templates/express-rest-api/src/controllers/user.controller.js +35 -0
- package/templates/express-rest-api/src/middleware/auth.middleware.js +36 -0
- package/templates/express-rest-api/src/middleware/error.middleware.js +32 -0
- package/templates/express-rest-api/src/middleware/rateLimiter.js +13 -0
- package/templates/express-rest-api/src/middleware/validateRequest.middleware.js +15 -0
- package/templates/express-rest-api/src/models/user.model.js +31 -0
- package/templates/express-rest-api/src/routes/user.route.js +14 -0
- package/templates/express-rest-api/src/schemas/user.schema.js +43 -0
- package/templates/express-rest-api/src/services/user.service.js +54 -0
- package/templates/express-rest-api/src/utils/ApiError.js +17 -0
- package/templates/express-rest-api/src/utils/ApiResponse.js +9 -0
- package/templates/express-rest-api/src/utils/CatchAsync.js +5 -0
- package/templates/express-rest-api/src/utils/Token.js +16 -0
- package/templates/express-socket/.env.example +5 -0
- package/templates/express-socket/package-lock.json +2262 -0
- package/templates/express-socket/package.json +31 -0
- package/templates/express-socket/server.js +19 -0
- package/templates/express-socket/src/app.js +33 -0
- package/templates/express-socket/src/config/db.config.js +14 -0
- package/templates/express-socket/src/config/env.config.js +10 -0
- package/templates/express-socket/src/config/logger.js +20 -0
- package/templates/express-socket/src/config/socket.js +23 -0
- package/templates/express-socket/src/middleware/auth.middleware.js +36 -0
- package/templates/express-socket/src/middleware/error.middleware.js +31 -0
- package/templates/express-socket/src/middleware/rateLimiter.js +14 -0
- package/templates/express-socket/src/middleware/validateRequest.middleware.js +15 -0
- package/templates/express-socket/src/utils/ApiError.js +17 -0
- package/templates/express-socket/src/utils/ApiResponse.js +9 -0
- package/templates/express-socket/src/utils/CatchAsync.js +5 -0
- package/templates/express-socket/src/utils/Token.js +16 -0
- package/templates/express-basic/.env +0 -0
- package/templates/express-basic/app.js +0 -5
- package/templates/express-rest-api/index.js +0 -5
- package/templates/express-socket/index.js +0 -5
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "project-name",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Minimal Express.js starter template — clean, fast, and production-ready structure.",
|
|
5
|
+
"main": "server.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "nodemon server.js",
|
|
9
|
+
"start": "node server.js"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"cors": "^2.8.5",
|
|
13
|
+
"dotenv": "^17.2.3",
|
|
14
|
+
"express": "^5.1.0",
|
|
15
|
+
"mongoose": "^8.19.2",
|
|
16
|
+
"morgan": "^1.10.1"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"nodemon": "^3.1.10"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import app from "./src/app.js";
|
|
2
|
+
import { connectDB } from "./src/config/db.config.js";
|
|
3
|
+
import envConfig from "./src/config/env.config.js";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
connectDB();
|
|
7
|
+
|
|
8
|
+
app.listen(envConfig.PORT || 3000, () => {
|
|
9
|
+
console.log(`Server is running on http://localhost:${envConfig.PORT || 3000}`);
|
|
10
|
+
});
|
|
11
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import cors from 'cors';
|
|
3
|
+
import morgan from 'morgan';
|
|
4
|
+
|
|
5
|
+
import notFoundMiddleware from './middleware/notFound.middleware.js';
|
|
6
|
+
import { sendResponse } from './utils/responseHandler.js';
|
|
7
|
+
import indexRouter from './routes/index.route.js';
|
|
8
|
+
|
|
9
|
+
// ROUTE_IMPORTS_START
|
|
10
|
+
import todoRouter from './routes/todo.route.js';
|
|
11
|
+
// ROUTE_IMPORTS_END
|
|
12
|
+
|
|
13
|
+
// Initialize Express app
|
|
14
|
+
const app = express();
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
// Middleware
|
|
18
|
+
app.use(express.json());
|
|
19
|
+
app.use(express.urlencoded({ extended: true }));
|
|
20
|
+
app.use(cors());
|
|
21
|
+
app.use(morgan('dev'));
|
|
22
|
+
|
|
23
|
+
// Routes
|
|
24
|
+
app.use('/api', indexRouter);
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
// ROUTE_USES_START
|
|
28
|
+
app.use('/api/todo', todoRouter);
|
|
29
|
+
// ROUTE_USES_END
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// Root Route
|
|
34
|
+
app.get('/', (req, res) => {
|
|
35
|
+
sendResponse(res, 'Welcome to Express Basic Template API');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// 404 Middleware
|
|
41
|
+
app.use(notFoundMiddleware);
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
export default app;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
import envConfig from "./env.config.js";
|
|
3
|
+
|
|
4
|
+
export const connectDB = async () => {
|
|
5
|
+
try {
|
|
6
|
+
await mongoose.connect(envConfig.MONGODB_URI);
|
|
7
|
+
console.log("Database connected");
|
|
8
|
+
|
|
9
|
+
} catch (error) {
|
|
10
|
+
console.error("Error connecting to database:", error);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import Todo from "../models/todo.model.js";
|
|
2
|
+
import { sendResponse, errorResponse } from "../utils/responseHandler.js";
|
|
3
|
+
|
|
4
|
+
// 🧩 Get all todos
|
|
5
|
+
export const getTodos = async (req, res) => {
|
|
6
|
+
try {
|
|
7
|
+
const todos = await Todo.find();
|
|
8
|
+
sendResponse(res, "Todos fetched successfully", todos);
|
|
9
|
+
} catch (error) {
|
|
10
|
+
errorResponse(res, 500, "Failed to fetch todos");
|
|
11
|
+
console.log("Internal Server Error:", error);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
// 🧩 Get single todo by ID
|
|
16
|
+
export const getTodoById = async (req, res) => {
|
|
17
|
+
try {
|
|
18
|
+
const { id } = req.params;
|
|
19
|
+
const todo = await Todo.findById(id);
|
|
20
|
+
|
|
21
|
+
if (!todo) {
|
|
22
|
+
return errorResponse(res, 404, "Todo not found");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
sendResponse(res, "Todo fetched successfully", todo);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
errorResponse(res, 500, "Failed to fetch todo");
|
|
28
|
+
console.log("Internal Server Error:", error);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// 🧩 Create a new todo
|
|
33
|
+
export const createTodo = async (req, res) => {
|
|
34
|
+
try {
|
|
35
|
+
const { title, description } = req.body;
|
|
36
|
+
|
|
37
|
+
const newTodo = new Todo({
|
|
38
|
+
title,
|
|
39
|
+
description,
|
|
40
|
+
completed: false,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const savedTodo = await newTodo.save();
|
|
44
|
+
sendResponse(res, "Todo created successfully", savedTodo);
|
|
45
|
+
} catch (error) {
|
|
46
|
+
errorResponse(res, 500, "Failed to create todo");
|
|
47
|
+
console.log("Internal Server Error:", error);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// 🧩 Update a todo
|
|
52
|
+
export const updateTodo = async (req, res) => {
|
|
53
|
+
try {
|
|
54
|
+
const { id } = req.params;
|
|
55
|
+
const { title, description, completed } = req.body;
|
|
56
|
+
|
|
57
|
+
const updatedTodo = await Todo.findByIdAndUpdate(
|
|
58
|
+
id,
|
|
59
|
+
{ title, description, completed },
|
|
60
|
+
{ new: true }
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
if (!updatedTodo) {
|
|
64
|
+
return errorResponse(res, 404, "Todo not found");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
sendResponse(res, "Todo updated successfully", updatedTodo);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
errorResponse(res, 500, "Failed to update todo");
|
|
70
|
+
console.log("Internal Server Error:", error);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// 🧩 Delete a todo
|
|
75
|
+
export const deleteTodo = async (req, res) => {
|
|
76
|
+
try {
|
|
77
|
+
const { id } = req.params;
|
|
78
|
+
|
|
79
|
+
const deletedTodo = await Todo.findByIdAndDelete(id);
|
|
80
|
+
|
|
81
|
+
if (!deletedTodo) {
|
|
82
|
+
return errorResponse(res, 404, "Todo not found");
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
sendResponse(res, "Todo deleted successfully", deletedTodo);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
errorResponse(res, 500, "Failed to delete todo");
|
|
88
|
+
console.log("Internal Server Error:", error);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
|
|
3
|
+
const todoSchema = new mongoose.Schema({
|
|
4
|
+
title: {
|
|
5
|
+
type: String,
|
|
6
|
+
required: true,
|
|
7
|
+
},
|
|
8
|
+
description: {
|
|
9
|
+
type: String,
|
|
10
|
+
required: true,
|
|
11
|
+
},
|
|
12
|
+
completed: {
|
|
13
|
+
type: Boolean,
|
|
14
|
+
default: false,
|
|
15
|
+
},
|
|
16
|
+
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const Todo = mongoose.model("Todo", todoSchema);
|
|
20
|
+
|
|
21
|
+
export default Todo;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { getTodos, createTodo, getTodoById, updateTodo, deleteTodo } from '../controllers/todo.controller.js';
|
|
3
|
+
|
|
4
|
+
const router = express.Router();
|
|
5
|
+
|
|
6
|
+
// read routes
|
|
7
|
+
router.get('/', getTodos);
|
|
8
|
+
router.get('/:id', getTodoById);
|
|
9
|
+
|
|
10
|
+
// create routes
|
|
11
|
+
router.post('/create', createTodo);
|
|
12
|
+
router.patch('/update/:id', updateTodo);
|
|
13
|
+
router.delete('/delete/:id', deleteTodo);
|
|
14
|
+
|
|
15
|
+
export default router;
|