Skip to content

Fix/refactoring - #22

Merged
RambokDev merged 5 commits into
mainfrom
fix/refactoring
Mar 8, 2026
Merged

Fix/refactoring#22
RambokDev merged 5 commits into
mainfrom
fix/refactoring

Conversation

@RambokDev

@RambokDev RambokDev commented Mar 8, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Added backup and restore functionality with support for multiple storage providers.
    • Added agent restore API endpoint for database recovery operations.
  • Infrastructure

    • Switched primary database from SQLite to PostgreSQL for enhanced scalability and reliability.
    • Expanded seed data generation for improved testing capacity.

@RambokDev
RambokDev merged commit f973bc1 into main Mar 8, 2026
1 check was pending
@RambokDev
RambokDev deleted the fix/refactoring branch March 8, 2026 18:47
@coderabbitai

coderabbitai Bot commented Mar 8, 2026

Copy link
Copy Markdown

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a22d2c8d-18d8-4f2c-aa45-6e9911a6e4d2

📥 Commits

Reviewing files that changed from the base of the PR and between 6ea9fdf and ea4b07d.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (31)
  • docker-compose.yml
  • scripts/postgres/seed-1gb.sql
  • src/services/api/endpoints/agent/mod.rs
  • src/services/api/endpoints/agent/restore/mod.rs
  • src/services/api/models/agent/mod.rs
  • src/services/api/models/agent/restore.rs
  • src/services/backup.rs
  • src/services/backup/compressor.rs
  • src/services/backup/dispatcher.rs
  • src/services/backup/executor.rs
  • src/services/backup/helpers.rs
  • src/services/backup/mod.rs
  • src/services/backup/models.rs
  • src/services/backup/result.rs
  • src/services/backup/runner.rs
  • src/services/backup/service.rs
  • src/services/backup/uploader.rs
  • src/services/restore.rs
  • src/services/restore/archive.rs
  • src/services/restore/dispatcher.rs
  • src/services/restore/downloader.rs
  • src/services/restore/executor.rs
  • src/services/restore/mod.rs
  • src/services/restore/models.rs
  • src/services/restore/result.rs
  • src/services/restore/runner.rs
  • src/services/restore/service.rs
  • src/services/storage/mod.rs
  • src/services/storage/providers/google_drive/mod.rs
  • src/services/storage/providers/local.rs
  • src/services/storage/providers/s3/mod.rs

📝 Walkthrough

Walkthrough

This PR significantly restructures backup and restore services by decomposing monolithic implementations into modular, single-responsibility components. PostgreSQL database support is activated in Docker configuration, a new agent API restore endpoint is introduced with request/response models, and import paths are adjusted to reflect the new backup module organization.

Changes

Cohort / File(s) Summary
Docker Infrastructure
docker-compose.yml
Activated PostgreSQL service with environment configuration, disabled SQLite mounts, updated EDGE_KEY value, and configured external portabase network.
Agent API - Restore Endpoint
src/services/api/endpoints/agent/mod.rs, src/services/api/endpoints/agent/restore/mod.rs, src/services/api/models/agent/mod.rs, src/services/api/models/agent/restore.rs
Introduced new restore API endpoint with ResultRestoreRequest struct (generated_id, status) and ResultRestoreResponse struct (message, status). Added async restore_result method to ApiClient for POST requests to /agent/{agent_id}/restore.
Backup Service Refactoring
src/services/backup.rs, src/services/backup/mod.rs, src/services/backup/service.rs, src/services/backup/dispatcher.rs, src/services/backup/executor.rs, src/services/backup/compressor.rs, src/services/backup/runner.rs, src/services/backup/uploader.rs, src/services/backup/result.rs, src/services/backup/helpers.rs, src/services/backup/models.rs
Decomposed monolithic backup service (415 lines removed) into modular components: service (constructor), dispatcher (task spawning), executor (orchestration), runner (backup execution), compressor (tar.gz), uploader (parallel storage uploads), result (status reporting), and helpers (API calls). BackupService and data models now organized in separate modules.
Restore Service Refactoring
src/services/restore.rs, src/services/restore/mod.rs, src/services/restore/service.rs, src/services/restore/dispatcher.rs, src/services/restore/executor.rs, src/services/restore/downloader.rs, src/services/restore/archive.rs, src/services/restore/runner.rs, src/services/restore/result.rs, src/services/restore/models.rs
Decomposed monolithic restore service (246 lines removed) into modular components: service (constructor), dispatcher (task coordination), executor (orchestration), downloader (HTTP artifact retrieval), archive (decompression and decryption), runner (restore execution), result (status reporting), and models (RestoreResult struct with serde rename).
Storage Provider Import Updates
src/services/storage/mod.rs, src/services/storage/providers/google_drive/mod.rs, src/services/storage/providers/local.rs, src/services/storage/providers/s3/mod.rs
Updated import paths for BackupResult and UploadResult from crate::services::backup to crate::services::backup::models to align with new backup module structure.
Database Seed Configuration
scripts/postgres/seed-1gb.sql
Expanded user-post join condition from ON u.id <= 300000 to ON u.id <= 500000 to increase seed data range.

Sequence Diagram(s)

sequenceDiagram
    actor Client
    participant AgentAPI as Agent API
    participant ApiClient
    participant BackendAPI as Backend Service
    participant Database as Database

    Client->>AgentAPI: POST /agent/{id}/restore<br/>(generated_id, status)
    AgentAPI->>ApiClient: restore_result()
    ApiClient->>BackendAPI: POST /agent/{id}/restore<br/>with ResultRestoreRequest
    BackendAPI->>Database: Update restore status
    Database-->>BackendAPI: Confirmation
    BackendAPI-->>ApiClient: ResultRestoreResponse<br/>(message, status)
    ApiClient-->>AgentAPI: Response
    AgentAPI-->>Client: 200 OK
Loading
sequenceDiagram
    participant Task as Dispatch Task
    participant Executor as Executor
    participant Runner as Runner
    participant Compressor as Compressor
    participant Uploader as Uploader
    participant ResultSender as Result Sender
    participant API as Backend API

    Task->>Executor: execute_backup()
    Executor->>API: create_backup_record()
    API-->>Executor: backup_id
    Executor->>Runner: run() backup operation
    Runner-->>Executor: BackupResult
    Executor->>Compressor: compress_backup()
    Compressor-->>Executor: compressed_path
    Executor->>Uploader: upload() to storages
    Uploader->>API: backup_upload_init/status (per storage)
    API-->>Uploader: UploadResult
    Uploader-->>Executor: Vec<UploadResult>
    Executor->>ResultSender: send_result()
    ResultSender->>API: backup_update()
    API-->>ResultSender: Confirmation
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~75 minutes

Poem

🐰 In modular burrows, services now rest,
Each piece knows its purpose, nothing less.
From monolithic stone to structured spring,
Backup and restore files take their wing!
PostgreSQL gardens bloom where SQLite slept,
And APIs dance through endpoints kept. 🌿✨

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/refactoring

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant