887 lines
16 KiB
Markdown
887 lines
16 KiB
Markdown
|
|
# Veza Backend API - Development Setup Guide
|
||
|
|
|
||
|
|
## Table of Contents
|
||
|
|
|
||
|
|
1. [Overview](#overview)
|
||
|
|
2. [Prerequisites](#prerequisites)
|
||
|
|
3. [Quick Start](#quick-start)
|
||
|
|
4. [Manual Setup](#manual-setup)
|
||
|
|
5. [Docker Setup](#docker-setup)
|
||
|
|
6. [Project Structure](#project-structure)
|
||
|
|
7. [Configuration](#configuration)
|
||
|
|
8. [Database Setup](#database-setup)
|
||
|
|
9. [Running the Application](#running-the-application)
|
||
|
|
10. [Development Workflow](#development-workflow)
|
||
|
|
11. [Testing](#testing)
|
||
|
|
12. [Debugging](#debugging)
|
||
|
|
13. [Development Tools](#development-tools)
|
||
|
|
14. [Troubleshooting](#troubleshooting)
|
||
|
|
|
||
|
|
## Overview
|
||
|
|
|
||
|
|
This guide will help you set up a local development environment for the Veza Backend API. The API is built with Go 1.23+ using the Gin web framework, PostgreSQL for data storage, and Redis for caching.
|
||
|
|
|
||
|
|
## Prerequisites
|
||
|
|
|
||
|
|
### Required Software
|
||
|
|
|
||
|
|
#### Go
|
||
|
|
|
||
|
|
**Version:** Go 1.23 or higher
|
||
|
|
|
||
|
|
**Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt update
|
||
|
|
sudo apt install golang-go
|
||
|
|
|
||
|
|
# Fedora/RHEL
|
||
|
|
sudo dnf install golang
|
||
|
|
|
||
|
|
# macOS
|
||
|
|
brew install go
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
# Download from https://golang.org/dl/
|
||
|
|
# Or use Chocolatey: choco install golang
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verify Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
go version
|
||
|
|
# Should output: go version go1.23.x ...
|
||
|
|
```
|
||
|
|
|
||
|
|
#### PostgreSQL
|
||
|
|
|
||
|
|
**Version:** PostgreSQL 12 or higher (15+ recommended)
|
||
|
|
|
||
|
|
**Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt install postgresql postgresql-contrib
|
||
|
|
|
||
|
|
# Fedora/RHEL
|
||
|
|
sudo dnf install postgresql postgresql-server
|
||
|
|
|
||
|
|
# macOS
|
||
|
|
brew install postgresql@15
|
||
|
|
brew services start postgresql@15
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
# Download from https://www.postgresql.org/download/windows/
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verify Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
psql --version
|
||
|
|
# Should output: psql (PostgreSQL) 15.x ...
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Redis (Optional but Recommended)
|
||
|
|
|
||
|
|
**Version:** Redis 6 or higher
|
||
|
|
|
||
|
|
**Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt install redis-server
|
||
|
|
|
||
|
|
# Fedora/RHEL
|
||
|
|
sudo dnf install redis
|
||
|
|
|
||
|
|
# macOS
|
||
|
|
brew install redis
|
||
|
|
brew services start redis
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
# Download from https://github.com/microsoftarchive/redis/releases
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verify Installation:**
|
||
|
|
|
||
|
|
```bash
|
||
|
|
redis-cli ping
|
||
|
|
# Should output: PONG
|
||
|
|
```
|
||
|
|
|
||
|
|
### Optional Software
|
||
|
|
|
||
|
|
#### Docker and Docker Compose
|
||
|
|
|
||
|
|
For containerized development:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt install docker.io docker-compose
|
||
|
|
|
||
|
|
# Fedora/RHEL
|
||
|
|
sudo dnf install docker docker-compose
|
||
|
|
|
||
|
|
# macOS
|
||
|
|
brew install docker docker-compose
|
||
|
|
|
||
|
|
# Windows
|
||
|
|
# Download Docker Desktop from https://www.docker.com/products/docker-desktop
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Air (Hot Reload)
|
||
|
|
|
||
|
|
For automatic code reloading during development:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
go install github.com/cosmtrek/air@latest
|
||
|
|
```
|
||
|
|
|
||
|
|
#### golang-migrate
|
||
|
|
|
||
|
|
For database migrations:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install migrate tool
|
||
|
|
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Make
|
||
|
|
|
||
|
|
For running common tasks:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Ubuntu/Debian
|
||
|
|
sudo apt install build-essential
|
||
|
|
|
||
|
|
# Fedora/RHEL
|
||
|
|
sudo dnf install make
|
||
|
|
|
||
|
|
# macOS (usually pre-installed)
|
||
|
|
# Windows: Use Chocolatey or install from http://gnuwin32.sourceforge.net/packages/make.htm
|
||
|
|
```
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### Automated Setup Script
|
||
|
|
|
||
|
|
The fastest way to get started:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Navigate to backend API directory
|
||
|
|
cd veza-backend-api
|
||
|
|
|
||
|
|
# Run setup script
|
||
|
|
chmod +x scripts/setup-dev.sh
|
||
|
|
./scripts/setup-dev.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
This script will:
|
||
|
|
- Check for required software (Go, PostgreSQL, Redis)
|
||
|
|
- Create `.env` file from template
|
||
|
|
- Create database if it doesn't exist
|
||
|
|
- Install Go dependencies
|
||
|
|
- Build the application
|
||
|
|
|
||
|
|
### Docker Quick Start
|
||
|
|
|
||
|
|
If you prefer Docker:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# From project root
|
||
|
|
docker-compose up -d
|
||
|
|
|
||
|
|
# Check logs
|
||
|
|
docker-compose logs -f backend-api
|
||
|
|
```
|
||
|
|
|
||
|
|
## Manual Setup
|
||
|
|
|
||
|
|
### 1. Clone Repository
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git clone <repository-url>
|
||
|
|
cd veza/veza-backend-api
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Install Dependencies
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Download Go modules
|
||
|
|
go mod download
|
||
|
|
|
||
|
|
# Tidy dependencies
|
||
|
|
go mod tidy
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Create Environment File
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Copy example environment file
|
||
|
|
cp .env.example .env
|
||
|
|
|
||
|
|
# Or create manually
|
||
|
|
cat > .env << EOF
|
||
|
|
# Database
|
||
|
|
DATABASE_URL=postgres://veza:password@localhost:5432/veza_dev?sslmode=disable
|
||
|
|
|
||
|
|
# Security
|
||
|
|
JWT_SECRET=your-super-secret-jwt-key-minimum-32-characters-long
|
||
|
|
JWT_EXPIRY=24h
|
||
|
|
|
||
|
|
# Application
|
||
|
|
APP_ENV=development
|
||
|
|
API_PORT=8080
|
||
|
|
LOG_LEVEL=DEBUG
|
||
|
|
LOG_FORMAT=text
|
||
|
|
|
||
|
|
# Redis (Optional)
|
||
|
|
REDIS_URL=redis://localhost:6379
|
||
|
|
|
||
|
|
# Services
|
||
|
|
CHAT_SERVER_URL=http://localhost:8081
|
||
|
|
STREAM_SERVER_URL=http://localhost:8082
|
||
|
|
EOF
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Setup Database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create PostgreSQL user and database
|
||
|
|
sudo -u postgres psql << EOF
|
||
|
|
CREATE USER veza WITH PASSWORD 'password';
|
||
|
|
CREATE DATABASE veza_dev OWNER veza;
|
||
|
|
GRANT ALL PRIVILEGES ON DATABASE veza_dev TO veza;
|
||
|
|
\q
|
||
|
|
EOF
|
||
|
|
|
||
|
|
# Or using createdb (if user exists)
|
||
|
|
createdb -U veza veza_dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Run Migrations
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Using migrate tool
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" up
|
||
|
|
|
||
|
|
# Or using Make
|
||
|
|
make migrate-up
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6. Build Application
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build binary
|
||
|
|
make build
|
||
|
|
|
||
|
|
# Or manually
|
||
|
|
go build -o bin/veza-backend-api ./cmd/api/main.go
|
||
|
|
```
|
||
|
|
|
||
|
|
### 7. Run Application
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run directly
|
||
|
|
./bin/veza-backend-api
|
||
|
|
|
||
|
|
# Or using Make
|
||
|
|
make run
|
||
|
|
|
||
|
|
# Or with hot reload (if Air is installed)
|
||
|
|
air
|
||
|
|
```
|
||
|
|
|
||
|
|
## Docker Setup
|
||
|
|
|
||
|
|
### Using Docker Compose
|
||
|
|
|
||
|
|
The project includes a `docker-compose.yml` for local development:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Start all services (PostgreSQL, Redis, Backend API)
|
||
|
|
docker-compose up -d
|
||
|
|
|
||
|
|
# View logs
|
||
|
|
docker-compose logs -f backend-api
|
||
|
|
|
||
|
|
# Stop services
|
||
|
|
docker-compose down
|
||
|
|
|
||
|
|
# Rebuild and restart
|
||
|
|
docker-compose up -d --build
|
||
|
|
```
|
||
|
|
|
||
|
|
### Docker Compose Services
|
||
|
|
|
||
|
|
- **postgres**: PostgreSQL database on port 5432
|
||
|
|
- **redis**: Redis cache on port 6379
|
||
|
|
- **backend-api**: Go API on port 8080
|
||
|
|
|
||
|
|
### Environment Variables for Docker
|
||
|
|
|
||
|
|
Create `.env` file in project root:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
POSTGRES_DB=veza_dev
|
||
|
|
POSTGRES_USER=veza
|
||
|
|
POSTGRES_PASSWORD=password
|
||
|
|
REDIS_PASSWORD=
|
||
|
|
JWT_SECRET=your-super-secret-jwt-key-minimum-32-characters-long
|
||
|
|
```
|
||
|
|
|
||
|
|
## Project Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
veza-backend-api/
|
||
|
|
├── cmd/
|
||
|
|
│ └── api/
|
||
|
|
│ └── main.go # Application entry point
|
||
|
|
├── internal/
|
||
|
|
│ ├── api/ # HTTP routes and router configuration
|
||
|
|
│ ├── core/ # Business logic (auth, track, marketplace)
|
||
|
|
│ │ ├── auth/ # Authentication core
|
||
|
|
│ │ ├── track/ # Track management core
|
||
|
|
│ │ ├── marketplace/ # Marketplace core
|
||
|
|
│ │ └── social/ # Social features core
|
||
|
|
│ ├── config/ # Configuration management
|
||
|
|
│ ├── database/ # Database connection and migrations
|
||
|
|
│ ├── handlers/ # HTTP request handlers
|
||
|
|
│ ├── middleware/ # HTTP middleware (auth, CORS, rate limiting)
|
||
|
|
│ ├── models/ # GORM data models
|
||
|
|
│ ├── repositories/ # Data access layer
|
||
|
|
│ ├── services/ # Business services
|
||
|
|
│ ├── workers/ # Background job workers
|
||
|
|
│ ├── validators/ # Input validation
|
||
|
|
│ └── utils/ # Utility functions
|
||
|
|
├── migrations/ # SQL migration files
|
||
|
|
├── tests/ # Integration tests
|
||
|
|
├── docs/ # Documentation
|
||
|
|
├── scripts/ # Utility scripts
|
||
|
|
├── Makefile # Common tasks
|
||
|
|
├── go.mod # Go module definition
|
||
|
|
├── go.sum # Go module checksums
|
||
|
|
└── .env # Environment variables (not in git)
|
||
|
|
```
|
||
|
|
|
||
|
|
## Configuration
|
||
|
|
|
||
|
|
### Environment Variables
|
||
|
|
|
||
|
|
#### Required Variables
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Database connection
|
||
|
|
DATABASE_URL=postgres://user:password@host:5432/dbname?sslmode=disable
|
||
|
|
|
||
|
|
# JWT secret (minimum 32 characters)
|
||
|
|
JWT_SECRET=your-super-secret-jwt-key-minimum-32-characters-long
|
||
|
|
|
||
|
|
# Application environment
|
||
|
|
APP_ENV=development # development|staging|production
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Development Variables
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Logging
|
||
|
|
LOG_LEVEL=DEBUG # DEBUG|INFO|WARN|ERROR
|
||
|
|
LOG_FORMAT=text # text|json
|
||
|
|
|
||
|
|
# Server
|
||
|
|
API_PORT=8080
|
||
|
|
HANDLER_TIMEOUT=30s
|
||
|
|
|
||
|
|
# Redis (optional)
|
||
|
|
REDIS_URL=redis://localhost:6379
|
||
|
|
|
||
|
|
# Services
|
||
|
|
CHAT_SERVER_URL=http://localhost:8081
|
||
|
|
STREAM_SERVER_URL=http://localhost:8082
|
||
|
|
|
||
|
|
# Uploads
|
||
|
|
UPLOAD_DIR=./uploads
|
||
|
|
MAX_CONCURRENT_UPLOADS=10
|
||
|
|
|
||
|
|
# ClamAV (optional)
|
||
|
|
ENABLE_CLAMAV=false # Set to false for local development
|
||
|
|
CLAMAV_REQUIRED=false
|
||
|
|
```
|
||
|
|
|
||
|
|
### Configuration Files
|
||
|
|
|
||
|
|
- `.env`: Local environment variables (not committed to git)
|
||
|
|
- `.env.example`: Example environment file (committed to git)
|
||
|
|
- `config/`: Configuration files for different environments
|
||
|
|
|
||
|
|
## Database Setup
|
||
|
|
|
||
|
|
### Create Database
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Using psql
|
||
|
|
sudo -u postgres psql
|
||
|
|
CREATE DATABASE veza_dev;
|
||
|
|
CREATE USER veza WITH PASSWORD 'password';
|
||
|
|
GRANT ALL PRIVILEGES ON DATABASE veza_dev TO veza;
|
||
|
|
\q
|
||
|
|
|
||
|
|
# Or using createdb
|
||
|
|
createdb -U veza veza_dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Run Migrations
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Using migrate tool
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" up
|
||
|
|
|
||
|
|
# Check migration status
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" version
|
||
|
|
|
||
|
|
# Rollback last migration
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" down 1
|
||
|
|
```
|
||
|
|
|
||
|
|
### Seed Database (Optional)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# If seed scripts exist
|
||
|
|
go run scripts/seed.go
|
||
|
|
```
|
||
|
|
|
||
|
|
## Running the Application
|
||
|
|
|
||
|
|
### Development Mode
|
||
|
|
|
||
|
|
#### With Hot Reload (Air)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install Air if not already installed
|
||
|
|
go install github.com/cosmtrek/air@latest
|
||
|
|
|
||
|
|
# Run with hot reload
|
||
|
|
air
|
||
|
|
|
||
|
|
# Or create .air.toml config file
|
||
|
|
air init
|
||
|
|
air
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Without Hot Reload
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build and run
|
||
|
|
make run
|
||
|
|
|
||
|
|
# Or manually
|
||
|
|
go run ./cmd/api/main.go
|
||
|
|
|
||
|
|
# Or run binary
|
||
|
|
./bin/veza-backend-api
|
||
|
|
```
|
||
|
|
|
||
|
|
### Verify Application
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Health check
|
||
|
|
curl http://localhost:8080/healthz
|
||
|
|
|
||
|
|
# API endpoint
|
||
|
|
curl http://localhost:8080/api/v1/tracks
|
||
|
|
```
|
||
|
|
|
||
|
|
### Common Make Commands
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Build application
|
||
|
|
make build
|
||
|
|
|
||
|
|
# Run application
|
||
|
|
make run
|
||
|
|
|
||
|
|
# Run tests
|
||
|
|
make test
|
||
|
|
|
||
|
|
# Run tests with coverage
|
||
|
|
make test-coverage
|
||
|
|
|
||
|
|
# Run linter
|
||
|
|
make lint
|
||
|
|
|
||
|
|
# Format code
|
||
|
|
make fmt
|
||
|
|
|
||
|
|
# Run migrations
|
||
|
|
make migrate-up
|
||
|
|
make migrate-down
|
||
|
|
|
||
|
|
# Clean build artifacts
|
||
|
|
make clean
|
||
|
|
```
|
||
|
|
|
||
|
|
## Development Workflow
|
||
|
|
|
||
|
|
### 1. Create Feature Branch
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git checkout -b feature/my-feature
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Make Changes
|
||
|
|
|
||
|
|
- Write code following Go best practices
|
||
|
|
- Follow project structure conventions
|
||
|
|
- Add tests for new functionality
|
||
|
|
|
||
|
|
### 3. Run Tests
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run all tests
|
||
|
|
make test
|
||
|
|
|
||
|
|
# Run specific test
|
||
|
|
go test ./internal/services/... -v
|
||
|
|
|
||
|
|
# Run with coverage
|
||
|
|
make test-coverage
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Check Code Quality
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Format code
|
||
|
|
make fmt
|
||
|
|
|
||
|
|
# Run linter
|
||
|
|
make lint
|
||
|
|
|
||
|
|
# Check for security issues
|
||
|
|
go vet ./...
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Commit Changes
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git add .
|
||
|
|
git commit -m "feat: add new feature"
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6. Push and Create PR
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git push origin feature/my-feature
|
||
|
|
# Create pull request on GitHub/GitLab
|
||
|
|
```
|
||
|
|
|
||
|
|
## Testing
|
||
|
|
|
||
|
|
### Unit Tests
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run all unit tests
|
||
|
|
go test ./...
|
||
|
|
|
||
|
|
# Run tests in specific package
|
||
|
|
go test ./internal/services/...
|
||
|
|
|
||
|
|
# Run with verbose output
|
||
|
|
go test -v ./...
|
||
|
|
|
||
|
|
# Run specific test
|
||
|
|
go test -v ./internal/services -run TestUserService
|
||
|
|
```
|
||
|
|
|
||
|
|
### Integration Tests
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Run integration tests
|
||
|
|
go test ./tests/... -v
|
||
|
|
|
||
|
|
# Run with database
|
||
|
|
DATABASE_URL=postgres://... go test ./tests/integration/...
|
||
|
|
```
|
||
|
|
|
||
|
|
### Test Coverage
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Generate coverage report
|
||
|
|
go test -cover ./...
|
||
|
|
|
||
|
|
# Generate HTML coverage report
|
||
|
|
go test -coverprofile=coverage.out ./...
|
||
|
|
go tool cover -html=coverage.out -o coverage.html
|
||
|
|
```
|
||
|
|
|
||
|
|
### Test Database
|
||
|
|
|
||
|
|
For integration tests, use a separate test database:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Create test database
|
||
|
|
createdb -U veza veza_test
|
||
|
|
|
||
|
|
# Set test database URL
|
||
|
|
export DATABASE_URL=postgres://veza:password@localhost:5432/veza_test?sslmode=disable
|
||
|
|
|
||
|
|
# Run tests
|
||
|
|
go test ./tests/...
|
||
|
|
```
|
||
|
|
|
||
|
|
## Debugging
|
||
|
|
|
||
|
|
### Using Delve (Go Debugger)
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install Delve
|
||
|
|
go install github.com/go-delve/delve/cmd/dlv@latest
|
||
|
|
|
||
|
|
# Debug application
|
||
|
|
dlv debug ./cmd/api/main.go
|
||
|
|
|
||
|
|
# Or attach to running process
|
||
|
|
dlv attach <pid>
|
||
|
|
```
|
||
|
|
|
||
|
|
### VS Code Debugging
|
||
|
|
|
||
|
|
Create `.vscode/launch.json`:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"version": "0.2.0",
|
||
|
|
"configurations": [
|
||
|
|
{
|
||
|
|
"name": "Launch API",
|
||
|
|
"type": "go",
|
||
|
|
"request": "launch",
|
||
|
|
"mode": "debug",
|
||
|
|
"program": "${workspaceFolder}/cmd/api/main.go",
|
||
|
|
"env": {
|
||
|
|
"DATABASE_URL": "postgres://veza:password@localhost:5432/veza_dev?sslmode=disable",
|
||
|
|
"JWT_SECRET": "your-secret-key",
|
||
|
|
"APP_ENV": "development"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
]
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### Logging
|
||
|
|
|
||
|
|
Enable debug logging:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
export LOG_LEVEL=DEBUG
|
||
|
|
export LOG_FORMAT=text
|
||
|
|
```
|
||
|
|
|
||
|
|
View logs:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# If running directly
|
||
|
|
./bin/veza-backend-api
|
||
|
|
|
||
|
|
# If using Docker
|
||
|
|
docker-compose logs -f backend-api
|
||
|
|
|
||
|
|
# If using systemd
|
||
|
|
journalctl -u veza-backend-api -f
|
||
|
|
```
|
||
|
|
|
||
|
|
### Common Debugging Tips
|
||
|
|
|
||
|
|
1. **Check database connection:**
|
||
|
|
```bash
|
||
|
|
psql "$DATABASE_URL" -c "SELECT 1;"
|
||
|
|
```
|
||
|
|
|
||
|
|
2. **Check Redis connection:**
|
||
|
|
```bash
|
||
|
|
redis-cli ping
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **Verify environment variables:**
|
||
|
|
```bash
|
||
|
|
env | grep -E 'DATABASE|JWT|APP_ENV'
|
||
|
|
```
|
||
|
|
|
||
|
|
4. **Check application health:**
|
||
|
|
```bash
|
||
|
|
curl http://localhost:8080/healthz
|
||
|
|
```
|
||
|
|
|
||
|
|
## Development Tools
|
||
|
|
|
||
|
|
### Code Generation
|
||
|
|
|
||
|
|
#### Generate Swagger Documentation
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install swag
|
||
|
|
go install github.com/swaggo/swag/cmd/swag@latest
|
||
|
|
|
||
|
|
# Generate docs
|
||
|
|
swag init -g cmd/api/main.go
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Generate Mock Services
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install mockgen
|
||
|
|
go install github.com/golang/mock/mockgen@latest
|
||
|
|
|
||
|
|
# Generate mocks
|
||
|
|
mockgen -source=internal/services/user_service.go -destination=internal/mocks/user_service_mock.go
|
||
|
|
```
|
||
|
|
|
||
|
|
### Database Tools
|
||
|
|
|
||
|
|
#### Database GUI Clients
|
||
|
|
|
||
|
|
- **pgAdmin**: https://www.pgadmin.org/
|
||
|
|
- **DBeaver**: https://dbeaver.io/
|
||
|
|
- **TablePlus**: https://tableplus.com/
|
||
|
|
|
||
|
|
#### CLI Tools
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# PostgreSQL client
|
||
|
|
psql "$DATABASE_URL"
|
||
|
|
|
||
|
|
# Redis client
|
||
|
|
redis-cli
|
||
|
|
|
||
|
|
# Database migrations
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" version
|
||
|
|
```
|
||
|
|
|
||
|
|
### API Testing
|
||
|
|
|
||
|
|
#### Using curl
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Health check
|
||
|
|
curl http://localhost:8080/healthz
|
||
|
|
|
||
|
|
# Get tracks
|
||
|
|
curl http://localhost:8080/api/v1/tracks
|
||
|
|
|
||
|
|
# Login
|
||
|
|
curl -X POST http://localhost:8080/api/v1/auth/login \
|
||
|
|
-H "Content-Type: application/json" \
|
||
|
|
-d '{"email":"user@example.com","password":"password"}'
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Using HTTPie
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Install HTTPie
|
||
|
|
pip install httpie
|
||
|
|
|
||
|
|
# Make requests
|
||
|
|
http GET http://localhost:8080/api/v1/tracks
|
||
|
|
http POST http://localhost:8080/api/v1/auth/login email=user@example.com password=password
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Using Postman
|
||
|
|
|
||
|
|
Import the API collection from `docs/postman/veza-api.json` (if available).
|
||
|
|
|
||
|
|
### Performance Profiling
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Enable pprof
|
||
|
|
export ENABLE_PPROF=true
|
||
|
|
|
||
|
|
# Access profiler
|
||
|
|
go tool pprof http://localhost:8080/debug/pprof/profile
|
||
|
|
go tool pprof http://localhost:8080/debug/pprof/heap
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Common Issues
|
||
|
|
|
||
|
|
#### Database Connection Failed
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check PostgreSQL is running
|
||
|
|
sudo systemctl status postgresql
|
||
|
|
|
||
|
|
# Check connection
|
||
|
|
psql "$DATABASE_URL" -c "SELECT 1;"
|
||
|
|
|
||
|
|
# Verify DATABASE_URL format
|
||
|
|
echo $DATABASE_URL
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Port Already in Use
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Find process using port 8080
|
||
|
|
lsof -i :8080
|
||
|
|
# or
|
||
|
|
netstat -tulpn | grep 8080
|
||
|
|
|
||
|
|
# Kill process
|
||
|
|
kill -9 <pid>
|
||
|
|
|
||
|
|
# Or change port in .env
|
||
|
|
API_PORT=8081
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Go Module Issues
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Clean module cache
|
||
|
|
go clean -modcache
|
||
|
|
|
||
|
|
# Download dependencies
|
||
|
|
go mod download
|
||
|
|
|
||
|
|
# Tidy modules
|
||
|
|
go mod tidy
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Migration Errors
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Check migration status
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" version
|
||
|
|
|
||
|
|
# Force version (if needed)
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" force <version>
|
||
|
|
|
||
|
|
# Rollback and retry
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" down 1
|
||
|
|
migrate -path ./migrations -database "$DATABASE_URL" up
|
||
|
|
```
|
||
|
|
|
||
|
|
### Getting Help
|
||
|
|
|
||
|
|
- **Documentation**: See `docs/` directory
|
||
|
|
- **API Documentation**: http://localhost:8080/swagger/index.html
|
||
|
|
- **Issues**: Create an issue on GitHub
|
||
|
|
- **Team Chat**: Ask in team Slack/Discord
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
After setting up your development environment:
|
||
|
|
|
||
|
|
1. **Read the API Documentation**: See `docs/API_DOCUMENTATION.md`
|
||
|
|
2. **Explore the Codebase**: Start with `cmd/api/main.go`
|
||
|
|
3. **Run the Test Suite**: `make test`
|
||
|
|
4. **Check out Example Code**: Look at existing handlers and services
|
||
|
|
5. **Join the Team**: Get familiar with team workflows and conventions
|
||
|
|
|
||
|
|
## Additional Resources
|
||
|
|
|
||
|
|
- **Go Documentation**: https://golang.org/doc/
|
||
|
|
- **Gin Framework**: https://gin-gonic.com/docs/
|
||
|
|
- **GORM Documentation**: https://gorm.io/docs/
|
||
|
|
- **PostgreSQL Documentation**: https://www.postgresql.org/docs/
|
||
|
|
- **Redis Documentation**: https://redis.io/documentation
|
||
|
|
|