chartographer-go-kontur

command module
v0.0.0-...-854098a Latest Latest
Warning

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

Go to latest
Published: Mar 20, 2022 License: MIT Imports: 14 Imported by: 0

README

Chartographer

От charta (лат.) или харта — одно из названий папируса.

Необходимо написать сервис Chartographer — сервис для восстановления изображений древних свитков и папирусов. Изображения растровые и создаются поэтапно (отдельными фрагментами). Восстановленное изображение можно получать фрагментами (даже если оно лишь частично восстановленное).

Предполагается, что этим сервисом будет одновременно пользоваться множество учёных.

HTTP API

Необходимо реализовать 4 HTTP-метода:

POST /chartas/?width={width}&height={height}

Создать новое изображение папируса заданного размера (в пикселях), где {width} и {height} — положительные целые числа, не превосходящие 20 000 и 50 000, соответственно.
Тело запроса пустое.
В теле ответа возвращается {id} — уникальный идентификатор изображения в строковом представлении.
Код ответа: 201 Created.

POST /chartas/{id}/?x={x}&y={y}&width={width}&height={height}

Сохранить восстановленный фрагмент изображения размера {width} x {height} с координатами ({x};{y}). Под координатами подразумевается положение левого верхнего угла фрагмента относительно левого верхнего угла всего изображения. Другими словами, левый верхний угол изображения является началом координат, т.е. эта точка имеет координаты (0;0).
Тело запроса: изображение в формате BMP (цвет в RGB, 24 бита на 1 пиксель).
Тело ответа пустое.
Код ответа: 200 OK.

GET /chartas/{id}/?x={x}&y={y}&width={width}&height={height}

Получить восстановленную часть изображения размера {width} x {height} с координатами ({x};{y}), где {width} и {height} — положительные целые числа, не превосходящие 5 000. Под координатами подразумевается положение левого верхнего угла фрагмента относительно левого верхнего угла всего изображения. Другими словами, левый верхний угол изображения является началом координат, т.е. эта точка имеет координаты (0;0).
Тело ответа: изображение в формате BMP (цвет в RGB, 24 бита на 1 пиксель).
Код ответа: 200 OK.

DELETE /chartas/{id}/

Удалить изображение с идентификатором {id}.
Тело запроса и ответа пустое.
Код ответа: 200 OK.

Обработка ошибок
  1. Запросы по {id} изображения, которого не существует, должны завершаться с кодом ответа 404 Not Found.
  2. Запросы с некорректными параметрами {width} или {height} должны завершаться с кодом ответа 400 Bad Request.
  3. Запросы с фрагментами, которые не пересекаются по координатам с изображением, должны завершаться с кодом ответа 400 Bad Request. При этом фрагменты могут частично находиться вне границ изображения (см. примечания) — такие запросы считаются корректными.
Примечания
  1. Размер изображений не превосходит 20 000 x 50 000.
  2. Некоторые изображения гарантировано не смогут поместиться целиком в памяти. Необходимо предусмотреть возможность хранения данных на диске.
  3. Формат изображений — BMP. Цветность в RGB (без альфа-канала), 24 бита на пиксель.
  4. В случае, если загружаемый восстановленный фрагмент перекрывает восстановленную ранее часть, то в любом случае применяется новый фрагмент.
  5. Если запрашивается фрагмент, часть которого ещё не восстановлена, то не восстановленные области закрашиваются чёрным цветом. Аналогично, чёрным цветом закрашивается та часть фрагмента, которая оказывается вне границ изображения (см. пример ниже).
  6. Если восстанавливаемый фрагмент перекрывает границы изображения, то часть фрагмента вне изображения игнорируется. Пример: размер изображения — 50 x 100, фрагмент с размером 50 x 50 и координатами верхнего левого угла (25;25). Правая половина фрагмента игнорируется. Схематически изображено ниже.
╔═════════╗
║         ║
║    ┌────╫────┐
║    │    ║    │
║    │    ║    │
║    │    ║    │
║    └────╫────┘
║         ║
╚═════════╝

Ожидается, что решение будет корректно работать в граничных случаях и успешно обрабатывать ошибки. Настоятельно рекомендуется покрыть основную функциональность Unit-тестами.

Информация по тестированию

Сервис будет запускаться в Docker на многоядерной машине. Контейнеру будет предоставлено не менее 2 Гбайт оперативной памяти и не менее 20 Гбайт места на диске.

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

Инструкция по запуску

Для того, чтобы провести все проверки и запустить приложение на исполнение одной командой, введите просто команду make ARGS=/path/to/content/folder, где /path/to/content/folder — путь до каталога, в котором сервис может хранить данные.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

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