Files

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#/`