├── index.js ├── ApplicationController.js └── UserController.js /index.js: -------------------------------------------------------------------------------- 1 | export * as UserController from './UserController.js' 2 | export * as ApplicationController from './ApplicationController.js' -------------------------------------------------------------------------------- /ApplicationController.js: -------------------------------------------------------------------------------- 1 | import ApplicationModel from '../models/application.js' 2 | import UserModel from '../models/user.js' 3 | 4 | export const sendingApplication = async (req, res) => { 5 | try { 6 | 7 | const doc = new ApplicationModel({ 8 | credit: req.body.credit, 9 | period: req.body.period, 10 | salary: req.body.salary, 11 | expenses: req.body.expenses, 12 | purpose : req.body.purpose, 13 | percent : req.body.percent, 14 | payment : req.body.payment, 15 | startDate : req.body.startDate, 16 | endDate : req.body.endDate, 17 | status : 2, 18 | user: req.userId, 19 | }) 20 | 21 | const application = await doc.save() 22 | 23 | res.json(application) 24 | } catch (err) { 25 | console.log(err) 26 | res.status(500).json({ 27 | message: 'Не удалось отправить заявку' 28 | }) 29 | } 30 | } 31 | 32 | export const getMyApplications = async (req, res) => { 33 | try { 34 | const userId = req.userId 35 | 36 | const applications = await ApplicationModel.find({ user: userId }).populate('user') 37 | 38 | res.json(applications) 39 | } catch (err) { 40 | console.log(err) 41 | res.status(500).json({ 42 | message: 'Не удалось получить заявки' 43 | }) 44 | } 45 | } 46 | 47 | export const deleteMyApplication = async (req, res) => { 48 | try { 49 | const userId = req.userId 50 | 51 | const activeApplication = await ApplicationModel.findOneAndDelete({ user: userId, status: 2 }, { sort: { createdAt: -1 } }) 52 | 53 | if (activeApplication) { 54 | res.status(200).json({ message: 'Активная заявка успешно удалена' }) 55 | } else { 56 | res.status(404).json({ message: 'Активная заявка не найдена' }) 57 | } 58 | } catch (err) { 59 | console.error(err) 60 | res.status(500).json({ message: 'Не удалось удалить активную заявку' }) 61 | } 62 | } 63 | 64 | export const getAllApplications = async (req, res) => { 65 | try { 66 | const applications = await ApplicationModel.find().populate('user') 67 | res.json(applications) 68 | } catch (err) { 69 | console.log(err) 70 | res.status(500).json({ 71 | message: 'Не удалось получить заявки' 72 | }) 73 | } 74 | } 75 | 76 | export const updateStatus = async (req, res) => { 77 | try { 78 | const { applicationPassport, newStatus } = req.body 79 | 80 | const existingUser = await UserModel.findOne({ passport: applicationPassport }) 81 | 82 | if (existingUser) { 83 | 84 | let applications = await ApplicationModel.find({ user: existingUser._id, status: 2 }) 85 | 86 | for (let application of applications) { 87 | application.status = newStatus 88 | await application.save() 89 | } 90 | 91 | res.json({ message: 'Статус успешно обновлен' }) 92 | } else { 93 | res.status(404).json({ message: 'Пользователь не найден' }); 94 | } 95 | } catch (err) { 96 | console.log(err) 97 | res.status(500).json({ 98 | message: 'Не удалось обновить статус' 99 | }) 100 | } 101 | } -------------------------------------------------------------------------------- /UserController.js: -------------------------------------------------------------------------------- 1 | import jwt from 'jsonwebtoken' 2 | import bcrypt from 'bcrypt' 3 | 4 | import UserModel from '../models/user.js' 5 | import LogModel from '../models/log.js' 6 | 7 | export const register = async (req, res) => { 8 | try { 9 | const phoneExists = await UserModel.exists({ number: req.body.number }) 10 | if (phoneExists) { 11 | return res.status(409).json({ 12 | message: 'Номер телефона уже зарегистрирован' 13 | }) 14 | } 15 | 16 | const passportExists = await UserModel.exists({ passport: req.body.passport }) 17 | if (passportExists) { 18 | return res.status(409).json({ 19 | message: 'Паспорт уже зарегистрирован' 20 | }) 21 | } 22 | 23 | const emailExists = await UserModel.exists({ email: req.body.email }) 24 | if (emailExists) { 25 | return res.status(409).json({ 26 | message: 'Email уже зарегистрирован' 27 | }) 28 | } 29 | 30 | const password = req.body.password 31 | const salt = await bcrypt.genSalt(10) 32 | const hash = await bcrypt.hash(password, salt) 33 | 34 | const doc = new UserModel({ 35 | name: req.body.name, 36 | surname: req.body.surname, 37 | number: req.body.number, 38 | passport: req.body.passport, 39 | email: req.body.email, 40 | passwordHash : hash 41 | }) 42 | 43 | const user = await doc.save() 44 | 45 | const token = jwt.sign( 46 | { 47 | _id: user._id 48 | }, 49 | 'secretkey', 50 | { 51 | expiresIn: '30d' 52 | } 53 | ) 54 | 55 | const {passwordHash, ...userData} = user._doc 56 | 57 | res.json({ 58 | ...userData, 59 | token 60 | }) 61 | } catch (error) { 62 | console.error(error); 63 | res.status(500).json({ 64 | message: 'Произошла ошибка на сервере. Пожалуйста, попробуйте еще раз.' 65 | }) 66 | } 67 | } 68 | 69 | export const login = async (req, res) => { 70 | try { 71 | const user = await UserModel.findOne({ email: req.body.email }) 72 | 73 | if (!user) { 74 | return res.status(404).json({ 75 | message: 'Неверный логин или пароль' 76 | }) 77 | } 78 | 79 | const isValidPass = await bcrypt.compare(req.body.password, user._doc.passwordHash) 80 | 81 | if (!isValidPass) { 82 | return res.status(400).json({ 83 | message: 'Неверный логин или пароль' 84 | }) 85 | } 86 | 87 | if (user.isBanned) { 88 | return res.status(400).json({ 89 | message: 'Ваша учётная запись заблокирована' 90 | }) 91 | } 92 | 93 | const token = jwt.sign( 94 | { 95 | _id: user._id 96 | }, 97 | 'secretkey', 98 | { 99 | expiresIn: '30d' 100 | } 101 | ) 102 | 103 | const {passwordHash, ...userData} = user._doc 104 | 105 | res.json({ 106 | ...userData, 107 | token 108 | }) 109 | } catch (err) { 110 | console.log(err) 111 | res.status(500).json({ 112 | message: 'Не удалось авторизоваться' 113 | }) 114 | } 115 | } 116 | 117 | export const getMe = async (req, res) => { 118 | try { 119 | const user = await UserModel.findById(req.userId) 120 | 121 | if (!user) { 122 | return res.status(404).json({ 123 | message: 'Пользователь не найден' 124 | }) 125 | } 126 | 127 | const {passwordHash, ...userData} = user._doc 128 | 129 | res.json(userData) 130 | } catch (err) { 131 | console.log(err) 132 | res.status(500).json({ 133 | message: 'Не удалось получить информацию' 134 | }) 135 | } 136 | } 137 | 138 | export const updateUser = async (req, res) => { 139 | try { 140 | const { name, surname, number, passport, email } = req.body 141 | 142 | const existingUser = await UserModel.findById(req.userId) 143 | if (!existingUser) { 144 | return res.status(404).json({ 145 | message: 'Пользователь не найден' 146 | }) 147 | } 148 | 149 | if (number !== existingUser.number) { 150 | const phoneExists = await UserModel.exists({ number }) 151 | if (phoneExists) { 152 | return res.status(409).json({ 153 | message: 'Номер телефона уже зарегистрирован' 154 | }) 155 | } 156 | } 157 | 158 | if (passport !== existingUser.passport) { 159 | const passportExists = await UserModel.exists({ passport }) 160 | if (passportExists) { 161 | return res.status(409).json({ 162 | message: 'Паспорт уже зарегистрирован' 163 | }) 164 | } 165 | } 166 | 167 | if (email !== existingUser.email) { 168 | const emailExists = await UserModel.exists({ email }) 169 | if (emailExists) { 170 | return res.status(409).json({ 171 | message: 'Email уже зарегистрирован' 172 | }) 173 | } 174 | } 175 | 176 | existingUser.name = name 177 | existingUser.surname = surname 178 | existingUser.passport = passport 179 | existingUser.email = email 180 | 181 | const updatedUser = await existingUser.save() 182 | 183 | const { passwordHash, ...userData } = updatedUser._doc 184 | res.json(userData) 185 | } catch (error) { 186 | console.error(error) 187 | res.status(500).json({ 188 | message: 'Произошла ошибка на сервере. Пожалуйста, попробуйте еще раз.' 189 | }) 190 | } 191 | } 192 | 193 | export const updatePassword = async (req, res) => { 194 | try { 195 | const { oldPassword, newPassword } = req.body 196 | 197 | const existingUser = await UserModel.findById(req.userId) 198 | if (!existingUser) { 199 | return res.status(404).json({ 200 | message: 'Пользователь не найден' 201 | }) 202 | } 203 | 204 | const isValidPass = await bcrypt.compare(oldPassword, existingUser._doc.passwordHash) 205 | 206 | if (!isValidPass) { 207 | return res.status(400).json({ 208 | message: 'Неверный пароль' 209 | }) 210 | } 211 | 212 | const password = newPassword 213 | const salt = await bcrypt.genSalt(10) 214 | const hash = await bcrypt.hash(password, salt) 215 | 216 | existingUser.passwordHash = hash 217 | 218 | const updatedUser = await existingUser.save() 219 | 220 | const { passwordHash, ...userData } = updatedUser._doc 221 | res.json(userData) 222 | } catch (error) { 223 | console.error(error) 224 | res.status(500).json({ 225 | message: 'Произошла ошибка на сервере. Пожалуйста, попробуйте еще раз.' 226 | }) 227 | } 228 | } 229 | 230 | export const getAllAccounts = async (req, res) => { 231 | try { 232 | const accounts = await UserModel.find() 233 | res.json(accounts) 234 | } catch (err) { 235 | console.log(err) 236 | res.status(500).json({ 237 | message: 'Не удалось получить аккаунты' 238 | }) 239 | } 240 | } 241 | 242 | export const ban = async (req, res) => { 243 | try { 244 | const { userPassport } = req.body 245 | 246 | const existingUser = await UserModel.findOne({ passport: userPassport }) 247 | 248 | if (existingUser) { 249 | existingUser.isBanned = !existingUser.isBanned 250 | await existingUser.save() 251 | 252 | res.json({ existingUser }) 253 | } else { 254 | res.status(404).json({ 255 | message: 'Пользователь не найден' 256 | }) 257 | } 258 | } catch (err) { 259 | console.error(err) 260 | res.status(500).json({ 261 | message: 'Не удалось обновить статус пользователя' 262 | }) 263 | } 264 | } 265 | 266 | export const createAdmin = async (req, res) => { 267 | try { 268 | const phoneExists = await UserModel.exists({ number: req.body.number }) 269 | if (phoneExists) { 270 | return res.status(409).json({ 271 | message: 'Номер телефона уже зарегистрирован' 272 | }) 273 | } 274 | 275 | const passportExists = await UserModel.exists({ passport: req.body.passport }) 276 | if (passportExists) { 277 | return res.status(409).json({ 278 | message: 'Паспорт уже зарегистрирован' 279 | }) 280 | } 281 | 282 | const emailExists = await UserModel.exists({ email: req.body.email }) 283 | if (emailExists) { 284 | return res.status(409).json({ 285 | message: 'Email уже зарегистрирован' 286 | }) 287 | } 288 | 289 | const password = req.body.password 290 | const salt = await bcrypt.genSalt(10) 291 | const hash = await bcrypt.hash(password, salt) 292 | 293 | const doc = new UserModel({ 294 | name: req.body.name, 295 | surname: req.body.surname, 296 | number: req.body.number, 297 | passport: req.body.passport, 298 | email: req.body.email, 299 | role: true, 300 | passwordHash : hash 301 | }) 302 | 303 | const user = await doc.save() 304 | 305 | const token = jwt.sign( 306 | { 307 | _id: user._id 308 | }, 309 | 'secretkey', 310 | { 311 | expiresIn: '30d' 312 | } 313 | ) 314 | 315 | const {passwordHash, ...userData} = user._doc 316 | 317 | res.json({ 318 | ...userData, 319 | token 320 | }) 321 | } catch (error) { 322 | console.error(error); 323 | res.status(500).json({ 324 | message: 'Произошла ошибка на сервере. Пожалуйста, попробуйте еще раз.' 325 | }) 326 | } 327 | } 328 | 329 | export const createLog = async (req, res) => { 330 | try { 331 | const { type } = req.body 332 | 333 | let boolType = true 334 | if (type === 'logout') { 335 | boolType = false 336 | } 337 | 338 | const doc = new LogModel({ 339 | type: boolType, 340 | user: req.userId 341 | }) 342 | 343 | const log = await doc.save() 344 | 345 | res.json({ log }) 346 | } catch (error) { 347 | console.error(error); 348 | res.status(500).json({ 349 | message: 'Произошла ошибка на сервере. Пожалуйста, попробуйте еще раз.' 350 | }) 351 | } 352 | } 353 | 354 | export const getAllLogs = async (req, res) => { 355 | try { 356 | const logs = await LogModel.find().populate('user') 357 | res.json(logs) 358 | } catch (err) { 359 | console.log(err) 360 | res.status(500).json({ 361 | message: 'Не удалось получить аккаунты' 362 | }) 363 | } 364 | } --------------------------------------------------------------------------------