Skip to content

GreatPopka/Shortlink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Основной функционал

Можете попробовать тут (Swagger UI)

image


Аутентификация и авторизация

  • Регистрация пользователей (POST /register)
  • Авторизация с получением JWT токена (POST /login)
  • Доступ к защищённым маршрутам осуществляется по токену (формат: Bearer <token>)

Чтобы авторизоваться:

  1. Выполните POST /login, получите access_token
  2. Нажмите Authorize в Swagger UI
  3. Вставьте токен в формате:
    Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
    

Работа с короткими ссылками

  • Создание короткой ссылки (POST /links/shorten)
    Позволяет создать короткую ссылку с опциональными параметрами:
    • original_url — обязательный оригинальный URL
    • expires_at — дата и время истечения срока действия ссылки
    • custom_alias — собственный алиас (если не указан, будет сгенерирован автоматически)

Даже неавторизованные пользователи могут создать ссылку без входа
Вы можете не заполнять custom_alias — система сама сгенерирует уникальный код

Пример запроса:

{
  "original_url": "https://www.youtube.com/watch?v=byx6QjKiSUuw",
  "custom_alias": "myvideo",
  "expires_at": "2025-03-30T23:59"
}

Пример ответа:

{
  "short_url": "https://shortlink-312j.onrender.com/myvideo",
  "created_by": "GreatPopka"
}

  • Редирект по короткому URL
    Любой пользователь может перейти по короткой ссылке:
    https://shortlink-312j.onrender.com/myalias
    

  • Автоматическое удаление просроченных ссылок

    • Если expires_at истёк — ссылка считается недействительной
    • При попытке перехода система может её удалить
  • Раз в неделю автоматически удаляются неиспользуемые ссылки

    • Ссылки, у которых истёк срок действия и не было ни одного перехода (click_count = 0)

Получение оригинального URL

GET /links/{short_code}

Позволяет получить исходную (длинную) ссылку по её короткому коду.
Открытый доступ — авторизация не требуется.

Пример запроса:

GET /links/9rSKCP

Пример ответа (200 OK):

{
  "original_url": "https://www.youtube.com/watch?v=byx6QjKiSUuw"
}

Если ссылка не найдена или срок действия истёк, будет возвращена ошибка.


Удаление короткой ссылки

DELETE /links/{short_code}

Позволяет авторизованному пользователю удалить свою ссылку по её короткому коду (short_code).

Требуется авторизацияBearer <access_token>

Пример запроса:

DELETE /links/myc11
Authorization: Bearer <access_token>

Пример ответа (200 OK):

{
  "message": "Short URL 'myc11' deleted"
}

Только владелец ссылки может её удалить.
Если ссылка устарела и не использовалась — она также может быть удалена автоматически системой.


Обновление оригинального URL

PUT /links/{short_code}

Позволяет обновить оригинальный URL, на который ведёт короткая ссылка.

Требуется авторизацияBearer <access_token>

Формат запроса:

  • Тип содержимого: application/x-www-form-urlencoded

Пример запроса:

PUT /links/myc11
Authorization: Bearer <access_token>
Content-Type: application/x-www-form-urlencoded

Тело запроса:

new_original_url=https://www.youtube.com/watch?v=byx6QjKiSUuw

Пример ответа (200 OK):

{
  "short_url": "https://shortlink-312j.onrender.com/myc11"
}

Только авторизованный владелец может обновлять ссылку.
Обновление не изменяет короткий код (short_code), а лишь переназначает новый original_url.


Получение статистики по ссылке

GET /links/{short_code}/stats

Позволяет авторизованному владельцу получить полную статистику по короткой ссылке.

Требуется авторизацияBearer <access_token>

Пример запроса:

GET /links/myc11/stats
Authorization: Bearer <access_token>

Пример ответа (200 OK):

{
  "original_url": "https://www.youtube.com/",
  "created_at": "2025-03-27T23:06:41.896661",
  "click_count": 1,
  "last_used_at": "2025-03-27T23:07:15.034103"
}

Описание возвращаемых полей:

  • original_url — исходный URL, на который ведёт короткая ссылка
  • created_at — дата и время создания ссылки
  • click_count — количество переходов по ссылке
  • last_used_at — дата и время последнего перехода

Только владелец ссылки может получить её статистику. Если ссылка создана анонимно — статистика недоступна.


Получение всех своих ссылок

GET /me/links

Позволяет авторизованному пользователю получить список всех своих созданных ссылок.

Требуется авторизацияBearer <access_token>

Пример запроса:

GET /me/links
Authorization: Bearer <access_token>

Пример ответа (200 OK):

[
  {
    "short_code": "mycustom1",
    "original_url": "https://www.twitch.tv/witchblade1",
    "click_count": 0
  },
  {
    "short_code": "myc11",
    "original_url": "https://www.youtube.com/",
    "click_count": 0
  },
  {
    "short_code": "r9h5KPC",
    "original_url": "https://www.youtube.com/watch?v=byx6QjKiSuw",
    "click_count": 0
  }
]

Каждый объект в ответе содержит:

  • short_code — короткий код ссылки
  • original_url — исходный URL
  • click_count — число переходов по ссылке

Эндпоинт полезен для отображения всех ссылок, созданных пользователем, например, в личном кабинете.


Гостевой режим

  • Создание и открытие ссылок — без регистрации
  • Управление, удаление, статистика — только для авторизованных пользователей

Структура базы данных

База данных построена на PostgreSQL, используется SQLAlchemy + asyncpg.


Таблица users

Хранит зарегистрированных пользователей.

Поле Тип Описание
id INTEGER Уникальный ID (Primary Key)
email VARCHAR Уникальный логин/почта пользователя
hashed_password VARCHAR Хэшированный пароль

Пользователи могут:

  • создавать, удалять и обновлять свои ссылки;
  • просматривать статистику по ним.

Таблица shortened_links

Хранит все созданные короткие ссылки, включая ссылки от гостей (неавторизованных пользователей).

Поле Тип Описание
id INTEGER Уникальный ID (Primary Key)
original_url VARCHAR Исходный URL
short_code VARCHAR(50) Уникальный код короткой ссылки
created_at TIMESTAMP Дата создания
expires_at TIMESTAMP Срок действия ссылки
click_count INTEGER Количество переходов
last_used_at TIMESTAMP Дата последнего перехода по ссылке
user_id INTEGER (FK) ID пользователя (если есть, может быть NULL)

Особенности:

  • short_code — уникальный для каждой ссылки
  • expires_at — если указан и истёк, ссылка считается неактивной
  • click_count и last_used_at обновляются автоматически при переходах
  • user_id — может быть NULL, если ссылка создана анонимно

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published