import type { Request, Response } from 'express'
import { login } from '../utils/authUtils'
import db from '../utils/db.json'
import bcrypt from 'bcryptjs'
import { v4 as uuidv4 } from 'uuid'

export const authLogin = (req: Request, res: Response) => {
  try {
    const { email, password } = req.body
    const user = login(email, password)
    res.json(user)
  } catch (error) {
    res.status(401).json({ message: "xd" })
  }
}

export const registerUser = (req: Request, res: Response) => {
  try {
    const { name, email, password, role } = req.body

    // Проверка существования пользователя
    const existingUser = db.get('users')
      .find({ email })
      .value()

    if (existingUser) {
      return res.status(400).json({ message: 'Пользователь с таким email уже существует' })
    }

    // Хеширование пароля
    const salt = bcrypt.genSaltSync(10)
    const hashedPassword = bcrypt.hashSync(password, salt)

    const newUser = {
      id: uuidv4(),
      name,
      email,
      password: hashedPassword,
      role: role || 'Пользователь',
      status: 'Активен'
    }

    db.get('users')
      .push(newUser)
      .write()

    // Генерация токена
    const token = require('../utils/authUtils').generateToken(newUser.id)

    res.status(201).json({
      id: newUser.id,
      name: newUser.name,
      email: newUser.email,
      role: newUser.role,
      token
    })
  } catch (error) {
    res.status(500).json({ message: 'Ошибка регистрации' })
  }
}



import type { Request, Response } from 'express'
import db from '../utils/db.json'
import { v4 as uuidv4 } from 'uuid'

export const getAllServers = (req: Request, res: Response) => {
  const servers = db.get('servers').value()
  res.json(servers)
}

export const createServer = (req: Request, res: Response) => {
  const serverData = req.body

  const newServer = {
    id: uuidv4(),
    ...serverData,
    status: serverData.status || 'Остановлен',
    cpuUsage: 0,
    memoryUsage: 0
  }

  db.get('servers')
    .push(newServer)
    .write()

  res.status(201).json(newServer)
}

export const updateServer = (req: Request, res: Response) => {
  const { id } = req.params
  const updatedData = req.body

  const serverIndex = db.get('servers')
    .findIndex({ id })
    .value()

  if (serverIndex === -1) {
    return res.status(404).json({ message: 'Сервер не найден' })
  }

  const updatedServer = db.get('servers')
    .find({ id })
    .assign(updatedData)
    .write()

  res.json(updatedServer)
}

export const deleteServer = (req: Request, res: Response) => {
  const { id } = req.params

  const deletedServer = db.get('servers')
    .remove({ id })
    .write()

  if (deletedServer.length === 0) {
    return res.status(404).json({ message: 'Сервер не найден' })
  }

  res.json({ message: 'Сервер успешно удален' })
}

export const toggleServerStatus = (req: Request, res: Response) => {
  const { id } = req.params

  const server = db.get('servers')
    .find({ id })
    .value()

  if (!server) {
    return res.status(404).json({ message: 'Сервер не найден' })
  }

  const newStatus = server.status === 'Запущен' 
    ? 'Остановлен' 
    : 'Запущен'

  const updatedServer = db.get('servers')
    .find({ id })
    .assign({ status: newStatus })
    .write()

  res.json(updatedServer)
}



import type { Request, Response } from 'express'
import db from '../utils/db.json'
import { v4 as uuidv4 } from 'uuid'

export const getAllTickets = (req: Request, res: Response) => {
  const tickets = db.get('tickets').value()
  res.json(tickets)
}

export const createTicket = (req: Request, res: Response) => {
  const ticketData = req.body

  const newTicket = {
    id: uuidv4(),
    ...ticketData,
    status: ticketData.status || 'Новый',
    priority: ticketData.priority || 'Низкий',
    createdAt: new Date().toISOString()
  }

  db.get('tickets')
    .push(newTicket)
    .write()

  res.status(201).json(newTicket)
}

export const updateTicket = (req: Request, res: Response) => {
  const { id } = req.params
  const updatedData = req.body

  const ticketIndex = db.get('tickets')
    .findIndex({ id })
    .value()

  if (ticketIndex === -1) {
    return res.status(404).json({ message: 'Тикет не найден' })
  }

  const updatedTicket = db.get('tickets')
    .find({ id })
    .assign(updatedData)
    .write()

  res.json(updatedTicket)
}

export const deleteTicket = (req: Request, res: Response) => {
  const { id } = req.params

  const deletedTicket = db.get('tickets')
    .remove({ id })
    .write()

  if (deletedTicket.length === 0) {
    return res.status(404).json({ message: 'Тикет не найден' })
  }

  res.json({ message: 'Тикет успешно удален' })
}



import type { Request, Response } from 'express'
import db from '../utils/db.json'
import { v4 as uuidv4 } from 'uuid'

export const getAllTickets = (req: Request, res: Response) => {
  const tickets = db.get('tickets').value()
  res.json(tickets)
}

export const createTicket = (req: Request, res: Response) => {
  const ticketData = req.body

  const newTicket = {
    id: uuidv4(),
    ...ticketData,
    status: ticketData.status || 'Новый',
    priority: ticketData.priority || 'Низкий',
    createdAt: new Date().toISOString()
  }

  db.get('tickets')
    .push(newTicket)
    .write()

  res.status(201).json(newTicket)
}

export const updateTicket = (req: Request, res: Response) => {
  const { id } = req.params
  const updatedData = req.body

  const ticketIndex = db.get('tickets')
    .findIndex({ id })
    .value()

  if (ticketIndex === -1) {
    return res.status(404).json({ message: 'Тикет не найден' })
  }

  const updatedTicket = db.get('tickets')
    .find({ id })
    .assign(updatedData)
    .write()

  res.json(updatedTicket)
}

export const deleteTicket = (req: Request, res: Response) => {
  const { id } = req.params

  const deletedTicket = db.get('tickets')
    .remove({ id })
    .write()

  if (deletedTicket.length === 0) {
    return res.status(404).json({ message: 'Тикет не найден' })
  }

  res.json({ message: 'Тикет успешно удален' })
}



import { Request, Response } from 'express'
import db from '../utils/db.json'
import bcrypt from 'bcryptjs'
import { v4 as uuidv4 } from 'uuid'

export const getAllUsers = (req: Request, res: Response) => {
  const users = db.get('users').value()
  res.json(users)
}

export const createUser = (req: Request, res: Response) => {
  const { name, email, password, role } = req.body

  // Проверка существования пользователя
  const existingUser = db.get('users')
    .find({ email })
    .value()

  if (existingUser) {
    return res.status(400).json({ message: 'Пользователь с таким email уже существует' })
  }

  // Хеширование пароля
  const salt = bcrypt.genSaltSync(10)
  const hashedPassword = bcrypt.hashSync(password, salt)

  const newUser = {
    id: uuidv4(),
    name,
    email,
    password: hashedPassword,
    role: role || 'Пользователь',
    status: 'Активен'
  }

  db.get('users')
    .push(newUser)
    .write()

  res.status(201).json(newUser)
}

export const updateUser = (req: Request, res: Response) => {
  const { id } = req.params
  const updatedData = req.body

  const userIndex = db.get('users')
    .findIndex({ id })
    .value()

  if (userIndex === -1) {
    return res.status(404).json({ message: 'Пользователь не найден' })
  }

  const updatedUser = db.get('users')
    .find({ id })
    .assign(updatedData)
    .write()

  res.json(updatedUser)
}

export const deleteUser = (req: Request, res: Response) => {
  const { id } = req.params

  const deletedUser = db.get('users')
    .remove({ id })
    .write()

  if (deletedUser.length === 0) {
    return res.status(404).json({ message: 'Пользователь не найден' })
  }

  res.json({ message: 'Пользователь успешно удален' })
}



import { Request, Response } from 'express'
import db from '../utils/db.js'
import bcrypt from 'bcryptjs'
import { v4 as uuidv4 } from 'uuid'

export const getAllUsers = (req: Request, res: Response) => {
  const users = db.get('users').value()
  res.json(users)
}

