# dx-ui-service
DX4 UI Microservices

## Local Development with Docker Compose
### Quick Start

1. **Start all services (PostgreSQL + dx-ui-service)**
   ```bash
   docker compose up -d
   ```

2. **Check service status**
   ```bash
   docker compose ps
   ```

3. **View logs**
   ```bash
   # Follow all logs
   docker compose logs -f
   
   # Follow only application logs
   docker compose logs -f dx-ui-service
   
   # Follow only PostgreSQL logs
   docker compose logs -f postgres
   ```

4. **Test the health endpoint**
   ```bash
   curl http://localhost:8081/dx-ui-service/api/v1/actuator/health
   ```
   Expected response: `{"status":"UP"}`

5. **Stop services**
   ```bash
   docker compose down
   ```

### Available Services

- **dx-ui-service**: Spring Boot application
  - Host: `http://localhost:8081`
  - Context Path: `/dx-ui-service`
  - Health Check: `http://localhost:8081/dx-ui-service/api/v1/actuator/health`
  - API Base: `http://localhost:8081/dx-ui-service/api/v1`

- **PostgreSQL**: Database service
  - Host: `localhost`
  - Port: `6432`
  - Database: `dsam000`
  - Username: `dx_user`
  - Password: `dx_password`

### Useful Commands

#### Rebuild after code changes
```bash
# Rebuild and restart
docker compose up -d --build

# Rebuild without cache
docker compose build --no-cache dx-ui-service
docker compose up -d
```

#### Clean restart
```bash
# Stop and remove volumes (fresh database)
docker compose down -v

# Start fresh
docker compose up -d
```

#### Database access
```bash
# Connect to PostgreSQL
docker exec -it dx-postgres psql -U dx_user -d dsam000

# Or from host (if psql installed)
psql -h localhost -p 6432 -U dx_user -d dsam000
```

#### Debug inside container
```bash
# Shell access to application container
docker exec -it dx-ui-service /bin/bash

# Check health from inside container
docker exec -it dx-ui-service curl http://localhost:8081/dx-ui-service/api/v1/actuator/health
```

### Troubleshooting

#### Services won't start
```bash
# Check logs for errors
docker compose logs

# Check if ports are in use
lsof -i :8080  # Application port
lsof -i :6432  # PostgreSQL port
```

#### Application unhealthy
```bash
# Wait 30-40 seconds for Spring Boot to start
docker compose ps

# Check application logs
docker compose logs dx-ui-service

# Verify database is healthy
docker compose logs postgres
```

#### Clean slate restart
```bash
# Remove everything and start fresh
docker compose down -v
docker volume prune -f
docker compose up -d
```

### Development Workflow

1. Make code changes in your IDE
2. Rebuild the image:
   ```bash
   docker compose build dx-ui-service
   ```
3. Restart the service:
   ```bash
   docker compose up -d
   ```
4. View logs to verify:
   ```bash
   docker compose logs -f dx-ui-service
   ```

### Configuration

Environment variables can be overridden in `docker-compose.yml` or via `.env` file:
- `SPRING_PROFILES_ACTIVE`: Spring profile (default: `local`)
- `SPRING_DATASOURCE_URL`: Database connection string
- `SPRING_DATASOURCE_USERNAME`: Database user
- `SPRING_DATASOURCE_PASSWORD`: Database password
