Ana içeriğe geç

Blog Yazıları

Blog yazılarının CRUD işlemleri ve kapak görseli yönetimi.

Base URL: /api/tenant/blog/posts Yetkilendirme: Bearer Token + X-Api-Key Modül: Blog modülü müşteriye atanmış olmalıdır.

Headers:

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
X-Api-Key: customer-api-key

POST /

Yeni blog yazısı oluşturur.

Request Body:

{
"status": "Draft",
"publishDate": "2026-04-01T10:00:00Z",
"categoryIds": ["3fa85f64-..."],
"tagIds": ["7ba92e31-..."],
"translations": [
{
"languageId": "9cd14a82-...",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik buraya...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "İlk blog yazımız hakkında kısa açıklama."
}
]
}
AlanTipZorunluAçıklama
statusstringEvetDraft veya Published
publishDateDateTime?HayırYayın tarihi
categoryIdsGuid[]HayırKategori ID listesi
tagIdsGuid[]HayırEtiket ID listesi
translationsBlogPostTranslationRequest[]EvetDil çevirileri

BlogPostTranslationRequest

AlanTipZorunluAçıklama
languageIdGuidEvetDil ID
titlestringEvetBaşlık
contentstringEvetİçerik (HTML)
slugstringEvetURL slug
metaTitlestringHayırSEO başlığı
metaDescriptionstringHayırSEO açıklaması

Response — 201 Created:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"coverImageUrl": null,
"status": "Draft",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"updatedAt": null,
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik buraya...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "İlk blog yazımız hakkında kısa açıklama."
}
]
}
}

GET /

Blog yazılarını filtreli ve sayfalanmış olarak listeler.

Query Parametreleri:

ParametreTipVarsayılanAçıklama
pageint1Sayfa numarası
pageSizeint10Sayfa başına kayıt
statusstringDraft veya Published filtresi
categoryIdGuidKategori filtresi
tagIdGuidEtiket filtresi
searchstringBaşlıkta arama
langstringDil kodu filtresi

Response — 200 OK:

{
"success": true,
"data": {
"items": [
{
"id": "3fa85f64-...",
"coverImageUrl": "https://minio.example.com/covers/image.jpg",
"status": "Published",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"title": "İlk Blog Yazısı",
"slug": "ilk-blog-yazisi"
}
],
"page": 1,
"pageSize": 10,
"totalCount": 1,
"totalPages": 1
}
}

GET /{id}

Blog yazısı detayını (kategoriler, etiketler, tüm çeviriler) getirir.

Response — 200 OK:

{
"success": true,
"data": {
"id": "3fa85f64-...",
"coverImageUrl": "https://minio.example.com/covers/image.jpg",
"status": "Published",
"publishDate": "2026-04-01T10:00:00Z",
"createdAt": "2026-03-27T10:00:00Z",
"updatedAt": "2026-03-28T14:00:00Z",
"translations": [
{
"languageId": "9cd14a82-...",
"languageCode": "tr",
"title": "İlk Blog Yazısı",
"content": "<p>İçerik...</p>",
"slug": "ilk-blog-yazisi",
"metaTitle": "İlk Blog Yazısı | Kompanse",
"metaDescription": "Açıklama"
}
],
"categories": [
{
"id": "cat-id-...",
"isActive": true,
"createdAt": "2026-03-27T10:00:00Z",
"translations": [
{ "languageId": "...", "languageCode": "tr", "name": "Teknoloji", "slug": "teknoloji" }
]
}
],
"tags": [
{
"id": "tag-id-...",
"isActive": true,
"createdAt": "2026-03-27T10:00:00Z",
"translations": [
{ "languageId": "...", "languageCode": "tr", "name": "CMS", "slug": "cms" }
]
}
]
}
}

PUT /{id}

Blog yazısını günceller.

Request Body: CreateBlogPostRequest ile aynı yapıdadır.

Response — 200 OK: BlogPostResponse objesi döner.


DELETE /{id}

Blog yazısını siler (soft delete).

Response — 204 No Content


Kapak Görseli

POST /{id}/cover

Blog yazısına kapak görseli yükler.

Content-Type: multipart/form-data

AlanTipAçıklama
fileIFormFileGörsel dosyası

Response — 200 OK:

{
"success": true,
"data": {
"coverImageUrl": "https://minio.example.com/covers/post-id/image.jpg"
}
}

DELETE /{id}/cover

Kapak görselini siler.

Response — 204 No Content

Olası Hatalar

KodDurum
401Token eksik veya geçersiz
403Tenant kullanıcısı yetkisi yok veya blog modül erişimi yok
404Blog yazısı bulunamadı
409Slug veya ilişkili veri çakışması
400Geçersiz filtre, body veya dosya yükleme isteği