Skip to content

A REST-API for managing multiple distributions to clients depending on theri tags, working asynchronic with external distribution API

Notifications You must be signed in to change notification settings

fshmidt/rassilki

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Приложение для управления рассылками

Содержание

  1. Описание задачи
  2. Реализация
  3. Endpoints
  4. Запуск
  5. [Swagger UI](#Swagger UI)

Описание задачи

Разработать API для управления рассылками и клиентами. Приложение предоставляет функциональность по созданию, редактированию и удалению рассылок, а также добавлению, редактированию и удалению клиентов и осуществляет рассылки пользуясь внешним API.

Реализация

  • Применение принципов REST API.
  • Применение принципов "Чистой Архитектуры" и техники внедрения зависимостей.
  • Использование фреймворка gin-gonic/gin для обработки HTTP-запросов.
  • Взаимодействие с СУБД Postgres с использованием библиотеки sqlx и написание SQL-запросов.
  • Конфигурация приложения осуществляется с использованием библиотеки viper.
  • Запуск базы данных в Docker-контейнере.
  • Асинхронная работа рассылок.
  • Swagger UI

Структура проекта:

.
├── pkg
│   ├── handler     // обработчики запросов
│   ├── service     // бизнес-логика
│   └── repository  // взаимодействие с БД
├── cmd             // точка входа в приложение
├── server          // серверная часть и логика обращений к внешнему API
├── schema          // SQL файлы с миграциями
├── configs         // файлы конфигурации

Endpoints

Клиенты

  • Создание клиента

    • Endpoint: POST /clients
    • Тело запроса:
      {
          "phone": "7123456",
          "code": "123",
          "tag": "important",
          "timezone": "UTC"
      }
    • Успешный ответ:
      {"id": 1}
  • Получение клиента по ID

    • Endpoint: GET /clients/:id
    • Успешный ответ:
      {
          "phone": "7123456",
          "code": "123",
          "tag": "important",
          "timezone": "UTC"
      }
  • Обновление клиента по ID

    • Endpoint: PUT /clients/:id
    • Тело запроса:
      {
          "phone": "7666666",
          "tag": "urgent"
      }
    • Успешный ответ:
      {"status": "ok"}
  • Удаление клиента по ID

    • Endpoint: DELETE /clients/:id
    • Успешный ответ:
      {"status": "ok"}

Рассылки

  • Создание рассылки

    • Endpoint: POST /rassilki
    • Тело запроса:
      {
          "start-time": "2023-12-31T23:59:59Z",
          "message": "Special offer for our clients!",
          "filter": ["important", "rich"],
          "end-time": "2024-01-15T23:59:59Z"
      }
    • Успешный ответ:
      {"id": 1}
  • Получение статистики рассылки по ID

    • Endpoint: GET /rassilki/:id
    • Успешный ответ:
      {
      "ras_id": 7,
      "total": 20,
      "sent": 20,
      "not_sent": 0
      }
  • Получение статистики рпо всем рассылкам

    • Endpoint: GET /rassilki/
    • Успешный ответ:
      [
          {
              "ras_id": 3,
              "total": 15,
              "sent": 15,
              "not_sent": 0
          },
          {
              "ras_id": 7,
              "total": 20,
              "sent": 20,
              "not_sent": 0
          },
          {
              "ras_id": 8,
              "total": 20,
              "sent": 0,
              "not_sent": 20
          }
      ]
      
  • Обновление рассылки по ID

    • Endpoint: PUT /rassilki/:id
    • Тело запроса:
      {
          "start-time": "2024-01-01T00:00:00Z",
          "message": "Updated special offer!",
          "filter": ["important", "rich","stupid"],
          "end-time": "2024-01-20T23:59:59Z"
      }
    • Успешный ответ:
      {"status": "ok"}
  • Удаление рассылки по ID

    • Endpoint: DELETE /rassilki/:id
    • Успешный ответ:
      {"status": "ok"}

Запуск

#bash
go run cmd/main.go

Если приложение запускается впервые, необходимо применить миграции к базе данных:

docker pull postgres
docker run --name=rassilki-db -e POSTGRES_PASSWORD='qwerty' -p 5436:5432 -d --rm postgres
migrate -path ./schema -database 'postgres://postgres:qwerty@localhost:5436/postgres?sslmode=disable' up
go mod tidy

Так же необходимо иметь переменные окружения JWT с JWT-токеном доступа и DB_PASSWORD с паролем от базы данных (для примера и как видно выше это qwerty)

Swagger UI

По адресу /docs/index.html находится страница со Swagger Ui: Swagger Ui

About

A REST-API for managing multiple distributions to clients depending on theri tags, working asynchronic with external distribution API

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages