Dashboard
Tenant kullanıcıları için genel istatistikler ve aktivite özetleri.
Base URL: /api/tenant/dashboard
Yetkilendirme: Bearer Token + X-Api-Key
Rol: TenantUser
GET /stats
Tüm istatistikleri tek bir çağrıda getirir.
Response — 200 OK:
{
"success": true,
"data": {
"totalBlogPosts": 25,
"publishedBlogPosts": 18,
"draftBlogPosts": 7,
"totalProducts": 120,
"publishedProducts": 95,
"draftProducts": 25,
"totalPages": 10,
"publishedPages": 8,
"draftPages": 2,
"totalForms": 5,
"formSubmissions": {
"total": 342,
"new": 12,
"read": 280,
"archived": 45,
"spam": 5,
"thisWeek": 28
},
"mediaUsage": {
"totalFiles": 156,
"totalSizeBytes": 2684354560,
"totalSizeFormatted": "2.5 GB",
"images": 89,
"videos": 12,
"documents": 34,
"others": 21
},
"translationStats": {
"totalTranslations": 450,
"totalUniqueKeys": 150,
"languages": [
{
"languageId": "3fa85f64-...",
"languageCode": "tr",
"languageName": "Türkçe",
"translationCount": 150,
"percentage": 100.0
},
{
"languageId": "3fa85f64-...",
"languageCode": "en",
"languageName": "English",
"translationCount": 120,
"percentage": 80.0
},
{
"languageId": "3fa85f64-...",
"languageCode": "de",
"languageName": "Deutsch",
"translationCount": 90,
"percentage": 60.0
}
]
},
"languages": [
{
"id": "3fa85f64-...",
"code": "tr",
"name": "Türkçe",
"isDefault": true,
"blogPostCount": 25,
"productCount": 120,
"pageCount": 10
},
{
"id": "3fa85f64-...",
"code": "en",
"name": "English",
"isDefault": false,
"blogPostCount": 20,
"productCount": 115,
"pageCount": 8
}
],
"totalNavigatorMenus": 3,
"totalCarousels": 2,
"totalUsers": 8,
"totalCategories": 12,
"totalTags": 35
}
}
Alanlar
| Alan | Tip | Açıklama |
|---|---|---|
totalBlogPosts | int | Toplam blog yazısı |
publishedBlogPosts | int | Yayınlanmış blog yazısı |
draftBlogPosts | int | Taslak blog yazısı |
totalProducts | int | Toplam ürün |
publishedProducts | int | Yayınlanmış ürün |
draftProducts | int | Taslak ürün |
totalPages | int | Toplam sayfa |
publishedPages | int | Yayınlanmış sayfa |
draftPages | int | Taslak sayfa |
totalForms | int | Toplam form |
formSubmissions | FormSubmissionStats | Form başvuru istatistikleri |
mediaUsage | MediaUsageStats | Medya kullanım istatistikleri |
translationStats | TranslationStats | Çeviri istatistikleri |
languages | LanguageStats[] | Dil bazlı içerik sayıları |
totalNavigatorMenus | int | Toplam menü |
totalCarousels | int | Toplam carousel |
totalUsers | int | Toplam kullanıcı |
totalCategories | int | Toplam kategori |
totalTags | int | Toplam etiket |
FormSubmissionStats
| Alan | Tip | Açıklama |
|---|---|---|
total | int | Toplam başvuru |
new | int | Yeni (okunmamış) |
read | int | Okunmuş |
archived | int | Arşivlenmiş |
spam | int | Spam olarak işaretlenmiş |
thisWeek | int | Bu hafta gelen |
MediaUsageStats
| Alan | Tip | Açıklama |
|---|---|---|
totalFiles | int | Toplam dosya sayısı |
totalSizeBytes | long | Toplam boyut (byte) |
totalSizeFormatted | string | Formatlanmış boyut (örn. "2.5 GB") |
images | int | Resim dosyası sayısı |
videos | int | Video dosyası sayısı |
documents | int | Döküman sayısı (PDF, Word, Excel) |
others | int | Diğer dosya türleri |
LanguageStats
| Alan | Tip | Açıklama |
|---|---|---|
id | Guid | Dil ID |
code | string | Dil kodu |
name | string | Dil adı |
isDefault | bool | Varsayılan dil mi |
blogPostCount | int | Bu dildeki blog yazısı |
productCount | int | Bu dildeki ürün |
pageCount | int | Bu dildeki sayfa |
TranslationStats
| Alan | Tip | Açıklama |
|---|---|---|
totalTranslations | int | Toplam çeviri kaydı |
totalUniqueKeys | int | Benzersiz çeviri anahtar sayısı |
languages | LanguageTranslationStats[] | Dil bazlı çeviri istatistikleri |
LanguageTranslationStats
| Alan | Tip | Açıklama |
|---|---|---|
languageId | Guid | Dil ID |
languageCode | string | Dil kodu |
languageName | string | Dil adı |
translationCount | int | Bu dildeki çeviri sayısı |
percentage | decimal | Tamamlanma yüzdesi |
GET /summary
Modül bazlı içerik özetini getirir (yayınlanmış vs taslak dağılımı).
Response — 200 OK:
{
"success": true,
"data": [
{
"moduleName": "Blog",
"moduleCode": "blog",
"totalCount": 25,
"publishedCount": 18,
"draftCount": 7
},
{
"moduleName": "Products",
"moduleCode": "product",
"totalCount": 120,
"publishedCount": 95,
"draftCount": 25
},
{
"moduleName": "Pages",
"moduleCode": "page",
"totalCount": 10,
"publishedCount": 8,
"draftCount": 2
},
{
"moduleName": "Forms",
"moduleCode": "form",
"totalCount": 5,
"publishedCount": 5,
"draftCount": 0
}
]
}
GET /recent
Son güncellenen içerikleri getirir.
Query Parametreleri:
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
days | int | 7 | Kaç gün geriye bakılacağı |
Response — 200 OK:
{
"success": true,
"data": [
{
"id": "3fa85f64-...",
"moduleName": "Blog",
"moduleCode": "blog",
"title": "Blog Post",
"status": "Published",
"updatedAt": "2026-03-30T14:30:00Z",
"updatedBy": "user@example.com"
},
{
"id": "3fa85f64-...",
"moduleName": "Product",
"moduleCode": "product",
"title": "PROD-001",
"status": "Draft",
"updatedAt": "2026-03-30T12:00:00Z",
"updatedBy": "admin@example.com"
}
]
}
GET /recent-form-submissions
Son gönderilen form yanıtlarını getirir.
Query Parametreleri:
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
count | int | 5 | Kaç kayıt getirileceği |
Response — 200 OK:
{
"success": true,
"data": [
{
"id": "3fa85f64-...",
"formId": "3fa85f64-...",
"formName": "İletişim Formu",
"formCode": "contact-form",
"status": "New",
"submittedAt": "2026-03-30T14:30:00Z",
"sourceUrl": "https://example.com/contact",
"ipAddress": "192.168.1.1",
"fields": [
{ "fieldName": "name", "fieldValue": "Ahmet Yılmaz" },
{ "fieldName": "email", "fieldValue": "ahmet@example.com" },
{ "fieldName": "message", "fieldValue": "Merhaba..." }
]
},
{
"id": "3fa85f64-...",
"formId": "3fa85f64-...",
"formName": "İletişim Formu",
"formCode": "contact-form",
"status": "Read",
"submittedAt": "2026-03-29T10:00:00Z",
"sourceUrl": "https://example.com/contact",
"ipAddress": "10.0.0.5",
"fields": [
{ "fieldName": "name", "fieldValue": "Mehmet Çelik" },
{ "fieldName": "email", "fieldValue": "mehmet@example.com" },
{ "fieldName": "message", "fieldValue": "Bilgi almak istiyorum" }
]
}
]
}
Alanlar
| Alan | Tip | Açıklama |
|---|---|---|
id | Guid | Başvuru ID |
formId | Guid | Form ID |
formName | string | Form adı |
formCode | string | Form kodu |
status | string | Durum (New, Read, Archived, Spam) |
submittedAt | DateTime | Gönderim tarihi |
sourceUrl | string? | Gönderim yapılan sayfa URL |
ipAddress | string? | Kullanıcı IP adresi |
fields | FormSubmissionFieldDto[] | Gönderilen alanlar |
FormSubmissionFieldDto
| Alan | Tip | Açıklama |
|---|---|---|
fieldName | string | Alan adı |
fieldValue | string | Alan değeri |
Olası Hatalar
| Kod | Durum |
|---|---|
401 | Token eksik veya geçersiz |
403 | Tenant kullanıcısı yetkisi yok |