# RoboTech-RS

[中文](README_zh.md)

RoboTech-RS is a backend service toolkit written in Rust. This project provides commonly used tools for RESTful
controller layer and business logic layer.

## Project Structure

This project organizes functional modules through Rust's feature flags mechanism:

- `api` feature (enabled by default): Contains API interfaces and data transfer objects, providing a unified response
  object (RO) structure
- `base` feature: Provides basic functionalities including logging, configuration management, environment variables
- `web` feature: Implements web server functionality based on Actix-web
- `db` feature: Implements database operations based on SeaORM

## Tech Stack

- Rust 2024 edition
- Actix-web as Web framework (in web feature)
- SeaORM as database ORM (in db feature)
- Utoipa for OpenAPI documentation generation (in api feature)
- Serde for serialization/deserialization (in api feature)
- Chrono for time processing (in api feature)
- Tracing ecosystem for logging (in base feature)

## Feature Flags

This project uses feature flags to control dependencies and functionality:

- `api` (default): Enables API-related features, including response objects (RO) and data transfer
- `base`: Enables basic features like logging, configuration, environment management
- `web`: Enables web server functionality (includes base feature)
- `db`: Enables database CRUD operations (includes base feature)

The `api` feature is enabled by default. To use web server features, you can enable the web feature:

```toml
[dependencies.robotech]
version = "0.8.0"
features = ["web"]
```

To use database operations, enable the db feature:

```toml
[dependencies.robotech]
version = "0.8.0"
features = ["web", "db"]
```

## API Response Format

This project adopts a unified response format, where all API responses follow this structure:

```json
{
  "result": 1,
  "msg": "Operation completed successfully",
  "timestamp": 1700000000000,
  "extra": {},
  "detail": "Optional detailed information",
  "code": "Optional business code"
}
```

API Response Fields Explanation:

- `result`: Response result (Success, IllegalArgument, Warn, Fail)
- `msg`: Response message
- `timestamp`: Timestamp
- `extra`: Optional extra data
- `detail`: Optional detailed information
- `code`: Optional business code

## Quick Start

### Prerequisites

- Rust 1.70 or higher
- PostgreSQL database (if using SeaORM)

### Build Project

```bash
# Build with default features (api_client)
cargo build

# Build with web server features
cargo build --features web

# Build with all features
cargo build --features web,db
```

### Run Service

```bash
# Run service (requires web feature)
cargo run --features web

# Run service with database support
cargo run --features web,db
```

## Modules

- `ro`: Response objects for API responses with unified format
- `cst`: Constants used across the application
- `ctrl`: Controllers handling HTTP requests
- `svc`: Business logic services
- `config`: Configuration management
- `web_server`: Web server implementation
- `db`: Database operations
- `log`: Logging functionality
- `env`: Environment variable management

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.