I'M_DEVELOPERπŸ‘¨β€πŸ’»
15 subscribers
12 photos
3 videos
1 link
HELLOπŸ™‹β€β™‚οΈ , Welcome to my channel πŸ’«
I AM BACKEND NODE JS DEVELOPER πŸ‘¨β€πŸ’»
Download Telegram
// 1
let text2 = "Salom, Dunyo Salom";
console.log(text2.indexOf("Dunyo"));
console.log(text2.indexOf("Salom"));
console.log(text2.indexOf("Xayr")); // -1 (topilmasa -1 qaytaradi)
// 2
let text1 = "Salom, Dunyo Salom";
console.log(text1.lastIndexOf("Salom"));
console.log(text1.lastIndexOf("Dunyo"));
// 3
let text3 = "Salom, Dunyo";
console.log(text3.includes("Dunyo"));
console.log(text3.includes("Xayr"));
// 4
let text = "Salom, Dunyo Barcha";
let arr = text.split(", ");
console.log(arr);
// 5
let array = ["Salom", "Dunyo"];
console.log(array.join(" - "));
1πŸ‘1πŸ”₯1
Eski vazifalardan Takrorlash bo'ldi
πŸ‘¨β€πŸ’»2
This media is not supported in the widget
VIEW IN TELEGRAM
πŸ”₯4
function getHotelDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Adress:Toshkent shahar chilonzor tumani, Qavat: 7ta, xonalar soni: 60ta, bo'sh xonalar soni: 10ta "
);
}, 2000);
});
}
function getFlightDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Uchish joyi:Rossiya domodedevo Aeraporti, Uchish vaqti : 19:00 ,Yetib borish : 22:00 "
);
}, 2000);
});
}
function getWeatherDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Rosiyya Toshkent yo'nalishi bo'yicha ob-havo ma'lumoti : 3 soatli parvoz vaqtida yomg'ir yoki qor yo'q havo ozgina sovuqroq 2'C dan 5'C gacha haroratda bo'ladi ! "
);
}, 2000);
});
}
getHotelDetails().then((data) => {
console.log(data);
}),
(err) => {
console.log(err);
};
getFlightDetails().then((data) => {
console.log(data);
}),
(err) => {
console.log(err);
};
getWeatherDetails().then((data) => {
console.log(data);
}),
(err) => {
console.log(err);
};
πŸ‘Œ2πŸ‘1πŸ”₯1
vazifadan parcha
function getHotelDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Adress:Toshkent shahar chilonzor tumani, Qavat: 7ta, xonalar soni: 60ta, bo'sh xonalar soni: 10ta "
);
}, 2000);
});
}
function getFlightDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Uchish joyi:Rossiya domodedevo Aeraporti, Uchish vaqti : 19:00 ,Yetib borish : 22:00 "
);
}, 2000);
});
}
function getWeatherDetails() {
return new Promise((resolve) => {
setTimeout(() => {
resolve(
"Rosiyya Toshkent yo'nalishi bo'yicha ob-havo ma'lumoti : 3 soatli parvoz vaqtida yomg'ir yoki qor yo'q havo ozgina sovuqroq 2'C dan 5'C gacha haroratda bo'ladi ! "
);
}, 2000);
});
}
function bookTrip() {
Promise.all([getHotelDetails(), getFlightDetails(), getWeatherDetails()])
.then((data) => {
const [hotelData, flightData, weatherData] = data;
console.log("Mehmonxona ma'lumotlari olingan --->", hotelData);
console.log("Parvoz ma'lumotlari olingan --->", flightData);
console.log("Ob-havo ma'lumotlari olingan --->", weatherData);
})
.catch((error) => {
console.log("xato");
});
}
bookTrip();
πŸ”₯3πŸ‘Œ2πŸ‘1
const son = Math.trunc(Math.random() * 10);
const Mypromise = new Promise((yes, no) => {
setTimeout(() => {
if (son >= 5) {
yes(true);
} else {
no(false);
}
}, 3000);
});
Mypromise.then(
(data) => {
console.log(data);
},
(data) => {
console.log(data);
}
);
πŸ”₯3πŸ‘Œ2πŸ‘1
function makeReservation(xona) {
return new Promise((res, rej) => {
if (xona) {
res("Buyurtma muvaffaqiyatli !");
} else {
rej("Kechirasiz, xonalar mavjud emas !");
}
});
}
makeReservation(true) // Argument sifatida true yozilsa buyurtma tasdiqlandi false yozilsa rad etildi !
.then((data) => {
console.log(data);
return "tasdiqlandi !";
})
.catch((error) => {
console.log(error);
return "rad etildi";
})
.then((data) => {
console.log(data);
})
.catch((error) => {
console.log(error);
});
πŸ”₯4πŸ‘Œ2πŸ‘1
function makeReservation(xona) {
return new Promise((res, rej) => {
if (xona) {
res("Buyurtma tasdiqlandi!");
} else {
rej("Kechirasiz, xonalar mavjud emas !");
}
});
}
makeReservation(true) // Argument sifatida true yozilsa resolve false yozilsa reject ishlaydi !
.then((data) => {
console.log(data);
})
.catch((e) => {
console.log(e);
});
πŸ”₯4πŸ‘2πŸ‘Œ2
// 2-usul

