# Quy Trình Rollback

## Khi Nào Cần Rollback

- Service ngừng hoạt động hoặc không ổn định
- Lỗi nghiêm trọng được phát hiện
- Hiệu suất suy giảm
- Rủi ro hỏng dữ liệu

## Các Bước Rollback

### Rollback Kubernetes

1. **Xác định phiên bản hiện tại**
   ```bash
   kubectl get deployment iam-service -n production -o jsonpath='{.spec.template.spec.containers[0].image}'
   ```

2. **Rollback về phiên bản trước**
   ```bash
   kubectl rollout undo deployment/iam-service -n production
   ```

3. **Xác minh rollback**
   ```bash
   kubectl rollout status deployment/iam-service -n production
   ```

4. **Kiểm tra health của service**
   ```bash
   curl https://api.goodgo.vn/health
   ```

### Rollback Database Migration

**Lưu ý**: Prisma không hỗ trợ rollback tự động. Tạo migration mới để đảo ngược thay đổi.

1. Tạo migration đảo ngược:
   ```bash
   cd services/iam-service
   pnpm prisma migrate dev --name rollback_previous_change
   ```

2. Áp dụng migration đảo ngược:
   ```bash
   pnpm prisma migrate deploy
   ```

### Rollback Docker Compose

1. Dừng các container hiện tại:
   ```bash
   docker-compose down
   ```

2. Checkout phiên bản trước:
   ```bash
   git checkout <previous-commit>
   ```

3. Rebuild và khởi động:
   ```bash
   docker-compose up -d --build
   ```

## Sau Khi Rollback

1. Xác minh chức năng
2. Theo dõi metrics
3. Ghi lại lý do rollback
4. Lập kế hoạch sửa lỗi cho deployment tiếp theo
