Git Product home page Git Product logo

api-pizza's Introduction

REST API для сайта по продаже пиццы

Данный репозиторий содержит исходный код и документацию для 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.

Установка и запуск

  1. Клонируйте репозиторий на свой локальный компьютер:

    git clone https://github.com/Frenetz/api-pizza.git
    cd api-pizza
  2. Установите зависимости с помощью Composer:

    composer install
  3. Создайте файл окружения .env на основе .env.example и укажите настройки базы данных.

  4. Выполните миграции и заполните базу данных:

    php artisan migrate
    php artisan db:seed --class=RoleSeeder

*RoleSeeder - сидер для наполнения БД ролями пользователей

  1. Запустите веб-сервер:

    php artisan serve

Использование API

Документация 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 Выйти из аккаунта

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.