const h1 = document.createElement("h1");
document.body.appendChild(h1);
function cars() {
const ul = document.createElement("ul");
const li = document.createElement("li");
const h3 = document.createElement("h3");
const p = document.createElement("p");
const image = document.createElement("img");
image.src =
"https://imgd.aeplcdn.com/370x208/n/cw/ec/144851/exter-exterior-right-front-three-quarter-29.jpeg?isig=0&q=80";
h1.innerHTML = "Auto Salon";
h3.innerHTML = "Title";
p.innerHTML =
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Nulla, ex.";
document.body.appendChild(ul);
ul.appendChild(li);
li.appendChild(h3);
li.appendChild(p);
li.appendChild(image);
}
cars();
cars();
cars();
cars();
const h2 = document.createElement("h2");
h2.innerHTML = "About Us";
document.body.appendChild(h2);
function names() {
const section = document.createElement("section");
document.body.appendChild(section);
const image = document.createElement("img");
image.src =
"https://imgd.aeplcdn.com/370x208/n/cw/ec/144851/exter-exterior-right-front-three-quarter-29.jpeg?isig=0&q=80";
section.appendChild(image);
}
names(), names(), names(), names();
⚑4πŸ‘4πŸ‘Œ2
const url = require("node:url");
const uuid = require("uuid");
const http = require("node:http");

class ResponseData {
constructor(statusCode, message, data) {
this.statusCode = statusCode;
this.message = message;
this.data = data;
}
}

class Fruit {
constructor(name, price, count) {
this.id = uuid.v4();
this.name = name;
this.price = price;
this.count = count;
}
}

class Car {
constructor(model, price) {
this.id = uuid.v4();
this.model = model;
this.price = price;
}
}

const fruits = [];
const cars = [];

