Documentation ¶
Index ¶
- Variables
- func MapToBucket(baseURL string, m map[string]string) *[]BucketItem
- type BucketItem
- type Repository
- type URLID
- type URLShortenCorrelatedRequest
- type URLShortenCorrelatedResponse
- type URLShortenRequest
- type URLShortenResponse
- type URLShortener
- func (s URLShortener) HandleDelete(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HandleGet(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HandleGetUserURLsBucket(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HandleMethodNotAllowed(w http.ResponseWriter, _ *http.Request)
- func (s URLShortener) HandleNotFound(w http.ResponseWriter, _ *http.Request)
- func (s URLShortener) HandlePostShortenBatch(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HandlePostShortenJSON(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HandlePostShortenPlain(w http.ResponseWriter, r *http.Request)
- func (s URLShortener) HeartBeat(w http.ResponseWriter, r *http.Request)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrLinkIsAlreadyShortened = errors.New("link is already shortened") ErrEmptyBatchToShort = errors.New("nothing to short") ErrLinkIsDeleted = errors.New("link is deleted") ErrMethodNotAllowed = errors.New("method is not allowed, read task description carefully") ErrProperJSONIsExpected = errors.New("proper JSON is expected, read task description carefully") )
Functions ¶
func MapToBucket ¶
func MapToBucket(baseURL string, m map[string]string) *[]BucketItem
MapToBucket создает корзину ссылок из `map[string]string`
Types ¶
type BucketItem ¶
type BucketItem struct { ShortURL string `json:"short_url"` OriginalURL string `json:"original_url"` }
BucketItem представляет собой структуру, в которой требуется сериализовать список ссылок
[ { "short_url": "https://...", "original_url": "https://..." }, ... ]
type Repository ¶
type Repository interface { // Store сохраняет оригинальную ссылку и возвращает id (токен) сокращенного варианта. Store(ctx context.Context, user string, link string) (id string, err error) // Restore возвращает оригинальную ссылку по его id. // если error == ErrLinkIsDeleted значит короткая ссылка (id) была удалена. Restore(ctx context.Context, id string) (link string, err error) // Unstore - помечает ссылки удаленными. // Согласно заданию - результат работы пользователю не возвращается. Unstore(ctx context.Context, user string, ids []string) // GetUserStorage возвращает массив всех ранее сокращенных пользователей ссылок. GetUserStorage(ctx context.Context, user string) map[string]string // StoreBatch сохраняет пакет ссылок в хранилище и возвращает список пакет id. // batchIn = map[correlation_id]original_link // batchOut= map[correlation_id]short_link // если error == ErrLinkIsAlreadyShortened значит среди пакета были ранее сокращенные ссылки. StoreBatch(ctx context.Context, user string, batchIn map[string]string) (batchOut map[string]string, err error) // Ping проверяет готовность к работе репозитория. Ping(context.Context) error // Close завершает работу репозитория в стиле graceful shutdown. Close() error }
Repository описывает контракт работы с хранилищем. Используется для удобства тестирования и для дальнейшей легкой миграции на другой "движок".
type URLShortenCorrelatedRequest ¶
type URLShortenCorrelatedRequest struct {}
URLShortenCorrelatedRequest представляет собой структуру, в которую требуется дериализовать список ссылок для сокращения [
{ "correlation_id": "4444", "original_url": "https://..." }, ...
]
type URLShortenCorrelatedResponse ¶
type URLShortenCorrelatedResponse struct {}
URLShortenCorrelatedResponse представляет собой структуру, в которой требуется сериализовать список ссылок
[ { "correlation_id": "4444", "short_url": "https://..." }, ... ]
type URLShortenRequest ¶
type URLShortenRequest struct {
URL string `json:"url"`
}
URLShortenRequest represents JSON {"url":"<some_url>"}
type URLShortenResponse ¶
type URLShortenResponse struct {
Result string `json:"result"`
}
URLShortenResponse represents JSON {"result":"<shorten_url>"}
type URLShortener ¶
type URLShortener struct {
// contains filtered or unexported fields
}
URLShortener - реализует набор методов для сокращения ссылок, хранение их оригинального состояние и открытие по сокращенному варианту. Обеспечивается контроль авторства сокращенных ссылок.
func NewURLShortener ¶
func NewURLShortener(base string, repo Repository) *URLShortener
NewURLShortener создает URLShortener и инициализирует его адресом, по которому будут доступны методы, и репозиторием хранения ссылок.
func (URLShortener) HandleDelete ¶
func (s URLShortener) HandleDelete(w http.ResponseWriter, r *http.Request)
HandleDelete - метод для удаления раннее созданных коротких ссылок. На вход принимается json массив токенов коротких ссылок для удаления.
Example ¶
Пример использования HandleDelete
reader := strings.NewReader(`["111","222"]`) request := httptest.NewRequest(http.MethodDelete, "/", reader) w := httptest.NewRecorder() h := NewURLShortener("http://localhost:8080/", RepoMock{}) h.HandleDelete(w, request) result := w.Result() err := result.Body.Close() if err != nil { panic(err) }
Output:
func (URLShortener) HandleGet ¶
func (s URLShortener) HandleGet(w http.ResponseWriter, r *http.Request)
HandleGet - метод для открытия оригинальной ссылки по короткому варианту.
func (URLShortener) HandleGetUserURLsBucket ¶
func (s URLShortener) HandleGetUserURLsBucket(w http.ResponseWriter, r *http.Request)
HandleGetUserURLsBucket - метод для получения всех сокращенных пользователем ссылок.
func (URLShortener) HandleMethodNotAllowed ¶
func (s URLShortener) HandleMethodNotAllowed(w http.ResponseWriter, _ *http.Request)
HandleMethodNotAllowed обрабатывает не валидный HTTP метод
func (URLShortener) HandleNotFound ¶
func (s URLShortener) HandleNotFound(w http.ResponseWriter, _ *http.Request)
HandleNotFound обрабатывает не найденный путь
func (URLShortener) HandlePostShortenBatch ¶
func (s URLShortener) HandlePostShortenBatch(w http.ResponseWriter, r *http.Request)
HandlePostShortenBatch - метод для создания коротких ссылок одним пакетом, где оригинальные ссылки передаются через JSON.
func (URLShortener) HandlePostShortenJSON ¶
func (s URLShortener) HandlePostShortenJSON(w http.ResponseWriter, r *http.Request)
HandlePostShortenJSON - метод для создания короткой ссылки, где оригинальная ссылка передается с помощью JSON.
func (URLShortener) HandlePostShortenPlain ¶
func (s URLShortener) HandlePostShortenPlain(w http.ResponseWriter, r *http.Request)
HandlePostShortenPlain - метод для создания короткой ссылки, где оригинальная ссылка передается через Text Body.
Example ¶
Пример использования HandlePostShortenPlain
reader := strings.NewReader(`https://habr.com/ru/post/66931/`) request := httptest.NewRequest(http.MethodPost, "/", reader) w := httptest.NewRecorder() h := NewURLShortener("http://localhost:8080/", RepoMock{}) h.HandlePostShortenPlain(w, request) result := w.Result() urlResult, err := io.ReadAll(result.Body) if err != nil { panic(err) } err = result.Body.Close() if err != nil { panic(err) } fmt.Println(string(urlResult))
Output: http://localhost:8080/1111
func (URLShortener) HeartBeat ¶
func (s URLShortener) HeartBeat(w http.ResponseWriter, r *http.Request)
HeartBeat - метод для проверки, что подключение к репозиторию живое.