PDFium — это backend-сервис на языке Go, предоставляющий API для аутентификации пользователей и работы с PDF-файлами (в данный момент реализована загрузка файлов, планируется конвертация в изображения). Проект спроектирован с применением Clean Architecture (Чистой архитектуры) и использует высокопроизводительный фреймворк Fiber.
- Язык: Go 1.24
- Web-фреймворк: Fiber v3
- База данных: PostgreSQL (через
jackc/pgx/v5) - Кэширование: Redis (
redis/go-redis/v9) - Логирование: Zap (
go.uber.org/zap) - Управление конфигурацией: Cleanenv (
ilyakaznacheev/cleanenv) - Безопасность: JWT-токены (
pkg/jwt), хэширование паролей (golang.org/x/crypto)
Проект организован по стандартам Go Standard Project Layout в сочетании с Clean Architecture:
.
├── cmd/ # Точки входа приложения (например, main.go)
│ └── main.go # Запуск приложения
├── config/ # Конфигурационные файлы
│ └── config.yaml # Основной файл конфигурации
├── internal/ # Приватный код приложения (бизнес-логика)
│ ├── app/ # Инициализация приложения, внедрение зависимостей (DI) и запуск сервера
│ ├── config/ # Структуры данных и функции для загрузки конфигурации
│ ├── entity/ # Основные доменные сущности (User, Request и т.д.)
│ ├── handlers/ # Транспортный слой: HTTP-роутинг и обработчики (Fiber)
│ ├── repository/ # Слой доступа к данным: запросы к PostgreSQL
│ └── usecase/ # Слой бизнес-логики: сервисы для аутентификации и работы с PDF
├── logs/ # Директория для файлов с логами работы приложения
├── migrations/ # SQL-скрипты миграций базы данных
└── pkg/ # Общие библиотеки и утилиты (можно переиспользовать)
├── jwt/ # Утилиты для работы с JSON Web Tokens
├── logger/ # Настройка и обертки для логгера Zap
├── postgres/ # Клиент и пул подключений для PostgreSQL
└── redis/ # Инициализация подключения к Redis
- Аутентификация (Auth):
/register— Регистрация новых пользователей./login— Авторизация пользователей и выдача JWT-токенов.
- Работа с PDF:
- Загрузка PDF-файлов на сервер (
UploadPdfFile). - Безопасное переименование и сохранение загруженных файлов в файловую систему.
- (В разработке) Конвертация PDF-страниц в изображения.
- Загрузка PDF-файлов на сервер (
Приложение разделено на независимые слои (Clean Architecture):
- Handlers (Транспортный слой): Принимает HTTP-запросы, валидирует входящие данные (например,
entity.DoRegister,entity.DoLogin) и передает их в слой бизнес-логики. - Usecase (Слой бизнес-логики): Содержит основные правила приложения (регистрация, генерация токенов, логика загрузки файлов). Не зависит от HTTP или базы данных.
- Repository (Слой данных): Реализует интерфейсы, необходимые Usecase слою, выполняя реальные запросы в базу данных PostgreSQL.
(Инструкции по запуску можно дополнить, например:)
# 1. Запуск инфраструктуры (БД, Redis) через Docker
docker-compose up -d
# 2. Применение миграций базы данных
# ...
# 3. Запуск сервиса
go run cmd/main.go