# Update Article Status - New Feature

## Tổng quan

Method `updateArticleStatus` mới được thêm vào `ArticleService` cho phép cập nhật trạng thái bài viết một cách đơn giản mà không cần thay đổi nội dung bài viết.

## Tính năng

✅ **Cập nhật trạng thái đơn giản**: Chỉ cần article ID và trạng thái mới  
✅ **Bảo toàn dữ liệu**: Giữ nguyên tất cả nội dung hiện có  
✅ **Tự động phát hiện loại**: Hỗ trợ cả bài viết thường và video  
✅ **Kiểm soát comment**: Tùy chọn cập nhật trạng thái bình luận  
✅ **Validation đầy đủ**: Kiểm tra tham số đầu vào  

## Cách sử dụng

### Cơ bản

```typescript
import { ZaloSDK, ArticleStatus, CommentStatus } from 'redai-zalo-sdk';

const sdk = new ZaloSDK();

// Xuất bản bài viết (show)
const result = await sdk.article.updateArticleStatus(
  accessToken,
  'article_id',
  ArticleStatus.SHOW
);

// Ẩn bài viết và tắt bình luận
const result2 = await sdk.article.updateArticleStatus(
  accessToken,
  'article_id',
  ArticleStatus.HIDE,
  CommentStatus.HIDE
);
```

### Theo dõi tiến trình

```typescript
// Cập nhật trạng thái
const updateResult = await sdk.article.updateArticleStatus(
  accessToken,
  articleId,
  ArticleStatus.SHOW
);

// Kiểm tra tiến trình
const progress = await sdk.article.checkArticleProcess(
  accessToken,
  updateResult.token
);

console.log('Trạng thái cập nhật:', progress.status);
```

### Cập nhật hàng loạt

```typescript
const articleIds = ['id1', 'id2', 'id3'];

for (const id of articleIds) {
  try {
    await sdk.article.updateArticleStatus(
      accessToken,
      id,
      ArticleStatus.SHOW
    );
    console.log(`✅ Đã cập nhật bài viết ${id}`);
  } catch (error) {
    console.error(`❌ Lỗi cập nhật bài viết ${id}:`, error);
  }
  
  // Tránh rate limiting
  await new Promise(resolve => setTimeout(resolve, 1000));
}
```

## Tham số

| Tham số | Loại | Bắt buộc | Mô tả |
|---------|------|----------|-------|
| `accessToken` | string | ✅ | Token truy cập OA |
| `articleId` | string | ✅ | ID bài viết cần cập nhật |
| `status` | ArticleStatus | ✅ | Trạng thái mới (`'show'` hoặc `'hide'`) |
| `comment` | CommentStatus | ❌ | Trạng thái bình luận (`'show'` hoặc `'hide'`) |

## Cách hoạt động

1. **Lấy thông tin bài viết**: Gọi `getArticleDetail()` để lấy dữ liệu hiện tại
2. **Bảo toàn dữ liệu**: Giữ nguyên tất cả thông tin (title, content, cover, v.v.)
3. **Cập nhật trạng thái**: Chỉ thay đổi `status` và `comment` (nếu có)
4. **Gọi API cập nhật**: Sử dụng `updateArticle()` với dữ liệu đầy đủ

## Ưu điểm so với updateArticle()

| Tiêu chí | updateArticleStatus() | updateArticle() |
|----------|----------------------|-----------------|
| **Đơn giản** | ✅ Chỉ cần ID + status | ❌ Cần toàn bộ dữ liệu |
| **An toàn** | ✅ Bảo toàn dữ liệu tự động | ⚠️ Có thể ghi đè dữ liệu |
| **Hiệu quả** | ✅ Ít tham số | ❌ Nhiều tham số phức tạp |
| **Dễ sử dụng** | ✅ API đơn giản | ❌ Cần chuẩn bị nhiều data |

## Xử lý lỗi

```typescript
try {
  const result = await sdk.article.updateArticleStatus(
    accessToken,
    articleId,
    ArticleStatus.SHOW
  );
  console.log('Cập nhật thành công:', result.token);
} catch (error) {
  if (error.message.includes('Article ID cannot be empty')) {
    console.error('Lỗi: ID bài viết trống');
  } else if (error.message.includes('Invalid status')) {
    console.error('Lỗi: Trạng thái không hợp lệ');
  } else {
    console.error('Lỗi khác:', error.message);
  }
}
```

## Ví dụ thực tế

Xem file `examples/article-status-update.ts` để có ví dụ chi tiết về:
- Cập nhật trạng thái cơ bản
- Cập nhật hàng loạt
- Xử lý lỗi và retry logic
- Theo dõi tiến trình cập nhật

## Test

Chạy test để đảm bảo method hoạt động đúng:

```bash
npm test -- article-status-update.test.ts
```

## Tương thích

- ✅ Hỗ trợ cả bài viết thường (normal) và video
- ✅ Tương thích với tất cả phiên bản hiện tại
- ✅ Không ảnh hưởng đến các method khác
- ✅ TypeScript support đầy đủ

---

**Lưu ý**: Method này là bổ sung cho `updateArticle()` hiện có, không thay thế. Sử dụng `updateArticleStatus()` khi chỉ cần thay đổi trạng thái, và `updateArticle()` khi cần cập nhật nội dung.
