common

package module
v0.0.0-...-7408042 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2021 License: MIT Imports: 4 Imported by: 0

README

License GitHub go.mod Go version

Внимание: Тестовое задание найдено на просторах github-а. Для обучения и тренировки, попробовал решить ее в меру своего понимания. На ревью не отправлял, за оптимальность не ручаюсь.

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

Задача

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

Порядок обработки запроса:

  1. по HTTP от клиента приходит запрос
  2. передаем его в handler
  3. передаем в service
  4. передаем в repository. Достаем данные из БД, и отправляем клиенту в обратном порядке

Выполненные требования

  • ✅ Язык программирования Go
  • ✅ Простая инструкция для запуска (в идеале — с возможностью запустить через docker-compose up, но это необязательно) - make run;
  • ✅ 3 метода: получение списка объявлений, получение одного объявления, создание объявления;
  • ✅ Валидация полей: не больше 3 ссылок на фото, описание не больше 1000 символов, название не больше 200 символов;

Усложнения

Не обязательно, но задание может быть выполнено с любым числом усложнений:

  • ❌ Юнит тесты: постарайтесь достичь покрытия в 70% и больше;
  • ❌ Контейнеризация: есть возможность поднять проект с помощью команды docker-compose up;
  • ✅ Архитектура сервиса описана в виде текста и/или диаграмм (Текст: Все просто - есть Сервис, есть БД. Запросы приходят от Клиента и через Сервис отправляются в БД)
  • ✅ Документация: есть структурированное описание методов сервиса.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Advert struct {
	Id          int       `json:"-" db:"id"`
	Title       string    `json:"title" db:"title"`
	Description string    `json:"description" db:"description"`
	Price       float32   `json:"price" db:"price"`
	CreatedAt   time.Time `json:"created_at" db:"created_at"`
}

Advert - рекламное объявление

type AdvertFieldParams

type AdvertFieldParams struct {
	Fields Fields
}

AdvertFieldParams - доплнительные передаваемые в запросе клиента поля

type AdvertSortOrderParams

type AdvertSortOrderParams struct {
	Price     SortOrder `json:"price"`      // сортировка по цене
	CreatedAt SortOrder `json:"created_at"` // по дате создания
	Offset    int       `json:"offset"`     // смещение от 0
}

AdvertSortOrderParams - передаваемые клиентом поля для сортировки и пагинации

type AdvertWithPhoto

type AdvertWithPhoto struct {
	Id          int       `json:"-" db:"id"`
	Title       string    `json:"title" db:"title"`
	Description string    `json:"description,omitempty" db:"description"`
	Price       float32   `json:"price" db:"price"`
	CreatedAt   time.Time `json:"-" db:"created_at"`
	Photos      []Photo   `json:"photos,omitempty" db:"photos"` // массив фото
}

AdvertWithPhoto - возвращаемое клиенту 1 объявление

func (AdvertWithPhoto) Validate

func (a AdvertWithPhoto) Validate() error

Validate - не больше 3 ссылок на объявление, название не больше 200 символов, описание не больше 1000 символов

type AdvertsListItem

type AdvertsListItem struct {
	Id          int       `json:"-" db:"id"`
	Title       string    `json:"title" db:"title"`
	Description string    `json:"description,omitempty" db:"description"`
	Price       float32   `json:"price" db:"price"`
	CreatedAt   time.Time `json:"-" db:"created_at"`
	PhotoUrl    string    `json:"photo_url,omitempty" db:"photo_url"` // адрес главного фото
}

AdvertsListItem - элемент возвращаемого клиенту списка объявлений

type Fields

type Fields struct {
	Description bool `json:"description" db:"description"` // включить в ответ описание, необязательное поле
	AllPhoto    bool `json:"all_photo" db:"all_photo"`     // включить в ответ все фото, а не только главное, необязательное поле
}

type Photo

type Photo struct {
	Id        int    `json:"id" db:"id"`
	IdAdvert  int    `json:"id_advert" db:"id_advert"`
	Url       string `json:"url" db:"url"`
	IsGeneral bool   `json:"is_general" db:"is_general"`
}

type Server

type Server struct {
	// contains filtered or unexported fields
}

func (*Server) Run

func (s *Server) Run(port string, handler http.Handler) error

func (*Server) Shutdown

func (s *Server) Shutdown(ctx context.Context) error

type SortOrder

type SortOrder int
const (
	Asc SortOrder = iota
	Desc
)

func (SortOrder) String

func (c SortOrder) String() string

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL