Gabriel Radureau 52a4ce4139 feat: implement user authentication system with JWT and PostgreSQL
Added comprehensive user management system:
- User registration with validation (3-50 char username, 6+ char password)
- JWT-based authentication with bcrypt password hashing
- Admin authentication with master password
- Password reset workflow with admin flagging
- PostgreSQL repository implementation
- SQLite repository for testing
- Unified authentication service interface

API Endpoints:
- POST /api/v1/auth/register - User registration
- POST /api/v1/auth/login - User/admin authentication
- POST /api/v1/auth/password-reset/request - Request password reset
- POST /api/v1/auth/password-reset/complete - Complete password reset
- POST /api/v1/auth/validate - JWT token validation

Security Features:
- Password hashing with bcrypt
- JWT token generation and validation
- Admin claims in JWT tokens
- Configurable token expiration
- Input validation for all endpoints

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-04-09 00:25:43 +02:00
2026-04-06 17:16:16 +00:00

DanceLessonsCoach

Build Status Go Report Card Version License

A Go project demonstrating idiomatic package structure, CLI implementation, and JSON API with Chi router.

Features

  • Greet function with default behavior
  • Command-line interface
  • JSON API with versioned endpoints
  • Chi router integration
  • Zerolog for high-performance logging
  • Viper for configuration management
  • Graceful shutdown with context
  • Readiness endpoint for Kubernetes/service mesh integration
  • OpenTelemetry integration with Jaeger support
  • OpenAPI/Swagger documentation
  • Unit tests
  • Go 1.26.1 compatible

Installation

# Clone the repository
git clone https://gitea.arcodange.lab/arcodange/dance-lessons-coach.git
cd dance-lessons-coach

# Build all binaries
./scripts/build.sh

# Use the new Cobra CLI
./bin/dance-lessons-coach --help

# Or use the legacy greet CLI
go run ./cmd/greet

CI/CD Pipeline

DanceLessonsCoach includes a portable CI/CD pipeline using GitHub Actions syntax:

Features

  • Multi-platform: Works on Gitea, GitHub, and GitLab
  • Build & Test: Automated Go builds and tests
  • Linting: Code quality checks with go fmt and go vet
  • Version Management: Automatic version detection
  • Portable: Uses standard GitHub Actions workflow format

Workflow File

# .github/workflows/main.yml
jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-go@v4
        with:
          go-version: '1.26.1'
      - run: go build ./...
      - run: go test ./... -cover

  lint-format:
    runs-on: ubuntu-latest
    steps:
      - run: go fmt ./...
      - run: go vet ./...

Setup Instructions

  1. Gitea: Enable GitHub Actions compatibility in repo settings
  2. GitHub: Push to mirror repository (workflow runs automatically)
  3. GitLab: Convert workflow to .gitlab-ci.yml or use compatibility mode

See ADR 0016 for complete CI/CD design and STATUS_BADGES.md for badge setup.

Configuration

Basic configuration options:

# Start with default configuration
./scripts/start-server.sh start

# Custom port
export DLC_SERVER_PORT=9090
./scripts/start-server.sh start

# JSON logging
export DLC_LOGGING_JSON=true
./scripts/start-server.sh start

See AGENTS.md for comprehensive configuration guide including:

  • File-based configuration
  • Environment variables
  • Configuration priority rules
  • OpenTelemetry setup
  • Advanced scenarios

Usage

# Show help
./bin/dance-lessons-coach --help

# Show version
./bin/dance-lessons-coach version

# Greet someone
./bin/dance-lessons-coach greet John

# Start server
./bin/dance-lessons-coach server

Legacy CLI (Deprecated)

# Default greeting
go run ./cmd/greet
# Output: Hello world!

# Custom greeting
go run ./cmd/greet John
# Output: Hello John!

Web Server

Using the server control script (recommended):

# Start the server
./scripts/start-server.sh start

# Test API endpoints
./scripts/start-server.sh test

# Access OpenAPI documentation
# Swagger UI: http://localhost:8080/swagger/
# OpenAPI spec: http://localhost:8080/swagger/doc.json

# Stop the server
./scripts/start-server.sh stop

Manual server management:

# Start the server
go run ./cmd/server

# Test API endpoints
curl http://localhost:8080/api/health
# Output: {"status":"healthy"}

curl http://localhost:8080/api/ready
# Output: {"ready":true}

curl http://localhost:8080/api/v1/greet
# Output: {"message":"Hello world!"}

curl http://localhost:8080/api/v1/greet/John
# Output: {"message":"Hello John!"}

Testing

# Run all tests
go test ./...

# Run specific package tests
go test ./pkg/greet/

CI/CD

DanceLessonsCoach includes a comprehensive CI/CD pipeline with multiple testing options:

Local Testing (No Gitea Required)

# Validate workflow structure
./scripts/cicd.sh validate

# Test workflow steps locally
./scripts/cicd.sh test-simple

