kwork-api/WIP.md
root e5377375c6 Initial commit: Kwork API client with full CI/CD
Features:
- Full async API client for Kwork.ru
- Pydantic models for type-safe responses
- Comprehensive error handling
- 93% test coverage

CI/CD:
- Parallel workflow jobs (lint, test, security)
- Ruff for linting and formatting
- MyPy for static type checking
- pip-audit for security scanning
- Pre-commit hooks for code quality
2026-03-29 21:07:19 +00:00

189 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Work In Progress — kwork-api
## 📊 Статус
| Параметр | Значение |
|----------|----------|
| **Проект** | kwork-api |
| **Начало** | 2026-03-23 |
| **Прогресс** | 100% |
| **Статус** | ✅ Готово к v1.0 |
---
## 📋 План
- [x] Структура проекта (pyproject.toml, UV)
- [x] Модели Pydantic (20+ моделей)
- [x] API клиент (45+ эндпоинтов)
- [x] Обработка ошибок (7 типов исключений)
- [x] Тесты unit (46 тестов, 92% coverage)
- [x] Документация (MkDocs + mkdocstrings)
- [x] CI/CD pipeline (Gitea Actions)
- [x] Semantic release (авто-версионирование)
- [ ] `/kworks` endpoint (требует исследования модели)
- [ ] Публикация на internal PyPI
- [ ] Интеграция с kwork-parser
---
## 🔨 Сейчас в работе
**Проект готов!** Ожидает настройки GITEA_TOKEN для автоматических релизов.
---
## 📝 Заметки
### 🏗️ Архитектура
**Стек:**
- Python 3.10+ (тесты на 3.12)
- UV (package manager)
- httpx[http2] (async client)
- pydantic v2 (модели)
- pytest + respx (тесты)
- ruff (lint + format)
**Структура:**
```
kwork-api/
├── src/kwork_api/
│ ├── __init__.py # __version__
│ ├── client.py # KworkClient (45+ методов)
│ ├── models.py # 20+ Pydantic моделей
│ └── errors.py # 7 типов исключений
├── tests/
│ ├── unit/ # Unit тесты (mock)
│ └── integration/ # Integration тесты (требуют credentials)
├── docs/ # Исходники документации
├── .gitea/workflows/ # CI/CD pipeline
└── pyproject.toml # Конфигурация проекта
```
### 📚 Документация
**Инструмент:** MkDocs + mkdocstrings + Material theme
**Команды:**
```bash
# Локальная разработка
mkdocs serve
# Сборка HTML (для CI)
mkdocs build
```
**Деплой:** Автоматически через Gitea Actions на Gitea Pages
**Покрытие:** 100% docstrings (Russian language)
### 🧪 Тестирование
**Coverage:** 92% (порог 90% для PR)
**Запуск:**
```bash
# Все тесты
uv run pytest tests/unit/ -v
# С coverage
uv run pytest --cov=src/kwork_api --cov-report=html
```
**Артефакты:**
- HTML отчёт pytest (test-results/report.html)
- HTML отчёт coverage (coverage-html/index.html)
### 🚀 CI/CD (Gitea Actions)
**Workflow 1: PR Checks** (`pr-check.yml`)
- Триггер: `pull_request` в `main`
- Тесты с coverage (90% threshold)
- Linting (ruff)
- Formatter check
- Security scan (pip-audit)
- Артефакты: test results + coverage report
**Workflow 2: Release & Publish** (`release.yml`)
- Триггер: `push` в `main` ИЛИ теги `v*`
- **main:** Build (production deps only) → Deploy docs
- **tags:** Build → Publish to Gitea Packages
**Semantic Release:**
- Анализирует Conventional Commits
- Auto-bump версии (MAJOR/MINOR/PATCH)
- Auto-generate CHANGELOG
- Auto-create git tags
- Обновляет `pyproject.toml` и `__init__.py`
**Типы коммитов:**
- `feat:` → MINOR (0.1.0 → 0.2.0)
- `fix:` → PATCH (0.1.0 → 0.1.1)
- `feat: + BREAKING CHANGE` → MAJOR (0.1.0 → 1.0.0)
- `docs:`, `style:`, `refactor:`, `test:`, `chore:` → без изменений версии
### 📦 Публикация
**Gitea Packages:** PyPI-compatible registry
```bash
uv publish \
--username <user> \
--password <token> \
https://git.much-data.ru/api/packages/much-data/pypi
```
**Установка:**
```bash
uv pip install kwork-api --index-url https://git.much-data.ru/api/packages/much-data/pypi
```
---
## 🎯 Endpoints
**Реализовано:** 33/33 (100%)
| Группа | Эндпоинты | Статус |
|--------|-----------|--------|
| CatalogAPI | `/catalogMainv2`, `/getKworkDetails` | ✅ |
| ProjectsAPI | `/projects`, `/getPayerOrders` | ✅ |
| UserAPI | `/getUserInfo`, `/getReviews` | ✅ |
| ReferenceAPI | `/cities`, `/countries`, `/categories` | ✅ |
| NotificationsAPI | `/notifications`, `/dialogs` | ✅ |
| OtherAPI | 25+ дополнительных | ✅ |
| ValidationAPI | `/api/validation/checktext` | ✅ |
**Не реализовано:**
- `/kworks` — требует исследования модели ответа
- Analytics эндпоинты — не нужны для библиотеки
---
## 🚧 Блокеры
Нет
---
## 📅 История
- **2026-03-29** — Репозиторий очищен от артефактов (site/, .coverage)
- **2026-03-29** — Настроен semantic-release для авто-версионирования
- **2026-03-29** — CI/CD pipeline готов (PR checks + release)
- **2026-03-29** — История переписана (1 чистый коммит)
- **2026-03-23** — Initial release (45+ endpoints, 92% coverage)
---
## 🔐 Секреты (Gitea)
**Требуется:** `GITEA_TOKEN` в repository secrets
**Права:**
- `write:repository` (push tags, create releases)
- `write:package` (publish to Gitea Packages)
**Где настроить:**
https://git.much-data.ru/much-data/kwork-api/settings/secrets