# Articles Response - Client Name Field ## Overview Field `clientName` telah ditambahkan ke `ArticlesResponse` untuk memberikan informasi nama client yang memiliki artikel tersebut. ## Field Baru ### ArticlesResponse ```go type ArticlesResponse struct { // ... existing fields ... CreatedByName *string `json:"createdByName"` ClientName *string `json:"clientName"` // NEW FIELD // ... other fields ... } ``` ## Implementasi ### 1. Response Structure - Field `ClientName` ditambahkan ke `ArticlesResponse` struct - Type: `*string` (optional field) - JSON tag: `"clientName"` ### 2. Mapper Updates - `ArticlesResponseMapper` diperbarui untuk melakukan lookup nama client - Menggunakan `clientsRepository.FindOneByClientId()` untuk mendapatkan nama client - Field `ClientName` diisi berdasarkan `articlesReq.ClientId` ### 3. Service Updates - `ArticlesService` diperbarui untuk menyertakan `clientsRepository` dependency - Constructor `NewArticlesService` menambahkan parameter `clientsRepository` - Semua pemanggilan `ArticlesResponseMapper` diperbarui untuk menyertakan parameter baru ### 4. Repository Updates - `ClientsRepository` interface ditambahkan method `FindOneByClientId(clientId *uuid.UUID)` - Implementasi method untuk mencari client berdasarkan ID ## API Response Example ### Before ```json { "success": true, "data": { "id": 1, "title": "Sample Article", "createdByName": "John Doe", "clientId": "123e4567-e89b-12d3-a456-426614174000" } } ``` ### After ```json { "success": true, "data": { "id": 1, "title": "Sample Article", "createdByName": "John Doe", "clientName": "Acme Corporation", "clientId": "123e4567-e89b-12d3-a456-426614174000" } } ``` ## Database Relationship ``` articles.client_id -> clients.id -> clients.name ``` - `articles.client_id` (UUID) merujuk ke `clients.id` - `clients.name` (string) adalah nama client yang akan ditampilkan ## Error Handling - Jika `articlesReq.ClientId` adalah `nil`, maka `ClientName` akan menjadi `""` - Jika client tidak ditemukan, maka `ClientName` akan menjadi `""` - Tidak ada error yang di-throw untuk missing client (graceful handling) ## Performance Considerations - Lookup client dilakukan per artikel (N+1 query pattern) - Untuk performa yang lebih baik di masa depan, pertimbangkan: - Batch lookup untuk multiple articles - Preloading client data dalam repository query - Caching client names ## Usage Field `clientName` akan otomatis tersedia di semua endpoint articles: - `GET /articles` - List articles - `GET /articles/{id}` - Get single article - `GET /articles/old-id/{id}` - Get article by old ID ## Migration Tidak ada perubahan database yang diperlukan karena: - Field `client_id` sudah ada di tabel `articles` - Field `name` sudah ada di tabel `clients` - Hanya menambahkan field response untuk menampilkan nama client