An open API service indexing awesome lists of open source software.

https://github.com/amrchnk/advertisement_service

Тестовое задание для backend-стажёра в команду Advertising
https://github.com/amrchnk/advertisement_service

docker docker-compose go postgres

Last synced: 2 months ago
JSON representation

Тестовое задание для backend-стажёра в команду Advertising

Awesome Lists containing this project

README

          

# Тестовое задание для backend-стажёра в команду Advertising

## Задача
Необходимо создать сервис для хранения и подачи объявлений. Объявления должны храниться в базе данных. Сервис должен предоставлять API, работающее поверх HTTP в формате JSON.

[Подробнее...](https://github.com/avito-tech/adv-backend-trainee-assignment)

## Архитектура и стек
При написании кода был использован подход "Чистой архитектуры", в соответствии с которым структура приложения была разделена на 4 слоя (находятся в папке pkg):

- **handler** – взаимодействие пользователя с приложением
- **models** – описание структур, с которыми работает приложение
- **repository** – взаимодействие с хранилищем данных
- **service** – бизнес-логика приложения

Использован следующий стек технологий:
- Back-end: Go + библиотеки gin, sqlx для работы с роутами и БД
- БД: PostgreSQL

## Запуск приложения
Перед запуском приложения необходимо запустить файл миграции для создания таблиц в бд:

```
// для применения миграции
migrate -path ./schema -database postgres://postgres:111@localhost:5432/advert?sslmode=disable up

// для отката миграции
migrate -path ./schema -database postgres://postgres:111@localhost:5432/advert?sslmode=disable down
```

Для развертывания приложения используется Docker, в контейнеры упакованы само приложение и БД.
Запуск происходит через docker-compose:
```
//собираем контейнер приложения
docker-compose up --build app

//перезапускаем сборку после инициализации бд
docker-compose up app
```

Для запуска тестов в папке Handler:

```
go test -v
```
[Описание методов сервиса](https://amrchnk.github.io/advertisement_service/)

## Выполненные усложнения

- [x] Юнит тесты (Покрытие >80% в модуле Handler)
- [x] Контейнеризация: есть возможность поднять проект с помощью команды ```docker-compose up```
- [x] Архитектура сервиса описана в виде текста и/или диаграмм
- [x] Структурированное описание методов сервиса.