Данный репозиторий содержит исходный код и документацию для REST API, разработанного для сайта по продаже пиццы. API предоставляет возможность управления пользователями, адресами, категориями товаров, способами доставки, способами оплаты, товарами и заказами. Проект использует Laravel для серверной части и OpenAPI (Swagger) для документации.
Проект разбит на следующие каталоги и файлы:
- app: Содержит основные файлы приложения Laravel, включая контроллеры, модели, миграции и роутинг.
- database: Здесь находятся миграции и сидеры для базы данных.
- routes: Включает файлы с определением маршрутов для API.
- public: Публичные ресурсы, такие как изображения и стили.
- tests: Тесты для API.
- storage: Хранилище для загруженных файлов, логов и временных данных.
- resources: Шаблоны и представления.
- config: Конфигурационные файлы Laravel.
- vendor: Зависимости и библиотеки, устанавливаемые Composer.
- .env: Файл окружения с настройками (не включен в репозиторий).
- swagger.yaml: Файл с OpenAPI спецификацией.
Проект разработан с использованием следующих технологий и инструментов:
- Laravel: PHP-фреймворк для разработки веб-приложений.
- Composer: Пакетный менеджер для PHP.
- OpenAPI и Swagger: Для документации API.
- PHPUnit: Для написания и запуска тестов.
- PostgreSQL: СУБД для хранения данных.
- SQLite: СУБД для хранения тестовых данных
Приложение предоставляет возможность пользователям зарегистрироваться и аутентифицироваться. Пользователи могут создать учетные записи с помощью своего имени, фамилии, отчества, телефонного номера, электронной почты, даты рождения и пароля. Аутентификация выполняется через Laravel Sanctum, обеспечивая безопасный доступ к функциональности приложения.
Зарегистрированные пользователи могут управлять своими адресами. Это включает в себя создание новых адресов, редактирование существующих и удаление адресов. Каждый адрес может включать информацию о городе, улице, доме, квартире, подъезде, этаже, домофоне, шлагбауме и комментарии. Такие детали позволяют пользователям указывать точные местоположения для доставки.
Администраторы приложения могут управлять категориями товаров и самими товарами. Категории товаров позволяют структурировать ассортимент продукции, а товары включают информацию о наименовании, категории, составе, калорийности и цене. Это обеспечивает организацию и управление меню пиццерии.
Администраторы также могут управлять доступными способами оплаты и доставки. Это включает в себя создание новых способов оплаты и доставки, а также их редактирование и удаление. Разнообразие способов оплаты и доставки позволяет пользователям выбирать наиболее удобные варианты.
Пользователи могут оформлять заказы, выбирая товары, адрес доставки, способ оплаты и доставки. Оформленные заказы включают информацию о статусе, общей стоимости и времени создания. После оформления заказы обрабатываются и доставляются на указанный адрес.
Для аутентификации пользователей в нашем API мы используем Laravel Sanctum. Sanctum предоставляет надежную аутентификацию с использованием токенов, что позволяет пользователям регистрироваться, входить в систему и получать доступ к защищенным ресурсам.
Для регистрации нового пользователя отправьте POST-запрос на /register
, предоставив необходимые данные.
POST /register
{
"name": "Имя",
"email": "[email protected]",
"password": "ваш_пароль",
"surname": "Фамилия",
"patronymic": "Отчество",
"phone": "ваш_телефон",
"date_of_birth": "дата_рождения"
}
После успешной регистрации вы получите токен доступа, который необходим для аутентификации в дальнейшем.
Для определения ролей пользователей и управления доступом к различным частям API мы используем Laravel Spatie. Система ролей предоставляет следующие роли:
- Администратор (Admin): Пользователи с этой ролью имеют полный доступ ко всем ресурсам API. В моем приложении роль "Администратор" получает первый зарегистрированный пользователь
- Клиент (Client): Зарегистрированные пользователи, которые имеют доступ к определенным ресурсам (например, создание заказов).
- Гость (Guest): Пользователи, которые не прошли аутентификацию, могут ограниченно взаимодействовать с API.
-
Клонируйте репозиторий на свой локальный компьютер:
git clone https://github.com/Frenetz/api-pizza.git cd api-pizza
-
Установите зависимости с помощью Composer:
composer install
-
Создайте файл окружения
.env
на основе.env.example
и укажите настройки базы данных. -
Выполните миграции и заполните базу данных:
php artisan migrate php artisan db:seed --class=RoleSeeder
*RoleSeeder - сидер для наполнения БД ролями пользователей
-
Запустите веб-сервер:
php artisan serve
Документация API доступна через Swagger UI. Вы можете зарегистрироваться, авторизоваться и использовать различные точки API в соответствии с вашей ролью (администратор, клиент, гость).
Проект включает набор тестов, которые можно запустить с помощью PHPUnit. Для запуска тестов используйте команду:
php artisan test
Метод | Маршрут | Описание |
---|---|---|
GET | /addresses |
Получить список адресов |
POST | /addresses |
Создать новый адрес |
GET | /addresses/{id} |
Получить информацию об адресе по ID |
PATCH | /addresses/{id}/edit |
Обновить адрес по ID |
DELETE | /addresses/{id} |
Удалить адрес по ID |
GET | /product-categories |
Получить список категорий товаров |
POST | /product-categories |
Создать новую категорию товаров |
GET | /product-categories/{id} |
Получить информацию о категории по ID |
PATCH | /product-categories/{id}/edit |
Обновить категорию товаров по ID |
DELETE | /product-categories/{id} |
Удалить категорию товаров по ID |
GET | /products |
Получить список товаров |
POST | /products |
Создать новый товар |
GET | /products/{id} |
Получить информацию о товаре по ID |
PATCH | /products/{id}/edit |
Обновить товар по ID |
DELETE | /products/{id} |
Удалить товар по ID |
GET | /payment-methods |
Получить список способов оплаты |
POST | /payment-methods |
Создать новый способ оплаты |
GET | /payment-methods/{id} |
Получить информацию о способе оплаты по ID |
PATCH | /payment-methods/{id}/edit |
Обновить способ оплаты по ID |
DELETE | /payment-methods/{id} |
Удалить способ оплаты по ID |
GET | /delivery-methods |
Получить список способов доставки |
POST | /delivery-methods |
Создать новый способ доставки |
GET | /delivery-methods/{id} |
Получить информацию о способе доставки по ID |
PATCH | /delivery-methods/{id}/edit |
Обновить способ доставки по ID |
DELETE | /delivery-methods/{id} |
Удалить способ доставки по ID |
GET | /orders |
Получить список заказов |
POST | /orders |
Создать новый заказ |
GET | /orders/{id} |
Получить информацию о заказе по ID |
PATCH | /orders/{id}/edit |
Обновить заказ по ID |
DELETE | /orders/{id} |
Удалить заказ по ID |
GET | /user |
Получить информацию о текущем пользователе |
GET | /users |
Получить список всех зарегистрированных пользователей |
POST | /register |
Создать новый аккаунт |
POST | /login |
Войти в существующий аккаунт |
GET | /logout |
Выйти из аккаунта |