# Development Guide

## Project Structure

```
├── apps/              # Frontend applications
├── services/          # Backend microservices
├── packages/          # Shared libraries
├── infra/             # Infrastructure configs
├── deployments/       # Deployment configs
├── scripts/           # Automation scripts
└── docs/              # Documentation
```

## Development Workflow

### 1. Create a Feature Branch

```bash
git checkout -b feature/my-feature
```

### 2. Make Changes

- Write code following TypeScript strict mode
- Add tests for new functionality
- Update documentation if needed

### 3. Run Tests Locally

```bash
# All tests
pnpm test

# Specific service
pnpm --filter @goodgo/iam-service test
```

### 4. Lint and Format

```bash
pnpm lint
pnpm format
```

### 5. Create Pull Request

- Push your branch
- Create PR targeting `develop`
- CI/CD will run automatically

## Adding a New Service

1. Use the template:
   ```bash
   ./scripts/utils/create-service.sh my-new-service
   ```

2. Update service configuration
3. Implement business logic
4. Add tests
5. Update documentation

## Adding a New Package

1. Create package in `packages/new-package`
2. Add to workspace in `pnpm-workspace.yaml`
3. Export from `index.ts`
4. Add tests
5. Document usage

## Database Migrations

## Database Migrations

```bash
# Create migration (dev)
./scripts/db/migrate.sh iam-service dev

# Apply migrations (production)
./scripts/db/migrate.sh iam-service deploy
```

## Kubernetes Deployment

### Local Kubernetes (Docker Desktop)

```bash
# Enable Kubernetes in Docker Desktop
# Settings → Kubernetes → Enable Kubernetes

# Deploy service
cd deployments/local/kubernetes
./deploy.sh

# Verify deployment
kubectl get pods -n iam-local
kubectl logs -f -n iam-local -l app=iam-service

# Port forward for testing
kubectl port-forward svc/iam-service 5002:80 -n iam-local
curl http://localhost:5002/health/live
```

**See detailed guide**: [Kubernetes Local Deployment Guide](./kubernetes-local.md)

## Debugging

- Use logger from `@goodgo/logger`
- Check Traefik logs: `docker logs traefik-local`
- Check service logs: `./scripts/dev/logs.sh iam-service`
