ghcr.io/v1ack/linkshorter:master - docker image
Миграции накатываются при запуске
| key | default |
|---|---|
| GRPC_PORT | 10000 |
| HTTP_PORT | 10010 |
| DB_CONNECTION |
Если DB_CONNECTION не указывается то используется inMemory хранилище
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:
- Метод Create, который будет сохранять оригинальный URL в базе и возвращать сокращённый
- Метод Get, который будет принимать сокращённый URL и возвращать оригинальный URL
Решение должно быть предоставлено в «конечном виде», а именно:
- Сервис должен быть распространён в виде Docker-образа
- В качестве хранилища можно использовать in-memory решение или postgresql.
- API должно быть описано в proto файле
- Покрыть реализованный функционал Unit-тестами
- Преобразование ссылки
- Хеширование CRC-64
- Перевод в 63-ричную ситему счисления в соответствии с заданным алфовитом
- Приведение длинны ссылки к 10 символам
- В случае коллизии к преобразовываемой ссылке прибовляем первый символ алфавита