Тестове завдання для Middle Backend розробника (PHP, Laravel, MySQL)

Завдання 1: Реалізація REST API
Опис: Розробити REST API для керування списком завдань. Кожна задача повинна мати такі поля: id, назву, опис, статус (відкрито/закрито), дату створення.
Функціонал:
• Створення нового завдання
• Отримання списку завдань
• Отримання інформації про одне завдання ID
• Оновлення інформації про завдання
• Видалення завдання
Вимоги:
• Використовувати Laravel як фреймворк.
• Застосувати маршрутизацію та контролери для обробки HTTP-запитів.
• Використовувати модель для взаємодії з базою даних.
• Забезпечити валідацію вхідних даних.
• Реалізувати авторизацію користувачів (простий варіант: перевірка ключа API).

Завдання 2: Оптимізація запитів до бази даних
Опис: Дана існуюча модель Laravel, яка містить такі відносини:
• Користувач має багато замовлень
• Замовлення має багато товарів
Завдання: Написати найефективніший запит для отримання списку всіх товарів, куплених певним користувачем за останні 30 днів.
Вимоги:
• Використовуйте Eloquent для написання запиту.
• Застосувати необхідні методи оптимізації запиту (eager loading, where, with, etc.).
• Пояснити вибір методів оптимізації.

Завдання 3: Робота з кешуванням
Опис: Реалізувати кешування результатів повільного запиту до бази даних.
Завдання: Написати функцію, яка повертає список найпопулярніших товарів за останній місяць. Результат цієї функції повинен кешуватись на 1 годину.
Вимоги:
• Використовувати вбудований механізм кешування Laravel.
• Вкажіть, в якому випадку кеш буде оновлено.
• Поясніть, чому кешування є важливим для продуктивності програми.

Якість коду:
• Дотримання стандартів кодування (PSR-4).
• Коментування складних ділянок коду.
• Використання зрозумілих та лаконічних імен змінних та функцій.
• Застосування принципів ООП.
• Оптимізація: ефективне використання ресурсів сервера (бази даних, пам'яті).
• Розуміння принципів: Демонстрація розуміння принципів роботи Laravel, REST API, SQL та кешування.
• Структура проекту: Логічна організація файлів та папок.

Розгорнути програму на локальному сервері або на платформі для деплою.

Здача завдання
• Формат: Надати вихідний код проекту у вигляді репозиторію Git (наприклад, GitHub).
• Структура: Створити окремі гілки для кожного завдання.
• Документація: Додати файл README.md з коротким описом проекту та інструкцією по запуску.