Трекер обращений клиентов, где каждый авторизованный пользователь заполнив форму создаёт задачу, которая попадает к администраторам. Клиент может видеть статус ранее созданного обращения.
- Backend: PHP 8+, PDO, MySQL
- Frontend: HTML, jQuery, CSS
- Архитектура: REST API, PSR-4 автозагрузка через Composer
- База данных: MySQL с использованием внешних ключей и транзакций
- Регистрация и авторизация
- Создание обращений (тикетов)
- Просмотр своих обращений
- Фильтрация и сортировка по: ID, дате создания, дате изменения, статусу
- Поиск по названию и описанию
- Просмотр статусов обращений и комментариев от администратора
- Авторизация администратора
- Просмотр всех обращений клиентов
- Фильтрация и сортировка обращений
- Изменение статусов обращений
- Добавление комментариев к обращениям
- Назначение тегов обращениям
- CRUD операции для тегов (с выбором цвета)
- CRUD операции для статусов
- ToDo
- InProgress
- Ready For Review
- Done
- PHP 8.0 или выше
- MySQL 5.7 или выше
- Composer
- Apache/Nginx с mod_rewrite
git clone https://github.com/conofor/ticket-tracker.git
cd ticket-tracker# Установите Composer зависимости
composer install4.1. Создайте базу данных и импортируйте схему:
mysql -u root -p < database.sqlИли через phpMyAdmin:
- Создайте базу данных
ticket_tracker - Импортируйте файл
database.sql
4.2. Настройте подключение к БД:
Отредактируйте файл config/database.php:
return [
'host' => 'localhost',
'dbname' => 'ticket_tracker',
'username' => 'root', // Ваш пользователь MySQL
'password' => '', // Ваш пароль MySQL
'charset' => 'utf8mb4'
];- Клиентская часть:
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 # Административный интерфейс
POST /api/auth/register- РегистрацияPOST /api/auth/login- ВходPOST /api/auth/logout- ВыходGET /api/auth/me- Текущий пользователь
GET /api/tickets- Список обращенийGET /api/tickets/{id}- Просмотр обращенияPOST /api/tickets- Создание обращенияPUT /api/tickets/{id}- Обновление обращения (только admin)POST /api/tickets/{id}/comments- Добавление комментария
GET /api/tags- Список теговGET /api/tags/{id}- Просмотр тегаPOST /api/tags- Создание тега (только admin)PUT /api/tags/{id}- Обновление тега (только admin)DELETE /api/tags/{id}- Удаление тега (только admin)
GET /api/statuses- Список статусовGET /api/statuses/{id}- Просмотр статусаPOST /api/statuses- Создание статуса (только admin)PUT /api/statuses/{id}- Обновление статуса (только admin)DELETE /api/statuses/{id}- Удаление статуса (только admin)
- PSR-4 автозагрузка через Composer
- Singleton паттерн для подключения к БД
- Prepared statements для защиты от SQL-инъекций
- Middleware для проверки авторизации
- REST API с JSON ответами
- Транзакции для операций с тегами
- Связи между таблицами через внешние ключи
- AJAX запросы для всех операций
- Фильтрация и сортировка без перезагрузки страницы
- Модальные окна для форм
- Debounce для поиска
- Адаптивный дизайн
- Хеширование паролей через
password_hash() - Защита от SQL-инъекций через PDO prepared statements
- Проверка прав доступа через middleware
- XSS защита через экранирование HTML
Проект создан как тестовое задание для ООО “АмДев”.