stanislav_dubich@dev:~$ cat file-backup-system/README.md

File Backup System

RPA-инструмент для аварийного восстановления файлов из облачного сервиса. Java (API) + Go (воркеры). Корректная браузерная автоматизация.

Бизнес-задача

Проблема: Public API облачного сервиса не поддерживает экспорт нативных файлов. Команда из сотен человек рискует потерять работу при сбоях или блокировках аккаунта.

Решение: RPA (Robotic Process Automation). Playwright эмулирует действия пользователя: открывает файл → экспортирует → стримит в S3.

Соответствие правилам: Ограничение частоты (1 файл/воркер), паузы как у человека, корректное обращение к сервису. Инструмент для собственного контента компании, а не скрапинг чужих данных.

Архитектура

┌─────────────────┐         ┌─────────────────┐
│   Admin Panel   │──REST──▶│  Java Backend   │◀──OAuth2/JWT──▶ Keycloak
│   (Frontend)    │         │  (Spring Boot)  │
└─────────────────┘         └────────┬────────┘
                                     │
        ┌────────────────────────────┼────────────────────────────┐
        │                            │                            │
        ▼                            ▼                            ▼
┌───────────────┐           ┌───────────────┐            ┌───────────────┐
│  PostgreSQL   │           │  Figma API    │            │   Go Workers  │
│  (metadata)   │           │  (teams,      │            │  (Playwright) │
└───────────────┘           │   projects)   │            └───────┬───────┘
                            └───────────────┘                    │
                                                                 ▼
                                                         ┌───────────────┐
                                                         │  S3 / Yandex  │
                                                         │  Object Store │
                                                         └───────────────┘
                

Почему Java + Go

Изоляция ресурсов: Headless Chrome потребляет 500MB+ RAM на сессию и может утечь. OOM в браузере не должен убивать админку.

Сервис загрузки (Go)

Пул воркеров с очередью задач на PostgreSQL:

Обработка ошибок:

Java Backend

Стек

Java Backend

Java 21 Spring Boot 3.4 Spring Security OAuth2 Spring Data JPA

Go Workers

Go 1.23 Playwright-go pgx/v5 (PostgreSQL) Viper (config) Logrus (logging)

Data

PostgreSQL 16 Liquibase S3 / Yandex Object Storage

Infra

Docker (multi-stage) Keycloak (OAuth2) GitHub Actions Yandex Container Registry

Моя роль