{"id":32504738,"url":"https://github.com/prodreams/lkeep","last_synced_at":"2026-04-02T02:16:55.155Z","repository":{"id":271794238,"uuid":"914575291","full_name":"proDreams/lkeep","owner":"proDreams","description":"Сервис сокращения ссылок для проекта \"Код на салфетке\"","archived":false,"fork":false,"pushed_at":"2025-10-16T10:59:15.000Z","size":333,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-27T18:30:31.010Z","etag":null,"topics":["asyncpg","fastapi","lkeep","napkin","poetry","postgresql","python"],"latest_commit_sha":null,"homepage":"https://pressanybutton.ru/category/servis-na-fastapi/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/proDreams.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-09T21:38:44.000Z","updated_at":"2025-10-16T10:59:19.000Z","dependencies_parsed_at":"2025-01-09T23:25:55.710Z","dependency_job_id":"be7b5594-0c3e-465b-9f79-34bfe2d438b2","html_url":"https://github.com/proDreams/lkeep","commit_stats":null,"previous_names":["prodreams/lkeep"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/proDreams/lkeep","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proDreams%2Flkeep","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proDreams%2Flkeep/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proDreams%2Flkeep/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proDreams%2Flkeep/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/proDreams","download_url":"https://codeload.github.com/proDreams/lkeep/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/proDreams%2Flkeep/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294476,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asyncpg","fastapi","lkeep","napkin","poetry","postgresql","python"],"created_at":"2025-10-27T18:16:28.575Z","updated_at":"2026-04-02T02:16:55.147Z","avatar_url":"https://github.com/proDreams.png","language":"Python","readme":"# Napkin Tools: Lkeep (Links Keeper)\n\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/proDreams/lkeep/lint.yaml)\n[![Код на салфетке](https://img.shields.io/badge/Telegram-Код_на_салфетке-blue)](https://t.me/press_any_button)\n[![Заметки на салфетке](https://img.shields.io/badge/Telegram-Заметки_на_салфетке-blue)](https://t.me/writeanynotes)\n[![Кот на салфетке](https://img.shields.io/badge/Telegram-Кот_на_салфетке-blue)](https://t.me/+Li2vbxfWo0Q4ZDk6)\n\nLkeep — сервис сокращения ссылок, написанный на Python с использованием современных технологий, таких как FastAPI,\nPostgreSQL, Poetry, Pydantic и других.\n\nПроект находится в процессе разработки. Следить за ходом можно:\n\n- На сайте [Код на салфетке](https://pressanybutton.ru/category/servis-na-fastapi/)\n- В Telegram-канале [Код на салфетке](https://t.me/press_any_button)\n\n## Технологии\n\n- **FastAPI** — для построения высокопроизводительных API.\n- **PostgreSQL** — реляционная база данных для хранения данных.\n- **asyncpg** — асинхронная библиотека для подключения к PostgreSQL.\n- **SQLAlchemy** — ORM для работы с базой данных.\n- **Poetry** — инструмент для управления зависимостями и виртуальными окружениями.\n- **Pydantic** — для валидации данных и работы с моделями.\n- **pre-commit** — инструмент для автоматической проверки кода перед коммитом.\n- **CI Workflow** — автоматизация тестирования приложения.\n- **uvicorn** — высокопроизводительный ASGI-сервер для обработки HTTP-запросов.\n- **pydantic-settings** — библиотека для работы с конфигурациями и переменными окружения с использованием Pydantic.\n- **passlib** — библиотека для безопасного хеширования паролей и других данных.\n- **celery** — распределённая система для выполнения фоновых задач и управления очередями, позволяющая выполнять задачи\n  асинхронно.\n- **redis** — высокопроизводительное in-memory хранилище, используемое для кэширования данных и как брокер сообщений для\n  Celery.\n- **itsdangerous** — библиотека для безопасного создания и проверки подписанных данных, что помогает защитить токены и\n  другую чувствительную информацию.\n- **smtplib** — стандартный модуль Python для отправки электронной почты через протокол SMTP.\n- **jinja2** — современный и гибкий шаблонизатор, который позволяет динамически генерировать HTML и другие текстовые\n  форматы.\n- **pyJWT** — библиотека для создания, подписи и верификации JSON Web Tokens (JWT). Используется для генерации токенов\n  доступа, проверки их\n  целостности, срока действия и подписи, а также работы с закодированными данными (payload) в соответствии со\n  стандартами JWT.\n\n## Репозитории\n\n- [GitHub](https://github.com/proDreams/lkeep) — основной репозиторий проекта.\n- [GIT на салфетке](https://git.pressanybutton.ru/proDream/lkeep) — зеркальная копия репозитория на Gitea.\n\n## Ссылки на статьи\n\nЯ пишу подробные статьи для новичков о процессе создания этого проекта. Ознакомьтесь с ними\nна [Код на салфетке](https://pressanybutton.ru/category/servis-na-fastapi/):\n\n1. [FastAPI 1. Инициализация проекта](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-1-inicializaciya-proekta/)\n2. [FastAPI 2. Подготовка проекта](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-2-podgotovka-proekta/)\n3. [FastAPI 3. Подключение к SQLAlchemy и генератор сессий](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-3-podklyuchenie-k-sqlalchemy-i-generator-s/)\n4. [FastAPI 4. Модель пользователя, миксины и Alembic](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-4-model-polzovatelya-i-alembic/)\n5. [FastAPI 5. Приложение аутентификации и Pydantic схемы](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-5-prilozhenie-autentifikacii-i-pydantic-sh/)\n6. [FastAPI 6. Пользовательский сервис и маршруты регистрации](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-6-polzovatelskij-servis-i-marshruty-regist/)\n7. [FastAPI 7. Электронная почта, подтверждение регистрации, Celery и Redis](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-7-elektronnaya-pochta-podtverzhdenie-registracii-celery-i-redis/)\n8. [FastAPI 8. Маршрут авторизации и JWT](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-8-marshrut-avtorizacii-i-jwt/)\n9. [FastAPI 9. Logout и проверка авторизации](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-9-logout-i-proverka-avtorizacii/)\n10. [FastAPI 10. Изменение данных пользователя](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-10-izmenenie-dannyh-polzovatelya/)\n11. [FastAPI 11. Хранение и сокращение ссылок](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-11-hranenie-i-sokrashenie-ssylok/)\n11. [FastAPI 12. Интеграция Starlette Admin](https://pressanybutton.ru/post/servis-na-fastapi/fastapi-12-integraciya-starlette-admin/)\n\n## Установка\n\nДля установки и запуска проекта на вашем локальном компьютере выполните следующие шаги.\n\n1. **Клонируйте репозиторий:**\n\n   Для этого используйте команду `git clone`. Это создаст локальную копию проекта на вашем компьютере.\n\n   Если вы используете GitHub:\n   ```bash\n   git clone https://github.com/proDreams/lkeep.git\n   ```\n\n   Или если предпочитаете Gitea:\n   ```bash\n   git clone https://git.pressanybutton.ru/proDream/lkeep.git\n   ```\n\n2. **Установите зависимости:**\n\n   Для управления зависимостями в проекте используется Poetry. После клонирования репозитория, перейдите в папку с\n   проектом и установите все необходимые пакеты:\n\n   ```bash\n   cd lkeep\n   poetry install\n   ```\n\n   Poetry автоматически установит все библиотеки, указанные в файле `pyproject.toml`.\n\n3. **Настройте переменные окружения:**\n\n   В корне проекта находится файл `.env.example`. Скопируйте его и переименуйте в `.env`. В нем хранятся настройки для\n   подключения к базе данных и другие параметры конфигурации.\n\n   Пример команды:\n   ```bash\n   cp .env.example .env\n   ```\n\n   Затем откройте файл `.env` и заполните его значениями, соответствующими вашей системе (например, настройки\n   подключения к базе данных PostgreSQL).\n\n4. **Запустите БД и Redis**\n\n    Для запуска контейнера с PostgreSQL и Redis используйте команду в терминале:\n    ```bash\n    docker compose up -d\n    ```\n\n5. **Запустите приложение:**\n\n   Для запуска сервера в режиме разработки используйте команду с Poetry:\n   ```bash\n   poetry run app\n   ```\n\n   Это запустит приложение на локальном сервере, доступном по адресу `http://127.0.0.1:8000`.\n\n## Автор\n\nПроект разработан Иваном Ашихминым.\nДля связи используйте [Telegram](https://t.me/proDreams).\n\nПроект создается в рамках сайта **[\"Код на салфетке\"](https://pressanybutton.ru/)**, где публикуются статьи и обучающие\nматериалы по разработке.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodreams%2Flkeep","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprodreams%2Flkeep","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprodreams%2Flkeep/lists"}