Skip to content

apetsko/gophermart

Repository files navigation

Накопительная система лояльности «Гофермарт»

Описание проекта

Система лояльности «Гофермарт» представляет собой HTTP API, позволяющее пользователям регистрироваться, загружать номера заказов, накапливать бонусные баллы и использовать их для последующих покупок. Бонусы рассчитываются с использованием внешней системы расчёта баллов.

Функциональные возможности

  • Регистрация и аутентификация пользователей
  • Приём номеров заказов
  • Учёт списка заказов пользователя
  • Начисление бонусных баллов
  • Запрос текущего баланса
  • Списание баллов на новые заказы
  • Просмотр истории списаний

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

  • Язык программирования: Go
  • База данных: PostgreSQL
  • Взаимодействие: REST API
  • Аутентификация: JWT (или иной метод по усмотрению)
  • Хранилище данных сжатых HTTP-запросов: поддерживается

Запуск проекта

  1. Клонируйте репозиторий:

    git clone https://github.com/apetsko/gophermart.git
    cd gophermart
  2. Установите зависимости:

    go mod tidy
  3. Настройка конфигурации
    Приложение получает параметры из флагов командной строки или переменных окружения (флаги имеют приоритет, если указаны оба варианта).

    Список параметров:

  • RUN_ADDRESS (-a) — адрес и порт, на котором будет запущен сервер.
  • DATABASE_URI (-d) — строка подключения к базе данных PostgreSQL.
  • ACCRUAL_SYSTEM_ADDRESS (-r) — адрес системы начислений.
  • SECRET (-s) — секретный ключ для подписи токенов.

Если указаны одновременно флаг и переменная окружения, используется значение из флага. 4. Запустите приложение:

docker compose up -d

или

task dockerup 

API эндпоинты

Регистрация пользователя

  • POST /api/user/register
  • Формат запроса:
    {
      "login": "user123",
      "password": "securepassword"
    }
  • Ответы:
    • 200 OK — успешная регистрация
    • 400 Bad Request — неверный формат запроса
    • 409 Conflict — логин уже используется

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

  • POST /api/user/login
  • Формат запроса:
    {
      "login": "user123",
      "password": "securepassword"
    }
  • Ответы:
    • 200 OK — успешная аутентификация
    • 400 Bad Request — неверный формат
    • 401 Unauthorized — неверный логин или пароль

Загрузка номера заказа

  • POST /api/user/orders
  • Формат запроса:
    12345678903
    
  • Ответы:
    • 202 Accepted — заказ принят в обработку
    • 409 Conflict — заказ уже загружен
    • 422 Unprocessable Entity — неверный формат номера заказа

Получение списка заказов

  • GET /api/user/orders
  • Ответ:
    [
      {
        "number": "9278923470",
        "status": "PROCESSED",
        "accrual": 500,
        "uploaded_at": "2020-12-10T15:15:45+03:00"
      }
    ]

Получение баланса

  • GET /api/user/balance
  • Ответ:
    {
      "current": 500.5,
      "withdrawn": 42
    }

Списание баллов

  • POST /api/user/balance/withdraw
  • Формат запроса:
    {
      "order": "2377225624",
      "sum": 751
    }
  • Ответы:
    • 200 OK — списание успешно
    • 402 Payment Required — недостаточно баллов

История списаний

  • GET /api/user/withdrawals
  • Ответ:
    [
      {
        "order": "2377225624",
        "sum": 500,
        "processed_at": "2020-12-10T15:15:45+03:00"
      }
    ]

Лицензия

Проект распространяется под лицензией MIT.

About

1st yp project

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages