docs: rewrite README to include comprehensive project documentation and setup guide
Build and Release / release (push) Successful in 1m22s
Build and Release / release (push) Successful in 1m22s
This commit is contained in:
@@ -1,2 +1,217 @@
|
||||
# History_Api
|
||||
# History API
|
||||
|
||||
A comprehensive RESTful API for Ultimate History Website, built with Go and the Fiber framework.
|
||||
|
||||
## Features
|
||||
|
||||
- **User Authentication**: Secure authentication with Google OAuth2 and JWT tokens
|
||||
- **Role-based Access Control**: Granular permissions for different user roles
|
||||
- **Geographic Data Management**: Handle historical geographic entities and spatial data
|
||||
- **Media Management**: Upload, store, and manage historical media assets (images, documents)
|
||||
- **Project Organization**: Group historical data into projects with member collaboration
|
||||
- **Version Control**: Track changes and revisions to historical records
|
||||
- **AI Chatbot**: Intelligent conversational interface for querying historical data
|
||||
- **RAG System**: Retrieval-Augmented Generation for enhanced AI responses
|
||||
- **Battle Replay**: Simulate and replay historical scenarios
|
||||
- **Wiki System**: Collaborative documentation for historical topics
|
||||
- **Statistics & Analytics**: Track usage and historical data metrics
|
||||
- **Tile Services**: Serve map tiles for geographic visualization
|
||||
- **Swagger Documentation**: Interactive API documentation
|
||||
|
||||
## Technology Stack
|
||||
|
||||
- **Language**: Go 1.26.3
|
||||
- **Web Framework**: Fiber v3
|
||||
- **Database**: PostgreSQL with PostGIS extension
|
||||
- **Caching**: Redis
|
||||
- **Object Storage**: AWS S3 compatible storage
|
||||
- **Authentication**: JWT, Google OAuth2
|
||||
- **API Documentation**: Swagger/OpenAPI
|
||||
- **AI/ML**: LangChain Go for RAG and chatbot functionality
|
||||
- **Geospatial**: pgvector for similarity search, MBTiles for map storage
|
||||
- **Email**: SMTP integration for notifications
|
||||
- **Validation**: Go Playground validator
|
||||
|
||||
## Project Structure
|
||||
|
||||
```
|
||||
history-api/
|
||||
├── cmd/ # Application entry points
|
||||
│ ├── api/ # Main API server
|
||||
│ └── worker/ # Background workers (cron jobs)
|
||||
├── internal/ # Private application code
|
||||
│ ├── controllers/ # HTTP request handlers
|
||||
│ ├── dtos/ # Data Transfer Objects
|
||||
│ ├── middlewares/ # Custom HTTP middlewares
|
||||
│ ├── models/ # Data models and database entities
|
||||
│ ├── repositories/ # Data access layer
|
||||
│ ├── routes/ # Route definitions
|
||||
│ └── services/ # Business logic
|
||||
├── pkg/ # Reusable packages
|
||||
│ ├── ai/ # AI/RAG functionality
|
||||
│ ├── cache/ # Redis caching
|
||||
│ ├── config/ # Configuration management
|
||||
│ ├── database/ # Database connections and seeding
|
||||
│ ├── email/ # Email service
|
||||
│ ├── log/ # Logging configuration
|
||||
│ ├── mbtiles/ # Map tile storage
|
||||
│ ├── oauth/ # OAuth providers
|
||||
│ ├── constants/ # Application constants
|
||||
│ └── storage/ # Abstract storage interface
|
||||
├── assets/ # Embedded static assets
|
||||
├── data/ # Data files (MBTiles, etc.)
|
||||
├── docs/ # Documentation files
|
||||
├── deployment/ # Deployment configurations
|
||||
└── build/ # Build artifacts
|
||||
```
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Go 1.26.3 or higher
|
||||
- PostgreSQL 18+ with PostGIS extension
|
||||
- Redis 6+
|
||||
- AWS S3 account or compatible storage (MinIO, etc.)
|
||||
- Google Cloud Project for OAuth2 authentication
|
||||
|
||||
### Installation
|
||||
|
||||
1. Clone the repository:
|
||||
```bash
|
||||
git clone https://github.com/your-username/history-api.git
|
||||
cd history-api
|
||||
```
|
||||
|
||||
2. Install dependencies:
|
||||
```bash
|
||||
go mod tidy
|
||||
```
|
||||
|
||||
3. Configure environment variables:
|
||||
Create a `.env` file in the `assets/resources` directory:
|
||||
```env
|
||||
PROJECT_NAME=
|
||||
PGX_CONNECTION_URI=
|
||||
REDIS_CONNECTION_URI=
|
||||
POSTGRES_DB=
|
||||
POSTGRES_USER=
|
||||
POSTGRES_PASSWORD=
|
||||
SERVER_PORT=
|
||||
SERVER_IP=0.0.0.0
|
||||
|
||||
JWT_SECRET=
|
||||
JWT_REFRESH_SECRET=
|
||||
|
||||
SMTP_PASS=
|
||||
SMTP_USER=
|
||||
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
GOOGLE_REDIRECT_URL=
|
||||
|
||||
STORAGE_ENDPOINT=
|
||||
STORAGE_ACCESS_KEY=
|
||||
STORAGE_SECRET_KEY=
|
||||
STORAGE_BUCKET_NAME=
|
||||
STORAGE_BUCKET_TEMP_NAME=
|
||||
STORAGE_REGION=
|
||||
|
||||
|
||||
ADMIN_DISPLAY_NAME=
|
||||
ADMIN_EMAIL=
|
||||
ADMIN_PASSWORD=
|
||||
|
||||
EMAIL_WORKER_COUNT=2
|
||||
STORAGE_WORKER_COUNT=2
|
||||
RAG_WORKER_COUNT=1
|
||||
|
||||
FRONTEND_URL=
|
||||
|
||||
GOOGLE_AI_API_KEY
|
||||
GOOGLE_AI_MODEL=
|
||||
GOOGLE_AI_EMBEDDING_MODEL=
|
||||
|
||||
OPEN_ROUTER_API=
|
||||
OPEN_ROUTER_MODEL=
|
||||
OPEN_ROUTER_EMBEDDING_MODEL=
|
||||
|
||||
GOONG_API_KEY_MAP=
|
||||
GOONG_API_KEY_REQ=
|
||||
|
||||
FIBER_BODY_LIMIT=0
|
||||
FIBER_CONCURRENCY=0
|
||||
FIBER_READ_BUFFER_SIZE=8192
|
||||
FIBER_WRITE_BUFFER_SIZE=8192
|
||||
FIBER_REDUCE_MEMORY_USAGE=false
|
||||
|
||||
DISABLE_SWAGGER=false
|
||||
DISABLE_REQUEST_LOG=true
|
||||
DISABLE_STARTUP_MESSAGE=true
|
||||
ENABLE_PREFORK=false
|
||||
|
||||
PGX_MAX_CONNS=32
|
||||
PGX_MIN_CONNS=16
|
||||
PGX_MAX_CONN_IDLE_SECONDS=600
|
||||
PGX_HEALTH_CHECK_SECONDS=120
|
||||
|
||||
REDIS_POOL_SIZE=64
|
||||
REDIS_MIN_IDLE_CONNS=16
|
||||
|
||||
MBTILES_MAX_OPEN_CONNS=16
|
||||
MBTILES_MAX_IDLE_CONNS=8
|
||||
```
|
||||
|
||||
4. Run the application:
|
||||
```bash
|
||||
make dev
|
||||
```
|
||||
|
||||
Or build:
|
||||
```bash
|
||||
make build
|
||||
```
|
||||
|
||||
Or build and run with docker:
|
||||
```bash
|
||||
make docker-up
|
||||
```
|
||||
|
||||
### API Documentation
|
||||
|
||||
Once the server is running, visit:
|
||||
- Swagger UI: `http://localhost:${SERVER_PORT}/swagger/index.html`
|
||||
- API endpoints: `http://localhost:${SERVER_PORT}/`
|
||||
|
||||
### Database Migrations
|
||||
The application uses automatic seeding on startup. For production deployments, consider using a migration tool like:
|
||||
- golang-migrate
|
||||
- sqlc
|
||||
|
||||
## Configuration
|
||||
|
||||
All configuration is managed through environment variables or a `.env` file. See the [Configuration](#configuration) section above for details.
|
||||
|
||||
Key configuration areas:
|
||||
- **Server**: Host, port, performance settings
|
||||
- **Database**: Connection pooling, SSL, timezone
|
||||
- **Cache**: Redis connection and TTL settings
|
||||
- **Storage**: AWS credentials, bucket names, regions
|
||||
- **Authentication**: JWT secrets, expiration, OAuth providers
|
||||
- **AI Services**: LLM provider selection, API keys, model parameters
|
||||
- **Email**: SMTP settings for notifications
|
||||
- **Feature Flags**: Enable/disable specific modules
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- [Go Fiber](https://gofiber.io/) - Express inspired web framework
|
||||
- [PostGIS](https://postgis.net/) - Spatial database extender for PostgreSQL
|
||||
- [pgvector](https://github.com/pgvector/pgvector) - Vector similarity search for PostgreSQL
|
||||
- [LangChain Go](https://github.com/tmc/langchaingo) - Framework for LLM applications
|
||||
- [Swagger UI](https://swagger.io/tools/swagger-ui/) - Interactive API documentation
|
||||
- [MinIO](https://min.io/) - High performance S3 compatible object storage
|
||||
Reference in New Issue
Block a user