├── README.md ├── .gitignore ├── src ├── models │ ├── user.model.js │ ├── kuryer.model.js │ └── products.model.js ├── routes │ ├── kuryer.router.js │ ├── product.router.js │ ├── user.router.js │ └── allUsersFind.js ├── server.js └── controllers │ ├── products.controller.js │ ├── user.controller.js │ └── kuryer.controller.js └── package.json /README.md: -------------------------------------------------------------------------------- 1 | # aslanparcer-backend 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .env 4 | .DS_Store 5 | npm-debug.log 6 | yarn-error.log -------------------------------------------------------------------------------- /src/models/user.model.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const UserModel = new Schema({ 5 | username: { type: String, required: true, unique: true }, 6 | password: { type: String, required: true }, 7 | role: { type: String, enum: ['admin', 'kuryer', 'user'], default: 'user' }, 8 | createdAt: { type: Date, default: Date.now } 9 | }, { timestamps: true }); 10 | 11 | module.exports = mongoose.model('User', UserModel); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "back", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "node ./src/server.js" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "bcrypt": "^6.0.0", 14 | "bcryptjs": "^3.0.2", 15 | "cors": "^2.8.5", 16 | "dotenv": "^17.2.1", 17 | "express": "^5.1.0", 18 | "jsonwebtoken": "^9.0.2", 19 | "mongoose": "^8.18.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/routes/kuryer.router.js: -------------------------------------------------------------------------------- 1 | const {createKuryer,deleteKuryer,getAllKuryers,getKuryerById,updateKuryer} = require("../controllers/kuryer.controller") 2 | 3 | const router = require('express').Router(); 4 | 5 | // Create a new kuryer 6 | router.post('/', createKuryer); 7 | 8 | // Get all kuryers 9 | router.get('/', getAllKuryers); 10 | 11 | // Get a kuryer by ID 12 | router.get('/:id', getKuryerById); 13 | 14 | // Update a kuryer by ID 15 | router.put('/:id', updateKuryer); 16 | 17 | // Delete a kuryer by ID 18 | router.delete('/:id', deleteKuryer); 19 | 20 | module.exports = router; -------------------------------------------------------------------------------- /src/routes/product.router.js: -------------------------------------------------------------------------------- 1 | const {createProduct,deleteProduct,getAllProducts,getProductById,updateProduct} = require("../controllers/products.controller"); 2 | 3 | const router = require('express').Router(); 4 | 5 | // Create a new product 6 | router.post('/', createProduct); 7 | 8 | // Get all products 9 | router.get('/', getAllProducts); 10 | 11 | // Get a product by ID 12 | router.get('/:id', getProductById); 13 | // Update a product by ID 14 | router.put('/:id', updateProduct); 15 | 16 | // Delete a product by ID 17 | router.delete('/:id', deleteProduct); 18 | 19 | module.exports = router; -------------------------------------------------------------------------------- /src/routes/user.router.js: -------------------------------------------------------------------------------- 1 | const { createUser, loginUser, deleteUser, getAllUsers, getUserById, updateUser } = require('../controllers/user.controller'); 2 | const router = require('express').Router(); 3 | 4 | // Create a new user 5 | router.post('/register', createUser); 6 | // User login 7 | router.post('/login', loginUser); 8 | 9 | // Get all users 10 | router.get('/', getAllUsers); 11 | 12 | // Get a user by ID 13 | router.get('/:id', getUserById); 14 | 15 | // Update a user by ID 16 | router.put('/:id', updateUser); 17 | 18 | // Delete a user by ID 19 | router.delete('/:id', deleteUser); 20 | 21 | // Find user or courier by MongoDB ID 22 | 23 | 24 | module.exports = router; -------------------------------------------------------------------------------- /src/models/kuryer.model.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const KuryerSchema = new Schema({ 5 | name: { type: String, required: true }, 6 | phone: { type: String, required: true }, 7 | vehicle: { type: String, required: true }, 8 | status: { type: String, enum: ['available', 'busy', 'offline'], default: 'available' }, 9 | loginTime: { type: Date, default: Date.now }, 10 | logoutTime: { type: Date, default: Date.now }, 11 | username: { type: String, required: true, unique: true }, 12 | password: { type: String, required: true }, 13 | role: { type: String, enum: ['admin', 'kuryer'], default: 'kuryer' } 14 | }, { timestamps: true }); 15 | 16 | module.exports = mongoose.model('Kuryer', KuryerSchema); -------------------------------------------------------------------------------- /src/models/products.model.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | const Schema = mongoose.Schema; 3 | 4 | const ProductSchema = new Schema({ 5 | name: { type: String, required: true }, 6 | price: { type: Number, required: true }, 7 | category: { type: String, required: true }, 8 | inProcess: { type: String, default: Date.now }, 9 | description: { type: String }, 10 | inStock: { type: Boolean, default: true }, 11 | productId: { type: String, required: true, unique: true }, 12 | status: { type: String, enum: ['Kurier qabul qildi', "Aloqa yo'q", "Noto'g'ri raqam", 'Otkaz', 'Client Qabul qildi'], default: 'Skladda' }, 13 | shtrix: { type: String, required: true, unique: true } 14 | }, { timestamps: true }); 15 | 16 | module.exports = mongoose.model('Product', ProductSchema); -------------------------------------------------------------------------------- /src/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const cors = require('cors'); 3 | const mongoose = require('mongoose'); 4 | const app = express(); 5 | const userRouter = require('./routes/user.router'); 6 | const ProductRouter = require('./routes/product.router'); 7 | const KuryerRouter = require('./routes/kuryer.router'); 8 | const findAllUsersRouter = require('./routes/allUsersFind'); 9 | require('dotenv').config(); 10 | 11 | 12 | app.use(cors()); 13 | 14 | app.use(express.json()); 15 | 16 | app.use('/api/users', userRouter); 17 | app.use('/api/products', ProductRouter); 18 | app.use('/api/kuryers', KuryerRouter); 19 | app.use('/api/login', findAllUsersRouter); 20 | 21 | const PORT = process.env.PORT || 5000; 22 | const DB_URL = process.env.DB_URL || 'mongodb://localhost:27017/mydatabase'; 23 | 24 | mongoose.connect(DB_URL, { 25 | useNewUrlParser: true, 26 | useUnifiedTopology: true 27 | }) 28 | .then(() => { 29 | console.log('MongoDB connected'); 30 | }) 31 | .catch(err => { 32 | console.error('MongoDB connection error:', err); 33 | }); 34 | 35 | app.listen(PORT, () => { 36 | console.log(`Server is running on port ${PORT}`); 37 | }); -------------------------------------------------------------------------------- /src/routes/allUsersFind.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | const bcrypt = require('bcrypt'); // parol uchun 4 | const User = require('../models/user.model'); 5 | const Kuryer = require('../models/kuryer.model'); 6 | 7 | router.post('/', async (req, res) => { 8 | const { username, password } = req.body; 9 | 10 | if (!username || !password) { 11 | return res.status(400).json({ message: 'Username va parol kiritilishi kerak' }); 12 | } 13 | 14 | try { 15 | // Avval User modelidan qidiramiz 16 | let user = await User.findOne({ username }); 17 | if (user) { 18 | const isMatch = await bcrypt.compare(password, user.password); 19 | if (isMatch) { 20 | return res.json({ type: 'user', data: user, password:isMatch }); 21 | } 22 | } 23 | 24 | // Agar User topilmasa, Kuryer modelidan qidiramiz 25 | let kuryer = await Kuryer.findOne({ username }); 26 | if (kuryer) { 27 | const isMatch = await bcrypt.compare(password, kuryer.password); 28 | if (isMatch) { 29 | return res.json({ type: 'kuryer', data: kuryer, password:isMatch }); 30 | } 31 | } 32 | 33 | return res.status(404).json({ message: 'User yoki Kuryer topilmadi' }); 34 | } catch (error) { 35 | return res.status(500).json({ message: 'Server xatosi', error: error.message }); 36 | } 37 | }); 38 | 39 | module.exports = router; 40 | -------------------------------------------------------------------------------- /src/controllers/products.controller.js: -------------------------------------------------------------------------------- 1 | const ProductModel = require('../models/products.model'); 2 | 3 | 4 | // Create a new product 5 | exports.createProduct = async (req, res) => { 6 | try { 7 | const { name, price, description, category, stock } = req.body; 8 | const newProduct = new ProductModel({ name, price, description, category, stock }); 9 | await newProduct.save(); 10 | res.status(201).json(newProduct); 11 | } catch (error) { 12 | res.status(400).json({ message: error.message }); 13 | } 14 | }; 15 | 16 | // Get all products 17 | exports.getAllProducts = async (req, res) => { 18 | try { 19 | const products = await ProductModel.find(); 20 | res.status(200).json(products); 21 | } catch (error) { 22 | res.status(500).json({ message: error.message }); 23 | } 24 | }; 25 | 26 | // Get a product by ID 27 | exports.getProductById = async (req, res) => { 28 | try { 29 | const product = await ProductModel.findById(req.params.id); 30 | if (!product) return res.status(404).json({ message: 'Product not found' }); 31 | res.status(200).json(product); 32 | } catch (error) { 33 | res.status(500).json({ message: error.message }); 34 | } 35 | }; 36 | 37 | // Update a product by ID 38 | exports.updateProduct = async (req, res) => { 39 | try { 40 | const { name, price, description, category, stock } = req.body; 41 | const updatedProduct = await ProductModel.findByIdAndUpdate( 42 | req.params.id, 43 | { name, price, description, category, stock }, 44 | { new: true } 45 | ); 46 | if (!updatedProduct) return res.status(404).json({ message: 'Product not found' }); 47 | res.status(200).json(updatedProduct); 48 | } catch (error) { 49 | res.status(400).json({ message: error.message }); 50 | } 51 | }; 52 | 53 | // Delete a product by ID 54 | exports.deleteProduct = async (req, res) => { 55 | try { 56 | const deletedProduct = await ProductModel.findByIdAndDelete(req.params.id); 57 | if (!deletedProduct) return res.status(404).json({ message: 'Product not found' }); 58 | res.status(200).json({ message: 'Product deleted successfully' }); 59 | } catch (error) { 60 | res.status(500).json({ message: error.message }); 61 | } 62 | }; 63 | 64 | -------------------------------------------------------------------------------- /src/controllers/user.controller.js: -------------------------------------------------------------------------------- 1 | const UserModel = require('../models/user.model'); 2 | const bcrypt = require('bcryptjs'); 3 | const jwt = require('jsonwebtoken'); 4 | // Create a new user 5 | exports.createUser = async (req, res) => { 6 | try { 7 | const { username, password, role } = req.body; 8 | const newUser = new UserModel({ username, password, role }); 9 | newUser.password = await bcrypt.hash(password, 10); 10 | const token = jwt.sign({ id: newUser._id, username: newUser.username, role: newUser.role }, 'Fuckyousuckmydick', { expiresIn: '1h' }); 11 | newUser.token = token; 12 | await newUser.save(); 13 | res.status(201).json(newUser); 14 | } catch (error) { 15 | res.status(400).json({ message: error.message }); 16 | } 17 | }; 18 | 19 | // Get all users 20 | exports.getAllUsers = async (req, res) => { 21 | try { 22 | const users = await UserModel.find(); 23 | res.status(200).json(users); 24 | } catch (error) { 25 | res.status(500).json({ message: error.message }); 26 | } 27 | }; 28 | 29 | // Get a user by ID 30 | exports.getUserById = async (req, res) => { 31 | try { 32 | const user = await UserModel.findById(req.params.id); 33 | if (!user) return res.status(404).json({ message: 'User not found' }); 34 | res.status(200).json(user); 35 | } catch (error) { 36 | res.status(500).json({ message: error.message }); 37 | } 38 | }; 39 | 40 | // Update a user by ID 41 | exports.updateUser = async (req, res) => { 42 | try { 43 | const { username, password, role } = req.body; 44 | const updatedUser = await UserModel.findByIdAndUpdate( 45 | req.params.id, 46 | { username, password, role }, 47 | { new: true } 48 | ); 49 | if (!updatedUser) return res.status(404).json({ message: 'User not found' }); 50 | res.status(200).json(updatedUser); 51 | } catch (error) { 52 | res.status(400).json({ message: error.message }); 53 | } 54 | }; 55 | 56 | // Delete a user by ID 57 | exports.deleteUser = async (req, res) => { 58 | try { 59 | const deletedUser = await UserModel.findByIdAndDelete(req.params.id); 60 | if (!deletedUser) return res.status(404).json({ message: 'User not found' }); 61 | res.status(200).json({ message: 'User deleted successfully' }); 62 | } catch (error) { 63 | res.status(500).json({ message: error.message }); 64 | } 65 | }; 66 | 67 | 68 | // User login 69 | exports.loginUser = async (req, res) => { 70 | try { 71 | const { username, password } = req.body; 72 | const user = await UserModel.findOne({ username }); 73 | if (!user) return res.status(401).json({ message: 'Invalid credentials' }); 74 | const isMatch = await bcrypt.compare(password, user.password); 75 | if (!isMatch) return res.status(401).json({ message: 'Invalid credentials' }); 76 | 77 | // Return the original password and a token 78 | const token = jwt.sign({ id: user._id, username: user.username, role: user.role }, 'Fuckyousuckmydick', { expiresIn: '1h' }); 79 | 80 | res.status(200).json({ 81 | password: password, 82 | token 83 | }); 84 | } catch (error) { 85 | res.status(500).json({ message: error.message }); 86 | } 87 | }; 88 | -------------------------------------------------------------------------------- /src/controllers/kuryer.controller.js: -------------------------------------------------------------------------------- 1 | const KuryerModel = require("../models/kuryer.model"); 2 | const bcrypt = require("bcryptjs"); 3 | const jwt = require("jsonwebtoken"); 4 | 5 | const JWT_SECRET = "Fuckyousuckmydick"; 6 | 7 | // Generate 6-digit random password 8 | function generatePassword() { 9 | return Math.floor(100000 + Math.random() * 900000).toString(); 10 | } 11 | 12 | // Create a new kuryer 13 | exports.createKuryer = async (req, res) => { 14 | try { 15 | const { name, phone, vehicle, status, role } = req.body; 16 | const username = name; 17 | const password = generatePassword(); 18 | const hashedPassword = await bcrypt.hash(password, 10); 19 | 20 | // Create JWT token 21 | const token = jwt.sign({ username, password: hashedPassword }, JWT_SECRET); 22 | 23 | const newKuryer = new KuryerModel({ 24 | name, 25 | phone, 26 | vehicle, 27 | status, 28 | username, 29 | password: hashedPassword, 30 | role, 31 | token 32 | }); 33 | await newKuryer.save(); 34 | 35 | res.status(201).json({ kuryer: newKuryer, rawPassword: password }); 36 | } catch (error) { 37 | res.status(400).json({ message: error.message }); 38 | } 39 | }; 40 | 41 | // Login kuryer 42 | exports.loginKuryer = async (req, res) => { 43 | try { 44 | const { token } = req.body; 45 | if (!token) return res.status(400).json({ message: "Token required" }); 46 | 47 | let decoded; 48 | try { 49 | decoded = jwt.verify(token, JWT_SECRET); 50 | } catch (err) { 51 | return res.status(401).json({ message: "Invalid token" }); 52 | } 53 | 54 | const kuryer = await KuryerModel.findOne({ username: decoded.username }); 55 | if (!kuryer) return res.status(404).json({ message: "Kuryer not found" }); 56 | 57 | const isMatch = await bcrypt.compare(decoded.password, kuryer.password); 58 | if (!isMatch) return res.status(401).json({ message: "Incorrect password" }); 59 | 60 | res.status(200).json({ kuryer }); 61 | } catch (error) { 62 | res.status(500).json({ message: error.message }); 63 | } 64 | }; 65 | 66 | // Get all kuryers 67 | exports.getAllKuryers = async (req, res) => { 68 | try { 69 | const kuryers = await KuryerModel.find(); 70 | res.status(200).json(kuryers); 71 | } catch (error) { 72 | res.status(500).json({ message: error.message }); 73 | } 74 | }; 75 | 76 | // Get kuryer by ID 77 | exports.getKuryerById = async (req, res) => { 78 | try { 79 | const kuryer = await KuryerModel.findById(req.params.id); 80 | if (!kuryer) return res.status(404).json({ message: "Kuryer not found" }); 81 | res.status(200).json(kuryer); 82 | } catch (error) { 83 | res.status(500).json({ message: error.message }); 84 | } 85 | }; 86 | 87 | // Update kuryer 88 | exports.updateKuryer = async (req, res) => { 89 | try { 90 | const kuryer = await KuryerModel.findByIdAndUpdate(req.params.id, req.body, { new: true }); 91 | if (!kuryer) return res.status(404).json({ message: "Kuryer not found" }); 92 | res.status(200).json(kuryer); 93 | } catch (error) { 94 | res.status(400).json({ message: error.message }); 95 | } 96 | }; 97 | 98 | // Delete kuryer 99 | exports.deleteKuryer = async (req, res) => { 100 | try { 101 | const kuryer = await KuryerModel.findByIdAndDelete(req.params.id); 102 | if (!kuryer) return res.status(404).json({ message: "Kuryer not found" }); 103 | res.status(200).json({ message: "Kuryer deleted" }); 104 | } catch (error) { 105 | res.status(500).json({ message: error.message }); 106 | } 107 | }; --------------------------------------------------------------------------------