export const createUser = (req: Request, res: Response) => {
  const { name, email, password, role } = req.body

  // Проверка существования пользователя
  const existingUser = db.get('users')
    .find({ email })
    .value()

  if (existingUser) {
    return res.status(400).json({ message: 'Пользователь с таким email уже существует' })
  }

  // Хеширование пароля
  const salt = bcrypt.genSaltSync(10)
  const hashedPassword = bcrypt.hashSync(password, salt)

  const newUser = {
    id: uuidv4(),
    name,
    email,
    password: hashedPassword,
    role: role || 'Пользователь',
    status: 'Активен'
  }

  db.get('users')
    .push(newUser)
    .write()

  res.status(201).json(newUser)
}

export const updateUser = (req: Request, res: Response) => {
  const { id } = req.params
  const updatedData = req.body

  const userIndex = db.get('users')
    .findIndex({ id })
    .value()

  if (userIndex === -1) {
    return res.status(404).json({ message: 'Пользователь не найден' })
  }

  const updatedUser = db.get('users')
    .find({ id })
    .assign(updatedData)
    .write()

  res.json(updatedUser)
}

export const deleteUser = (req: Request, res: Response) => {
  const { id } = req.params

  const deletedUser = db.get('users')
    .remove({ id })
    .write()

  if (deletedUser.length === 0) {
    return res.status(404).json({ message: 'Пользователь не найден' })
  }

  res.json({ message: 'Пользователь успешно удален' })
}



import type { Request, Response, NextFunction } from 'express'
import jwt from 'jsonwebtoken'
import db from '../utils/db.json'

const JWT_SECRET = 'your_jwt_secret_key' // В реальном проекте используйте переменные окружения

interface AuthenticatedRequest extends Request {
  user?: any
}

export const protect = (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
  let token

  if (
    req.headers.authorization && 
    req.headers.authorization.startsWith('Bearer')
  ) {
    try {
      token = req.headers.authorization.split(' ')[1]
      
      const decoded: any = jwt.verify(token, JWT_SECRET)

      const user = db.get('users')
        .find({ id: decoded.id })
        .value()

      if (!user) {
        return res.status(401).json({ message: 'Пользователь не найден' })
      }

      req.user = user
      next()
    } catch (error) {
      res.status(401).json({ 
        message: 'Не авторизован, токен не действителен',
      })
    }
  }

  if (!token) {
    res.status(401).json({ message: 'Нет авторизационного токена' })
  }
}

export const adminOnly = (req: AuthenticatedRequest, res: Response, next: NextFunction) => {
  if (req.user && req.user.role === 'Администратор') {
    next()
  } else {
    res.status(403).json({ message: 'Доступ запрещен' })
  }
}



import app from './app'

const PORT = process.env.PORT || 5000

app.listen(PORT, () => {
  console.log(`✅ Сервер запущен на порту ${PORT}`)
})



export interface Server {
    id: number
    name: string
    ip: string
    status: 'Запущен' | 'Остановлен' | 'В обслуживании'
    cpuUsage: number
    memoryUsage: number
    diskUsage?: number
    location?: string
    type?: 'Веб' | 'Базы данных' | 'Приложений'
  }



export interface SupportTicket {
    id: number
    subject: string
    requester: string
    status: 'Новый' | 'В работе' | 'Закрыт'
    priority: 'Низкий' | 'Средний' | 'Высокий'
    createdAt: Date
    description?: string
    assignedTo?: string
    messages?: TicketMessage[]
  }
  
  export interface TicketMessage {
    id: number
    author: string
    text: string
    timestamp: Date
  }



export interface User {
    id: number
    name: string
    email: string
    role: 'Администратор' | 'Менеджер' | 'Пользователь'
    status: 'Активен' | 'Заблокирован' | 'Неактивен'
    avatarUrl?: string
    lastLogin?: Date
  }



import express from 'express'
import * as userController from '../controllers/userController'

const router = express.Router()

router.route('/')
  .get(userController.getAllUsers)
  .post(userController.createUser)

router.route('/:id')
  .put(userController.updateUser)
  .delete(userController.deleteUser)

export default router



добавь всё это в один файл, исправь ошибки и добавь всё, чего не хватает этому проекту