Gitea Integration

# Test local setup with Gitea configuration
./scripts/cicd.sh test-local

# Check pipeline status on Gitea
./scripts/cicd.sh check-status

Full CI/CD Testing

# Test with docker compose (requires Gitea runner)
./scripts/cicd.sh test-docker

See adr/0016-ci-cd-pipeline-design.md for complete CI/CD architecture.

Project Structure

DanceLessonsCoach/
├── adr/                    # Architecture Decision Records
├── cmd/                    # Entry points (greet CLI, server)
├── pkg/                    # Core packages (config, greet, server, telemetry)
│   └── server/docs/        # Generated OpenAPI documentation (gitignored)
├── config.yaml             # Configuration file
├── scripts/                # Management scripts
└── go.mod                   # Go module definition

See AGENTS.md for detailed structure and component explanations.


## Development

### Generate OpenAPI Documentation

The project uses [swaggo/swag](https://github.com/swaggo/swag) to generate OpenAPI/Swagger documentation from code annotations:

```bash
# Generate documentation
go generate ./pkg/server/

# This creates:
# - pkg/server/docs/docs.go (swagger template)
# - pkg/server/docs/swagger.json (OpenAPI spec)
# - pkg/server/docs/swagger.yaml (YAML version)

Note: pkg/server/docs/ is gitignored. Documentation is embedded in the binary at build time.

Documentation Annotations

Add swagger annotations to handlers and models:

// @Summary Get personalized greeting
// @Description Returns a greeting with the specified name
// @Tags greet
// @Accept json
// @Produce json
// @Param name path string true "Name to greet"
// @Success 200 {object} GreetResponse "Successful response"
// @Failure 400 {object} ErrorResponse "Invalid name parameter"
// @Router /v1/greet/{name} [get]
func (h *apiV1GreetHandler) handleGreetPath(w http.ResponseWriter, r *http.Request) {
    // handler implementation
}

Architecture

This project uses Architecture Decision Records (ADRs) to document key technical choices. See adr/ for complete documentation including decisions on Go 1.26.1, Chi router, Zerolog, OpenTelemetry, interface-based design, graceful shutdown, configuration management, testing strategies, and OpenAPI documentation.

Adding new decisions? See adr/README.md for guidelines.

Gitea Integration

DanceLessonsCoach includes AI agent skills for Gitea integration to monitor CI/CD jobs and interact with pull requests.

Gitea Client Skill Setup

The Gitea client skill enables AI agents to:

  • Monitor CI/CD job status
  • Fetch job logs for debugging
  • Comment on pull requests
  • Track PR status

Setup Instructions:

  1. Create a Personal Access Token:

    • Log in to https://gitea.arcodange.lab
    • Go to Profile → Settings → Applications
    • Generate token with read:repository, write:repository, and read:user scopes
  2. Configure Authentication:

    # Option 1: Environment variable
    export GITEA_API_TOKEN="your_token"
    
    # Option 2: Token file (recommended)
    echo "your_token" > ~/.gitea_token
    chmod 600 ~/.gitea_token
    export GITEA_API_TOKEN_FILE="$HOME/.gitea_token"
    
  3. Add to shell configuration:

    echo 'export GITEA_API_TOKEN_FILE="$HOME/.gitea_token"' >> ~/.bashrc
    source ~/.bashrc
    

Usage Examples:

# List recent jobs
.vibe/skills/gitea-client/scripts/gitea-client.sh list-jobs owner repo workflow_id 5

# Wait for job completion
.vibe/skills/gitea-client/scripts/gitea-client.sh wait-job owner repo job_id 300

# Comment on PR
.vibe/skills/gitea-client/scripts/gitea-client.sh comment-pr owner repo 42 "Build completed!"

Documentation: See .vibe/skills/gitea-client/README.md for complete setup and usage guide.

🤖 AI Agent Usage

Quick Launch Commands

Programmer Agent (for code implementation, testing, CI/CD):

vibe start --agent dancelessonscoachprogrammer

Product Owner Agent (for requirements, interviews, documentation):

vibe start --agent dancelessonscoach-product-owner

Full Documentation

For complete agent usage guide including:

  • Agent selection guidance
  • Common workflow examples
  • Configuration reference
  • Best practices
  • Troubleshooting tips

See: AGENT_USAGE_GUIDE.md

Gitmoji Cheatsheet

Quick reference for commit messages:

  • 📝 :memo: docs - Documentation
  • :sparkles: feat - New feature
  • 🐛 :bug: fix - Bug fix
  • ♻️ :recycle: refactor - Code refactoring
  • 🔧 :wrench: chore - Build/config changes

Full cheatsheet: GITMOJI_CHEATSHEET.md

License

MIT

Description
No description provided
Readme 57 MiB
Languages
Go 71.2%
Shell 21.7%
Gherkin 3.9%
TypeScript 1.4%
Vue 0.5%
Other 1.2%