Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.

v1ack/linkShorter

Repository files navigation

Укорачиватель ссылок

grpc & http сервис преобразования ссылок

Запуск

ghcr.io/v1ack/linkshorter:master - docker image

Миграции накатываются при запуске

Переменные окружения

key default
GRPC_PORT 10000
HTTP_PORT 10010
DB_CONNECTION

Если DB_CONNECTION не указывается то используется inMemory хранилище

API

pkg/shorter.swagger.json - openAPI

api/shorter.proto - proto

Разработка

Создание миграции бд

goose -dir sql/migrations create <migration_name> sql

При изменении схем, как и при обновлении sql запросов необходимо запускать sqlc для генерации go из sql.

make generate-sqlc

Для кодогенерации из proto

make generate-grpc-gateway

ТЗ

Необходимо реализовать сервис, который должен предоставлять API по созданию сокращённых ссылок следующего формата:

  • Ссылка должна быть уникальной и на один оригинальный URL должна ссылаться только одна сокращенная ссылка.
  • Ссылка должна быть длинной 10 символов
  • Ссылка должна состоять из символов латинского алфавита в нижнем и верхнем регистре, цифр и символа _ (подчеркивание)

Сервис должен быть написан на Go и принимать следующие запросы по gRPC:

  1. Метод Create, который будет сохранять оригинальный URL в базе и возвращать сокращённый
  2. Метод Get, который будет принимать сокращённый URL и возвращать оригинальный URL

Решение должно быть предоставлено в «конечном виде», а именно:

  • Сервис должен быть распространён в виде Docker-образа
  • В качестве хранилища можно использовать in-memory решение или postgresql.
  • API должно быть описано в proto файле
  • Покрыть реализованный функционал Unit-тестами

Алгоритм создания ссылки

  1. Преобразование ссылки
    1. Хеширование CRC-64
    2. Перевод в 63-ричную ситему счисления в соответствии с заданным алфовитом
    3. Приведение длинны ссылки к 10 символам
  2. В случае коллизии к преобразовываемой ссылке прибовляем первый символ алфавита