const server = http.createServer((req, res) => {
const [, moduleName, id] = url.parse(req.url).pathname.split("/");
const method = req.method;

if (method === "GET" && moduleName === "fruits" && !id) {
const response = new ResponseData(200, "Success", fruits);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
} else if (method === "GET" && moduleName === "cars" && !id) {
const response = new ResponseData(200, "Success", cars);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));

// get fruits
} else if (method === "GET" && moduleName === "fruits" && id) {
const fruit = fruits.find((f) => f.id === id);
if (!fruit) {
const response = new ResponseData(404, "Fruit not found");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
} else {
const response = new ResponseData(200, "Success", fruit);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
}

// get cars
} else if (method === "GET" && moduleName === "cars" && id) {
const car = cars.find((c) => c.id === id);
if (!car) {
const response = new ResponseData(404, "Car not found");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
} else {
const response = new ResponseData(200, "Success", car);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
}

//fruitlarni delete qilish
} else if (method === "DELETE" && moduleName === "fruits" && id) {
const fruitIndex = fruits.findIndex((el) => el.id === id);
if (fruitIndex === -1) {
const response = new ResponseData(404, "Fruit not found!");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
} else {
const deletedFruit = fruits.splice(fruitIndex, 1)[0];
const response = new ResponseData(200, "Fruit deleted", deletedFruit);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
}

//carlarni delete qilish
} else if (method === "DELETE" && moduleName === "cars" && id) {
const carIndex = cars.findIndex((el) => el.id === id);
if (carIndex === -1) {
const response = new ResponseData(404, "Car not found!");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
} else {
const deletedCar = cars.splice(carIndex, 1)[0];
const response = new ResponseData(200, "Car deleted", deletedCar);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
}
// fruis post
} else if (method === "POST" && moduleName === "fruits") {
let reqData = "";
req.on("data", (chunk) => {
reqData = reqData + chunk.toString();
});

req.on("end", () => {
let body = {};
if (reqData.length) {
body = JSON.parse(reqData);
}

// body name stringligini tekshirish
if (typeof body.name !== "string") {
const response = new ResponseData(400, "Name must be a string!");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
return;
}
πŸ”₯2πŸ‘2πŸ‘Œ1πŸ†’1


//body count numberligini tekshirish
if (typeof body.count !== "number" || typeof body.price !== "number") {
const response = new ResponseData(
400,
"Count and price must be numbers!"
);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
return;
}

const newFruit = new Fruit(body.name, body.price, body.count);
fruits.push(newFruit);

const response = new ResponseData(201, "Created", newFruit);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
});

// cars post
} else if (method === "POST" && moduleName === "cars") {
let reqData = "";
req.on("data", (chunk) => {
reqData = reqData + chunk.toString();
});

req.on("end", () => {
let body = {};
if (reqData.length) {
body = JSON.parse(reqData);
}

// car modelni stringligini tekshirish
if (typeof body.model !== "string") {
const response = new ResponseData(400, "Model must be a string!");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
return;
}

//cars price ni tekshirish
if (typeof body.price !== "number") {
const response = new ResponseData(400, "Price must be a number!");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
return;
}

//..............
const newCar = new Car(body.model, body.price);
cars.push(newCar);

const response = new ResponseData(201, "Created", newCar);
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
});
} else {
const response = new ResponseData(404, "Not Found");
res.writeHead(response.statusCode);
res.end(JSON.stringify(response));
}
});

server.listen(3000, () => {
console.log("Server is running at http://localhost:3000");
});
⚑2πŸ”₯1πŸ‘Œ1πŸ—Ώ1
186 qator kod🀯 (osonroq kasb qurib qolganmidi😁)
πŸ‘2🀯2πŸ”₯1😁1πŸ‘¨β€πŸ’»1
bunisi 200 qator bo'lib ketdi πŸ˜…
πŸ†2πŸ‘¨β€πŸ’»2πŸ”₯1πŸ‘Œ1
const http = require("node:http");
const url = require("node:url");
const { ResData } = require("./lib/resData");
const { Repository } = require("./lib/repository");
const path = require("node:path");
const { bodyParser } = require("./lib/bodyParser");
const { CategoryEntity } = require("./lib/categoryEntity");
const { Fruit } = require("./lib/fruit");
const { User } = require("./lib/user");
//for category
const categoryDir = path.join(__dirname, "database", "categories.json");
const categoryRepo = new Repository(categoryDir);
//for fruit
const fruitDir = path.join(__dirname, "database", "fruits.json");
const fruitRepo = new Repository(fruitDir);
//for user
const userDir = path.join(__dirname, "database", "user.json");
const userRepo = new Repository(userDir);
async function handleRequest(req, res) {
const method = req.method;
const parsedUrl = url.parse(req.url).pathname.split("/");

// ------------------ category get,post,delete --------------------------

// category get

if (method === "GET" && parsedUrl[1] === "category") {
const getAllData = await categoryRepo.read();

const resData = new ResData(200, "success", getAllData);

res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// category post
} else if (method === "POST" && parsedUrl[1] === "category") {
const body = await bodyParser(req);

if (!body.name) {
const resData = new ResData(400, "Please provide a name");
res.writeHead(resData.statusCode);

return res.end(JSON.stringify(resData));
}

const newCategory = new CategoryEntity(body.name, 0);

await categoryRepo.writeNewData(newCategory);

const resData = new ResData(201, "created", newCategory);

res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// category delete
} else if (
method === "DELETE" &&
parsedUrl[1] === "category" &&
parsedUrl[2]
) {
const id = parsedUrl[2];
const data = await categoryRepo.read();

const itemIndex = data.findIndex((item) => item.id === id);
if (itemIndex === -1) {
const resData = new ResData(404, "No object found with the given id");
res.writeHead(resData.statusCode);
return res.end(JSON.stringify(resData));
}

data.splice(itemIndex, 1);
await categoryRepo.write(data);

const resData = new ResData(200, "Deleted successfully");
res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// category put
} else if (method === "PUT" && parsedUrl[1] === "category" && parsedUrl[2]) {
const body = await bodyParser(req);

const id = parsedUrl[2];
const data = await categoryRepo.read();
const itemIndex = data.findIndex((item) => item.id === id);
if (itemIndex === -1) {
const resData = new ResData(404, "No object found with the given id");
res.writeHead(resData.statusCode);
return res.end(JSON.stringify(resData));
}
data[itemIndex].name = body.name;
await categoryRepo.write(data);
const resData = new ResData(200, "Updated successfully");
res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));
}

// -------------------Fruit get,post,delete,put-----------------------------

// fruit get

if (method === "GET" && parsedUrl[1] === "fruits") {
const getAllData = await fruitRepo.read();

const resData = new ResData(200, "success", getAllData);

res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// fruit post
} else if (method === "POST" && parsedUrl[1] === "fruits") {
const body = await bodyParser(req);

if (!body.name || !body.price || !body.count) {
const resData = new ResData(400, "Must be name,price,count");
res.writeHead(resData.statusCode);
return res.end(JSON.stringify(resData));
}

const newCategory = new Fruit(body.name, body.count, body.price);

await fruitRepo.writeNewData(newCategory);

const resData = new ResData(201, "created", newCategory);
πŸ”₯1🀯1πŸ‘Œ1πŸ‘¨β€πŸ’»1


res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// fruit delete
} else if (method === "DELETE" && parsedUrl[1] === "fruits" && parsedUrl[2]) {
const id = parsedUrl[2];
const data = await fruitRepo.read();

const itemIndex = data.findIndex((item) => item.id === id);
if (itemIndex === -1) {
const resData = new ResData(404, "No object found with the given id");
res.writeHead(resData.statusCode);
return res.end(JSON.stringify(resData));
}

data.splice(itemIndex, 1);
await fruitRepo.write(data);

const resData = new ResData(200, "Deleted successfully");
res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));
}

// -------------User get,post,delete----------------

// User get

if (method === "GET" && parsedUrl[1] === "user") {
const getAlldata = await userRepo.read();
const resData = ResData(200, "success", getAlldata);
res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// User post
} else if (method === "POST" && parsedUrl[1] === "user") {
const body = await bodyParser(req);
if (!body.name) {
const resData = ResData(400, "Must be name");
res.writeHead(resData.statusCode);
return res.end(JSON.stringify(resData));
}

const user = new User(body.name);

await userRepo.writeNewData(user);

const resData = new ResData(200, "created", user);

res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));

// User delete
} else if ((method === "DELETE", parsedUrl[1] === "user", parsedUrl[2])) {
const id = parsedUrl[2];
const data = await userRepo.read();
const findIndex = data.findIndex((item) => item.id === id);
if (findIndex === -1) {
const resData = new ResData(400, "No object found with the given id");
res.writeHead(resData.statusCode);
res.end(JSON.stringify(resData));
}
data.splice(itemIndex, 1);
await userRepo.write(data);
const resData = new ResData(200, "Deleted successfully");
res.writeHead(resData.statusCode);

res.end(json.stringify(resData));
}
}

const server = http.createServer(handleRequest);

server.listen(7777, () => {
console.log("http://localhost:7777");
});
// 200 qator kod 🀯
πŸ”₯1πŸ‘1πŸ‘Œ1πŸ‘¨β€πŸ’»1
const express = require("express");
const cors = require("cors");
const app = express();
const port = 7777;
const { carCreateScheam, createUserScheam } = require("./scheams");
const axios = require("axios");

const cars = [
{
id: 1,
model: "Toyota",
},
{
id: 2,
model: "BMW",
},
];

app.use(cors());
app.use(express.json());

function getById(id) {
const foundCar = cars.findIndex((el) => el.id === id);

if (foundCar === -1) {
return undefined;
} else {
return foundCar;
}
}

// car get

app.get("/api/cars", (req, res) => {
res.status(200).json({ statusCode: 200, message: "ok", data: cars });
});

// car post

app.post("/api/cars", (req, res) => {
const dto = req.body;

const { error } = carCreateScheam.validate(dto);

if (error) {
return res
.status(400)
.json({ statusCode: 400, message: "Bad Request", data: error.message });
}

const newCar = {
id: cars[cars.length - 1].id + 1,
model: dto.model,
};

cars.push(newCar);

res.status(201).json({ statusCode: 201, message: "ok", data: newCar });
});

//car delete

app.delete("/api/cars/:id", (req, res) => {
let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const carIndex = getById(id);

if (typeof carIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "car not found" });
}

const deletecar = cars.splice(carIndex, 1);

res
.status(200)
.json({ statusCode: 200, message: "deleted", data: deletecar });
});

// car getById

app.get("/api/cars/:id", (req, res) => {
let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const carIndex = getById(id);

if (typeof carIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "car not found" });
}
res.status(200).json({
data: cars[carIndex],
});
});

// car patch

app.patch("/api/cars/:id", (req, res) => {
const dto = req.body;
let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const carIndex = getById(id);

if (typeof carIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "car not found" });
}

cars[carIndex].model = dto.model;
res.status(200).json({
statusCode: 200,
message: "model changed",
data: cars[carIndex].model,
});
});

// car put

app.put("/api/cars/:id", (req, res) => {
const dto = req.body;

const { error } = carCreateScheam.validate(dto);

if (error) {
return res.status(400).json({ stausCode: 400, message: error.message });
}

let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const carIndex = getById(id);

if (typeof carIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "car not found" });
}
function update() {
cars[carIndex].model = dto.model;
}

res.status(200).json({
statusCode: 200,
message: "car updated",
data: update(),
});
});

// -----------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------

// usersga tegishli metodlar

// user get

app.get("/api/users", async (req, res) => {
try {
const response = await axios.get("http://localhost:3000/api/users");

res
.status(200)
.json({ statusCode: 200, message: "ok", data: response.data });
} catch (error) {
res.status(500).json({ statusCode: 500, message: error.message });
}
});

// user post

app.post("/api/create-user", async (req, res) => {
try {
const dto = req.body;

const { error } = createUserScheam.validate(dto);
πŸ‘Œ1


if (error) {
return res
.status(400)
.json({ statusCode: 400, message: "Bad Request", data: error.message });
}

const response = await axios.post("http://localhost:3000/api/users", dto);

res
.status(201)
.json({ statusCode: 201, message: "ok", data: response.data });
} catch (error) {
const statusCode = error.status || 500;

res.status(statusCode).json({
statusCode: statusCode,
message: error.response?.data?.message || error.message,
});
}
});

// user delete

app.delete("/api/user-delete/:userId", async (req, res) => {
try {
let userId = req.params.userId;
userId = Number(userId);

if (isNaN(userId)) {
return res
.status(400)
.json({ statusCode: 400, message: "Invalid userId" });
}

const deletedUser = await axios.delete(
"http://localhost:3000/api/users/" + userId
);

res
.status(200)
.json({ statusCode: 200, message: "deleted", data: deletedUser.data });
} catch (error) {
const statusCode = error.status || 500;

res.status(statusCode).json({
statusCode: statusCode,
message: error.response?.data?.message || error.message,
});
}
});

// user getById

app.get("/api/user-get/:userId", async (req, res) => {
try {
let userId = req.params.userId;
userId = Number(userId);

if (isNaN(userId)) {
return res
.status(400)
.json({ statusCode: 400, message: "Invalid userId" });
}

const getUser = await axios.get("http://localhost:3000/api/user/" + userId);

res.status(200).json({
statusCode: 200,
message: "successfully",
data: getUser.data,
});
} catch (error) {
const statusCode = error.status || 500;

res.status(statusCode).json({
statusCode: statusCode,
message: error.response?.data?.message || error.message,
});
}
});

// user patch

app.patch("/api/user-patch/:userId", async (req, res) => {
try {
let userId = req.params.userId;
userId = Number(userId);

if (isNaN(userId)) {
return res
.status(400)
.json({ statusCode: 400, message: "Invalid userId" });
}

const patchUser = await axios.patch(
"http://localhost:3000/api/user/" + userId,
req.body
);

res.status(200).json({
statusCode: 200,
message: "changed fullName",
data: patchUser.data,
});
} catch (error) {
const statusCode = error.status || 500;

res.status(statusCode).json({
statusCode: statusCode,
message: error.response?.data?.message || error.message,
});
}
});

// user put

app.put("/api/user-put/:userId", async (req, res) => {
try {
let userId = req.params.userId;
userId = Number(userId);

if (isNaN(userId)) {
return res
.status(400)
.json({ statusCode: 400, message: "Invalid userId" });
}

const putUser = await axios.put(
"http://localhost:3000/api/user/" + userId,
req.body
);

res.status(200).json({
statusCode: 200,
message: "updated",
data: putUser.data,
});
} catch (error) {
const statusCode = error.status || 500;

res.status(statusCode).json({
statusCode: statusCode,
message: error.response?.data?.message || error.message,
});
}
});

app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
❀1πŸ”₯1πŸ‘Œ1
350 qator kod xozir + yana 180 qator bor πŸ’†
πŸ”₯1πŸ‘Œ1
const express = require("express");
const cors = require("cors");
const {
userCreateSchema,
userPatchSchema,
userPutSchema,
} = require("./scheams");

const app = express();

app.use(cors());
app.use(express.json());

const users = [
{
id: 1,
login: "admin",
password: "admin",
fullName: "admin",
},
{
id: 2,
login: "admin1",
password: "admin",
fullName: "Admin Ok",
},
];

function getById(id) {
const foundUser = users.findIndex((el) => el.id === id);

if (foundUser === -1) {
return undefined;
} else {
return foundUser;
}
}

// user listni get qilish

app.get("/api/users", (req, res) => {
res.json({ stausCode: 200, message: "ok", data: users });
});

// post create qilish

app.post("/api/users", (req, res) => {
const dto = req.body;

const { error } = userCreateSchema.validate(dto);

if (error) {
return res.status(400).json({ stausCode: 400, message: error.message });
}

const newUser = {
id: users[users.length - 1].id + 1,
login: dto.login,
password: dto.password,
fullName: dto.fullName,
};

users.push(newUser);

res.status(201).json({ stausCode: 201, message: "created", data: newUser });
});

// delete berilgan id dagi ma'lumotni o'chirish

app.delete("/api/users/:id", (req, res) => {
let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const userIndex = getById(id);

if (typeof userIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "user not found" });
}

const deleteUser = users.splice(userIndex, 1);

res
.status(200)
.json({ statusCode: 200, message: "deleted", data: deleteUser });
});

// getById id berilsa o'sha id dagi ma'lumotni olib kelib berishi kerak

app.get("/api/user/:id", (req, res) => {
let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const userIndex = getById(id);

if (typeof userIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "user not found" });
}
res.status(200).json({
data: users[userIndex],
});
});

// patch metodi fullName ni o'zgartirish uchun ishlatiladi

app.patch("/api/user/:id", (req, res) => {
const dto = req.body;

const { error } = userPatchSchema.validate(dto);

if (error) {
return res.status(400).json({ stausCode: 400, message: error.message });
}

let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const userIndex = getById(id);

if (typeof userIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "user not found" });
}

users[userIndex].fullName = dto.fullName;
res.status(200).json({
statusCode: 200,
message: "fullName changed",
data: users[userIndex].fullName,
});
});

// put metodi hammasini yangilash (update qilish!)

app.put("/api/user/:id", (req, res) => {
const dto = req.body;

const { error } = userPutSchema.validate(dto);

if (error) {
return res.status(400).json({ stausCode: 400, message: error.message });
}

let id = req.params.id;

id = Number(id);

if (isNaN(id)) {
return res.status(400).json({ statusCode: 400, message: "Invalid id" });
}

const userIndex = getById(id);

if (typeof userIndex === "undefined") {
return res.status(404).json({ statusCode: 404, message: "user not found" });
}
function update() {
users[userIndex].fullName = dto.fullName;
users[userIndex].password = dto.password;
users[userIndex].login = dto.login;
}

res.status(200).json({
statusCode: 200,
message: "user updated",
data: update(),
});
});

app.listen(3000, () => {
console.log("Server is running on port 3000");
});