255 lines
4.7 KiB
Markdown
255 lines
4.7 KiB
Markdown
# LK API Template
|
|
|
|
A modern, production-ready API template built with Go and Nuxt 3, featuring comprehensive authentication, mailing capabilities, and automatic API documentation.
|
|
|
|
## 🚀 Features
|
|
|
|
- **Backend (Go)**
|
|
|
|
- Chi router for efficient HTTP routing
|
|
- Swagger/OpenAPI documentation
|
|
- SendGrid integration for email notifications
|
|
- Rate limiting support
|
|
- Redis caching
|
|
- PostgreSQL database integration
|
|
- JWT-based authentication
|
|
- Environment-based configuration
|
|
- Structured logging with Zap
|
|
- Hot reload support with Air
|
|
|
|
- **Frontend (Nuxt 3 + TypeScript)**
|
|
- Vue 3 with Composition API
|
|
- TypeScript support
|
|
- Nuxt modules ecosystem
|
|
- Hot Module Replacement (HMR)
|
|
- Auto-imports for components and composables
|
|
- Server-side rendering capabilities
|
|
- File-based routing
|
|
|
|
## 📋 Prerequisites
|
|
|
|
- Go 1.23.4 or higher
|
|
- Bun 1.0 or higher (for frontend development)
|
|
- Docker and Docker Compose
|
|
- SendGrid API key (for email functionality)
|
|
- Platform-specific requirements:
|
|
- **Mac/Linux**:
|
|
- direnv (for environment management)
|
|
- make
|
|
- **Windows**:
|
|
- Git Bash, WSL2, or PowerShell
|
|
- make (optional, commands can be run manually)
|
|
|
|
## 🛠️ Installation
|
|
|
|
1. Clone the repository:
|
|
|
|
```bash
|
|
git clone https://github.com/FernandoJVideira/LK_API_Temp.git
|
|
cd LK_API_Temp
|
|
```
|
|
|
|
2. Install Bun (if not already installed):
|
|
|
|
**Mac/Linux**:
|
|
|
|
```bash
|
|
curl -fsSL https://bun.sh/install | bash
|
|
```
|
|
|
|
**Windows**:
|
|
|
|
```bash
|
|
# Install WSL2 first if not already installed
|
|
# Then run the same command as Mac/Linux inside WSL2
|
|
```
|
|
|
|
3. Set up environment variables:
|
|
|
|
**Mac/Linux with direnv**:
|
|
|
|
```bash
|
|
cp .envrc.example .envrc
|
|
# Edit .envrc with your configuration
|
|
direnv allow
|
|
```
|
|
|
|
**Windows or alternative setup**:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env with your configuration
|
|
```
|
|
|
|
4. Install backend dependencies:
|
|
|
|
```bash
|
|
go mod download
|
|
```
|
|
|
|
5. Install frontend dependencies:
|
|
|
|
```bash
|
|
cd web
|
|
bun install
|
|
```
|
|
|
|
## 🚀 Development
|
|
|
|
### Infrastructure
|
|
|
|
**Mac/Linux**:
|
|
|
|
```bash
|
|
# Start services
|
|
make start
|
|
|
|
# Stop services
|
|
make stop
|
|
```
|
|
|
|
**Windows (without make)**:
|
|
|
|
```bash
|
|
# Start services
|
|
docker-compose up -d
|
|
|
|
# Stop services
|
|
docker-compose down
|
|
```
|
|
|
|
### Database Management
|
|
|
|
**Mac/Linux**:
|
|
|
|
```bash
|
|
# Create new migration
|
|
make migration name=your_migration_name
|
|
|
|
# Run migrations
|
|
make migrate-up
|
|
|
|
# Rollback migrations
|
|
make migrate-down
|
|
|
|
# Seed database
|
|
make seed
|
|
```
|
|
|
|
**Windows (without make)**:
|
|
|
|
```bash
|
|
# Create new migration
|
|
go run ./cmd/migrate create your_migration_name
|
|
|
|
# Run migrations
|
|
go run ./cmd/migrate up
|
|
|
|
# Rollback migrations
|
|
go run ./cmd/migrate down
|
|
|
|
# Seed database
|
|
go run ./cmd/migrate seed
|
|
```
|
|
|
|
### Backend
|
|
|
|
**Mac/Linux**:
|
|
|
|
```bash
|
|
# Install Air (if not already installed)
|
|
go install github.com/cosmtrek/air@latest
|
|
|
|
# Run with hot reload
|
|
air
|
|
```
|
|
|
|
**Windows**:
|
|
|
|
```bash
|
|
# Install Air (if not already installed)
|
|
go install github.com/cosmtrek/air@latest
|
|
|
|
# Run with hot reload (Git Bash or WSL)
|
|
air
|
|
|
|
# Alternative without Air
|
|
go run ./cmd/api
|
|
```
|
|
|
|
The API will be available at `http://localhost:8080` with the base path `/v1`.
|
|
|
|
### Frontend
|
|
|
|
All platforms:
|
|
|
|
```bash
|
|
cd web
|
|
bun run dev
|
|
```
|
|
|
|
The frontend will be available at `http://localhost:3000`.
|
|
|
|
For other frontend commands:
|
|
|
|
```bash
|
|
# Build for production
|
|
bun run build
|
|
|
|
# Preview production build
|
|
bun run preview
|
|
|
|
# Lint
|
|
bun run lint
|
|
|
|
# Type check
|
|
bun run typecheck
|
|
```
|
|
|
|
Note: Bun provides significantly faster installation and execution times compared to npm or yarn. It also includes built-in TypeScript support and other optimizations for modern web development.
|
|
|
|
## 🔧 Environment Configuration
|
|
|
|
### Using direnv (Mac/Linux recommended)
|
|
|
|
The `.envrc` file is used with direnv to automatically load environment variables when entering the project directory. Example configuration:
|
|
|
|
```bash
|
|
# Server
|
|
export ADDR=:8080
|
|
export EXTERNAL_URL=localhost:8080
|
|
export FRONTEND_URL=http://localhost:3000
|
|
export ENV=development
|
|
|
|
# Database
|
|
export DB_ADDR=postgres://postgres:postgres@localhost:5432/lk_tmpl?sslmode=disable
|
|
export DB_MAX_OPEN_CONNS=30
|
|
export DB_MAX_IDLE_CONNS=30
|
|
export DB_MAX_IDLE_TIME=15m
|
|
|
|
# Additional variables...
|
|
```
|
|
|
|
### Using .env file (Windows or alternative)
|
|
|
|
The same variables should be set in your `.env` file without the `export` keyword:
|
|
|
|
```env
|
|
ADDR=:8080
|
|
EXTERNAL_URL=localhost:8080
|
|
FRONTEND_URL=http://localhost:3000
|
|
ENV=development
|
|
# Additional variables...
|
|
```
|
|
|
|
## 🔍 Monitoring
|
|
|
|
- Redis Commander UI: `http://localhost:8081`
|
|
- Mac/Linux: Access directly
|
|
- Windows: If using WSL2, use the WSL2 IP address instead of localhost
|
|
- Metrics and debugging endpoints available through expvar
|
|
|
|
## 📚 API Documentation
|
|
|
|
The API documentation is automatically generated using Swagger. Once the server is running, you can access the Swagger UI at: `http://localhost:8080/v1/swagger/index.html#/`
|