web_dev/
lib.rs

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    // Check if the "backend" directory exists
9    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    // Change current working directory to "backend"
17    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    // Create each folder
36    for folder in folders {
37        if let Err(err) = fs::create_dir_all(folder) {
38            eprintln!("Error creating folder '{}': {}", folder, err);
39        }
40    }
41
42//---------------------------------------------------------------------------------------------------
43
44     // Folder path where you want to create the file
45    let folder_path = "../backend";
46
47    // File path inside the folder
48    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
61//--------------------------------------------------------------------------------------------------
62
63
64     // Folder path where you want to create the file
65    let conn_folder_path = "../backend/connection";
66
67    // File path inside the folder
68    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
88//--------------------------------------------------------------------------------------------------
89
90
91
92    // Folder path where you want to create the file
93    let model_folder_path = "../backend/models";
94
95    // File path inside the folder
96    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 // Write the JavaScript code to the file
122    model_file.write_all(model_string)?;
123
124
125//--------------------------------------------------------------------------------------------------
126
127// Folder path where you want to create the file
128    let router_folder_path = "../backend/routers";
129
130    // File path inside the folder
131    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 // Write the JavaScript code to the file
166    route_file1.write_all(route_string1)?;
167    route_file2.write_all(route_string2)?;
168
169
170//--------------------------------------------------------------------------------------------------
171
172
173    // Folder path where you want to create the file
174    let server_folder_path = "../backend/server";
175
176    // File path inside the folder
177    let server_file_path = format!("{}/server.js", server_folder_path);
178
179    // let file_path = "server/server.js";
180    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    // Write the JavaScript code to the file
212    server_file.write_all(server_string)?;
213
214    Ok(())
215}