Skip to content

Трекер обращений клиентов, где каждый авторизованный пользователь заполнив форму создаёт задачу, которая попадает к администраторам. Клиент может видеть статус ранее созданного обращения.

Notifications You must be signed in to change notification settings

conofor/ticket-tracker

Repository files navigation

Ticket Tracker - Трекер обращений клиентов

Трекер обращений клиентов, где каждый авторизованный пользователь заполнив форму создаёт задачу, которая попадает к администраторам. Клиент может видеть статус ранее созданного обращения.

Технологический стек

  • Backend: PHP 8+, PDO, MySQL
  • Frontend: HTML, jQuery, CSS
  • Архитектура: REST API, PSR-4 автозагрузка через Composer
  • База данных: MySQL с использованием внешних ключей и транзакций

Функционал

Клиентская часть

  • Регистрация и авторизация
  • Создание обращений (тикетов)
  • Просмотр своих обращений
  • Фильтрация и сортировка по: ID, дате создания, дате изменения, статусу
  • Поиск по названию и описанию
  • Просмотр статусов обращений и комментариев от администратора

Административная часть

  • Авторизация администратора
  • Просмотр всех обращений клиентов
  • Фильтрация и сортировка обращений
  • Изменение статусов обращений
  • Добавление комментариев к обращениям
  • Назначение тегов обращениям
  • CRUD операции для тегов (с выбором цвета)
  • CRUD операции для статусов

Статусы по умолчанию

  • ToDo
  • InProgress
  • Ready For Review
  • Done

Установка

1. Требования

  • PHP 8.0 или выше
  • MySQL 5.7 или выше
  • Composer
  • Apache/Nginx с mod_rewrite

2. Клонирование проекта

git clone https://github.com/conofor/ticket-tracker.git
cd ticket-tracker

3. Установка зависимостей

# Установите Composer зависимости
composer install

4. Настройка базы данных

4.1. Создайте базу данных и импортируйте схему:

mysql -u root -p < database.sql

Или через phpMyAdmin:

  1. Создайте базу данных ticket_tracker
  2. Импортируйте файл database.sql

4.2. Настройте подключение к БД:

Отредактируйте файл config/database.php:

return [
    'host' => 'localhost',
    'dbname' => 'ticket_tracker',
    'username' => 'root',      // Ваш пользователь MySQL
    'password' => '',          // Ваш пароль MySQL
    'charset' => 'utf8mb4'
];

Запуск

Apache/Nginx

  • Клиентская часть: http://ticket-tracker.local/public/client.html
  • Административная часть: http://ticket-tracker.local/public/admin.html

Учетные данные по умолчанию

Администратор

  • Логин: admin
  • Пароль: admin123

Клиент (тестовый)

  • Логин: client
  • Пароль: client123

Структура проекта

ticket-tracker/
├── composer.json              # Composer конфигурация
├── .htaccess                  # Apache rewrite rules
├── index.php                  # Точка входа API
├── database.sql               # SQL схема базы данных
├── README.md                  # Документация
├── config/
│   └── database.php          # Конфигурация БД
├── src/
│   ├── Controllers/          # Контроллеры
│   │   ├── AuthController.php
│   │   ├── TicketController.php
│   │   ├── TagController.php
│   │   └── StatusController.php
│   ├── Models/               # Модели
│   │   ├── User.php
│   │   ├── Ticket.php
│   │   ├── Tag.php
│   │   ├── Status.php
│   │   └── Comment.php
│   ├── Core/                 # Ядро приложения
│   │   ├── Database.php
│   │   ├── Router.php
│   │   └── Response.php
│   └── Middleware/           # Middleware
│       └── AuthMiddleware.php
└── public/
    ├── css/
    │   └── style.css         # Стили
    ├── js/
    │   ├── client.js         # JavaScript клиента
    │   └── admin.js          # JavaScript админа
    ├── client.html           # Клиентский интерфейс
    └── admin.html            # Административный интерфейс

API Endpoints

Аутентификация

  • POST /api/auth/register - Регистрация
  • POST /api/auth/login - Вход
  • POST /api/auth/logout - Выход
  • GET /api/auth/me - Текущий пользователь

Обращения (Tickets)

  • GET /api/tickets - Список обращений
  • GET /api/tickets/{id} - Просмотр обращения
  • POST /api/tickets - Создание обращения
  • PUT /api/tickets/{id} - Обновление обращения (только admin)
  • POST /api/tickets/{id}/comments - Добавление комментария

Теги (Tags)

  • GET /api/tags - Список тегов
  • GET /api/tags/{id} - Просмотр тега
  • POST /api/tags - Создание тега (только admin)
  • PUT /api/tags/{id} - Обновление тега (только admin)
  • DELETE /api/tags/{id} - Удаление тега (только admin)

Статусы (Statuses)

  • GET /api/statuses - Список статусов
  • GET /api/statuses/{id} - Просмотр статуса
  • POST /api/statuses - Создание статуса (только admin)
  • PUT /api/statuses/{id} - Обновление статуса (только admin)
  • DELETE /api/statuses/{id} - Удаление статуса (только admin)

Особенности реализации

Backend

  • PSR-4 автозагрузка через Composer
  • Singleton паттерн для подключения к БД
  • Prepared statements для защиты от SQL-инъекций
  • Middleware для проверки авторизации
  • REST API с JSON ответами
  • Транзакции для операций с тегами
  • Связи между таблицами через внешние ключи

Frontend

  • AJAX запросы для всех операций
  • Фильтрация и сортировка без перезагрузки страницы
  • Модальные окна для форм
  • Debounce для поиска
  • Адаптивный дизайн

Безопасность

  • Хеширование паролей через password_hash()
  • Защита от SQL-инъекций через PDO prepared statements
  • Проверка прав доступа через middleware
  • XSS защита через экранирование HTML

Лицензия

Проект создан как тестовое задание для ООО “АмДев”.

About

Трекер обращений клиентов, где каждый авторизованный пользователь заполнив форму создаёт задачу, которая попадает к администраторам. Клиент может видеть статус ранее созданного обращения.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published