================================================================================
  Файлообменник (fileshare) — сведения о релизе
================================================================================

Текущая версия: 0.10
Дата фиксации описания: 2026-04-17

--------------------------------------------------------------------------------
1. Назначение
--------------------------------------------------------------------------------

Веб-приложение на Go для обмена файлами: загрузка на сервер, хранение на диске,
метаданные в PostgreSQL, скачивание по ссылке. Есть простая HTML-страница и REST API.
По умолчанию HTTP-порт приложения: 8090.

--------------------------------------------------------------------------------
2. Что сделано в проекте
--------------------------------------------------------------------------------

2.1 Язык и зависимости
  - Go 1.22
  - github.com/lib/pq — драйвер PostgreSQL
  - github.com/google/uuid — идентификаторы файлов

2.2 Структура каталогов
  - cmd/fileshare/     — точка входа (main.go), встроенная статика web/
  - cmd/fileshare/web/ — index.html (форма загрузки, список файлов)
  - internal/config/   — переменные окружения (LISTEN_ADDR, DATABASE_URL, …)
  - internal/store/    — работа с БД, миграция таблицы при старте
  - internal/handlers/ — HTTP-обработчики API и отдача файлов
  - internal/version/  — константа версии (сейчас 0.10)

2.3 База данных (PostgreSQL)
  - Таблица files: id (UUID), исходное имя, тип содержимого, размер,
    storage_key (путь к файлу на диске), created_at
  - Индекс по дате создания для списка

2.4 Хранение файлов на диске
  - Каталог из UPLOAD_DIR (по умолчанию ./data/uploads; в Docker — /data/uploads)
  - Подкаталоги по первым символам UUID: ??/??/{uuid}.bin

2.5 HTTP API
  - GET  /health                  — проверка работы; JSON: status, version (0.10)
  - GET  /api/files               — список файлов (JSON), поле download_url
  - POST /api/files               — multipart/form-data, поле "file"
  - GET  /api/files/{id}/download — скачивание (Content-Disposition: attachment)
  - GET  /                         — веб-интерфейс (загрузка и список)

2.6 Docker
  - Dockerfile: multi-stage сборка (Alpine), бинарник без CGO
  - docker-compose.yml:
      * сервис db — postgres:16-alpine, том pgdata
      * сервис app — приложение, порт 8090:8090, том uploads для файлов
      * зависимость app от здоровья БД (healthcheck)
  - Переменные: POSTGRES_PASSWORD (из .env или значение по умолчанию),
    DATABASE_URL для приложения, MAX_UPLOAD_MB и др.

2.7 Установка
  - install.ps1  (Windows, PowerShell) — проверка Docker, копирование .env из
    .env.example при отсутствии .env, docker compose up -d --build
  - install.sh   (Unix) — то же для sh

2.8 Конфигурация через окружение
  - DATABASE_URL   — обязательно при локальном запуске без compose
  - LISTEN_ADDR    — например :8090
  - UPLOAD_DIR     — каталог загрузок
  - MAX_UPLOAD_MB  — лимит размера тела запроса (по умолчанию 100)
  - PUBLIC_BASE_URL — опционально, базовый URL для ссылок в JSON за reverse-proxy

2.9 Репозиторий Git
  - .gitignore   — бинарники, .env, data/, uploads/, IDE и т.д.
  - .gitattributes — eol для go, yaml, sh, ps1
  - .dockerignore — уменьшение контекста сборки

--------------------------------------------------------------------------------
3. Публикация версии 0.10
--------------------------------------------------------------------------------

Версия зафиксирована в коде: internal/version/version.go (константа Version = "0.10").
При старте сервер пишет в лог: fileshare v0.10 listening on …
Ответ GET /health включает поле "version": "0.10".

Рекомендуемые шаги для «публикации»:
  - git add -A && git commit -m "Release 0.10"
  - при использовании тегов: git tag -a v0.10 -m "fileshare 0.10"
  - сборка образа: docker compose build
  - выкладка: по вашему registry/серверу — отправка образа и compose-файлов

--------------------------------------------------------------------------------
4. Быстрый старт (напоминание)
--------------------------------------------------------------------------------

  Windows:  .\install.ps1
  Затем в браузере: http://localhost:8090/
  Проверка версии: http://localhost:8090/health

================================================================================
