1use std::env;
2use std::fs;
3use std::fs::File;
4use std::io::Write;
5use std::process::Command;
6
7pub fn run_command_in_backend() -> std::io::Result<()> {
8 if !std::path::Path::new("backend").exists() {
10 return Err(std::io::Error::new(
11 std::io::ErrorKind::NotFound,
12 "backend directory does not exist",
13 ));
14 }
15
16 env::set_current_dir("backend")?;
18
19 Command::new("npm").arg("init").arg("-y").output()?;
20 Command::new("npm").arg("install").arg("express").output()?;
21 Command::new("npm").arg("install").arg("mongoose").output()?;
22 Command::new("npm").arg("install").arg("cors").output()?;
23
24 let folders = vec![
25 "connection",
26 "config",
27 "controller",
28 "migrations",
29 "models",
30 "routers",
31 "server",
32 "utils",
33 ];
34
35 for folder in folders {
37 if let Err(err) = fs::create_dir_all(folder) {
38 eprintln!("Error creating folder '{}': {}", folder, err);
39 }
40 }
41
42let folder_path = "../backend";
46
47 let file_path = format!("{}/.gitignore", folder_path);
49 let mut file = File::create(file_path)?;
50
51 let string =b"# dependencies
52node_modules
53
54# local env files
55.env*.local
56.env";
57
58 file.write_all(string)?;
59
60
61let conn_folder_path = "../backend/connection";
66
67 let conn_file_path = format!("{}/mongoDB.js", conn_folder_path);
69 let mut conn_file = File::create(conn_file_path)?;
70
71 let conn_string =br#"require("dotenv").config();
72const mongoose = require("mongoose");
73
74mongoose
75 .connect(
76 `mongodb+srv://${process.env.ATLAS_USERNAME}:${process.env.ATLAS_PASSWORD}@cluster11.gd9qm3q.mongodb.net/student_db?retryWrites=true&w=majority`
77 )
78 .then(() => {
79 console.log("Connected To Database");
80 })
81 .catch((err) => {
82 console.log(err);
83 });"#;
84
85 conn_file.write_all(conn_string)?;
86
87
88let model_folder_path = "../backend/models";
94
95 let model_file_path = format!("{}/studentModel.js", model_folder_path);
97 let mut model_file = File::create(model_file_path)?;
98
99 let model_string =br#"const mongoose = require("mongoose");
100const studentSchema = new mongoose.Schema(
101 {
102 name: {
103 type: String,
104 required: true,
105 },
106 email: {
107 type: String,
108 required: true,
109 unique: true,
110 },
111 phone: {
112 type: String,
113 },
114 },
115 { timestamps: true }
116);
117
118const Student = mongoose.model("Student", studentSchema);
119module.exports = { Student };"#;
120
121 model_file.write_all(model_string)?;
123
124
125let router_folder_path = "../backend/routers";
129
130 let router_file_path1 = format!("{}/setStudentRoute.js", router_folder_path);
132 let router_file_path2 = format!("{}/getHelloWorldRoute.js", router_folder_path);
133 let mut route_file1 = File::create(router_file_path1)?;
134 let mut route_file2 = File::create(router_file_path2)?;
135
136 let route_string1 =br#"const { Student } = require("../models/studentModel");
137const express = require("express");
138const router = new express.Router();
139
140router.post("/", (req, res) => {
141
142 const user = new Student(req.body);
143 user
144 .save()
145 .then(() => {
146 res.status(201).send("Student successfully added...");
147 })
148 .catch((err) => {
149 res.status(404).send(err);
150 });
151});
152
153module.exports = router;"#;
154
155 let route_string2 =br#"const express = require("express");
156const router = new express.Router();
157
158router.get('/', (req, res) => {
159 res.send('Hello World!');
160});
161
162
163module.exports = router;"#;
164
165 route_file1.write_all(route_string1)?;
167 route_file2.write_all(route_string2)?;
168
169
170let server_folder_path = "../backend/server";
175
176 let server_file_path = format!("{}/server.js", server_folder_path);
178
179 let mut server_file = File::create(server_file_path)?;
181
182 let server_string =br#"require("../connection/mongoDB");
183
184const set_studentRouter = require("../routers/setStudentRoute");
185const get_hello_world = require("../routers/getHelloWorldRoute");
186
187const express = require("express");
188const cors = require("cors");
189const app = express();
190const port = 3000;
191
192app.use(express.json());
193app.use(
194 cors({
195 origin: "*",
196 })
197);
198
199app.use("/student/add" , set_studentRouter);
200app.use("/" , get_hello_world);
201
202
203app.get("*", (req, res) => {
204 res.send("sorry this page does not exists.");
205});
206
207app.listen(port, () => {
208 console.log(`App listening on port ${port}`);
209});"#;
210
211 server_file.write_all(server_string)?;
213
214 Ok(())
215}