{"openapi":"3.0.0","paths":{"/api/v1/menu":{"get":{"operationId":"PublicApiV1Controller_getMenu","parameters":[],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Aktif menü (kategoriler + ürünler)","tags":["Public API v1"]}},"/api/v1/orders":{"get":{"operationId":"PublicApiV1Controller_getOrders","parameters":[{"name":"status","required":false,"in":"query","description":"Sipariş durumu (ör. CREATED, DELIVERED)","schema":{"type":"string"}},{"name":"orderType","required":false,"in":"query","description":"DINE_IN, TAKEAWAY veya DELIVERY","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Sayfa numarası (varsayılan 1)","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Sayfa boyutu (varsayılan 50, en çok 100)","schema":{"type":"string"}},{"name":"from","required":false,"in":"query","description":"Başlangıç tarihi (ISO 8601)","schema":{"type":"string"}},{"name":"to","required":false,"in":"query","description":"Bitiş tarihi (ISO 8601)","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Sipariş listesi (sayfalı)","tags":["Public API v1"]}},"/api/v1/orders/{id}":{"get":{"operationId":"PublicApiV1Controller_getOrder","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Sipariş detayı","tags":["Public API v1"]}},"/api/v1/orders/{id}/status":{"patch":{"operationId":"PublicApiV1Controller_updateStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"api-key":[]}],"summary":"Sipariş durumunu güncelle (orders:write yetkisi gerekli)","tags":["Public API v1"]}}},"info":{"title":"KuryoloPOS Genel API","description":"Restoran verilerinizi kendi yazılımlarınıza bağlayın. Kimlik doğrulama X-Api-Key başlığı ile yapılır.","version":"1.0.0","contact":{}},"tags":[{"name":"Public API v1","description":""}],"servers":[],"components":{"securitySchemes":{"api-key":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"schemas":{"LoginDto":{"type":"object","properties":{"email":{"type":"string","example":"admin@demo-courier.com"},"password":{"type":"string","example":"Admin123!"}},"required":["email","password"]},"AuthResponseDto":{"type":"object","properties":{"accessToken":{"type":"string"},"tokenType":{"type":"string"},"expiresIn":{"type":"number"},"user":{"type":"object"}},"required":["accessToken","tokenType","expiresIn","user"]},"RefreshTokenDto":{"type":"object","properties":{"refreshToken":{"type":"string","description":"Refresh token","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}},"required":["refreshToken"]},"CourierFieldLoginDto":{"type":"object","properties":{"phone":{"type":"string","example":"5551234567"},"password":{"type":"string","example":"Kurye123!"}},"required":["phone","password"]},"CourierFieldRefreshDto":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"ProfileResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"User ID"},"email":{"type":"string","description":"User email"},"name":{"type":"string","description":"User name"},"roleKey":{"type":"string","description":"Role key"},"companyId":{"type":"string","description":"Company ID"},"createdAt":{"format":"date-time","type":"string","description":"Creation date"},"updatedAt":{"format":"date-time","type":"string","description":"Last update date"}},"required":["id","email","roleKey","createdAt","updatedAt"]},"UpdateProfileDto":{"type":"object","properties":{"name":{"type":"string","description":"User name","example":"John Doe"},"email":{"type":"string","description":"User email","example":"john@example.com"}}},"UpdatePasswordDto":{"type":"object","properties":{"currentPassword":{"type":"string","description":"Current password","example":"oldPassword123"},"newPassword":{"type":"string","description":"New password","example":"newPassword123"}},"required":["currentPassword","newPassword"]},"ForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string","description":"Hesap e-posta adresi","example":"kullanici@firma.com"}},"required":["email"]},"ResetPasswordDto":{"type":"object","properties":{"token":{"type":"string","description":"E-posta ile gönderilen sıfırlama token’ı"},"newPassword":{"type":"string","description":"Yeni şifre","example":"YeniSifre123!"}},"required":["token","newPassword"]},"PlatformSettingsDto":{"type":"object","properties":{"id":{"type":"string","description":"Ayarlar ID"},"creditUnitPriceTRY":{"type":"number","description":"1 kredi fiyatı (TL)"},"demoDurationDays":{"type":"number","description":"Demo süresi (gün)"},"topupOfferEnabled":{"type":"boolean","description":"Döneme özel ek paket teklifi aktif mi"},"topupDiscountPct":{"type":"number","description":"Ek paket indirim yüzdesi"},"stripePublishableKey":{"type":"string","description":"Stripe Publishable Key"},"stripeSecretKey":{"type":"string","description":"Stripe Secret Key"},"stripeWebhookSecret":{"type":"string","description":"Stripe Webhook Secret"},"registrationEnabled":{"type":"boolean","description":"Kayıtlar açık mı"},"registrationClosedMessage":{"type":"string","description":"Kayıt kapalı mesajı"},"socialLinks":{"type":"object","description":"KuryoloExpress sosyal medya linkleri"},"posSocialLinks":{"type":"object","description":"KuryoloPOS sosyal medya linkleri"},"heroImageUrl":{"type":"string","description":"Landing hero görseli yolu"},"smtpHost":{"type":"string","description":"SMTP sunucu adresi"},"smtpPort":{"type":"number","description":"SMTP port"},"smtpUser":{"type":"string","description":"SMTP kullanıcı adı"},"smtpPass":{"type":"string","description":"SMTP şifresi"},"smtpFromEmail":{"type":"string","description":"Gönderen e-posta adresi"},"smtpFromName":{"type":"string","description":"Gönderen adı"},"smtpSecure":{"type":"boolean","description":"SSL (465) için true"},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"},"updatedAt":{"format":"date-time","type":"string","description":"Güncelleme tarihi"},"legalName":{"type":"string","description":"Ticaret unvanı"},"legalAddress":{"type":"string","description":"Tebligata elverişli adres"},"taxOffice":{"type":"string","description":"Vergi dairesi"},"taxNumber":{"type":"string","description":"Vergi kimlik numarası"},"mersisNo":{"type":"string","description":"MERSİS numarası"},"contactPhone":{"type":"string","description":"İletişim telefonu"},"contactEmail":{"type":"string","description":"İletişim e-postası"},"cardPaymentEnabled":{"type":"boolean","description":"Kart ile ödeme açık mı"},"transferPaymentEnabled":{"type":"boolean","description":"Havale/EFT ile ödeme açık mı (ikisi birden kapatılamaz)"}},"required":["id","creditUnitPriceTRY","demoDurationDays","registrationEnabled","socialLinks","createdAt","updatedAt"]},"UpdateSettingsDto":{"type":"object","properties":{"creditUnitPriceTRY":{"type":"number","description":"Kredi birim fiyatı (TL) - 1 kredi kaç TL","example":4,"minimum":1,"maximum":1000},"demoDurationDays":{"type":"number","description":"Demo süresi (gün)","example":14,"minimum":1,"maximum":60},"topupOfferEnabled":{"type":"boolean","description":"Döneme özel ek paket teklifi aktif mi"},"topupDiscountPct":{"type":"number","description":"Ek paket indirim yüzdesi (0-90)"},"stripePublishableKey":{"type":"string","description":"Stripe Publishable Key (PK)","example":"pk_test_..."},"stripeSecretKey":{"type":"string","description":"Stripe Secret Key (SK)","example":"sk_test_..."},"stripeWebhookSecret":{"type":"string","description":"Stripe Webhook Secret","example":"whsec_..."},"registrationEnabled":{"type":"boolean","description":"Kayıtlar açık mı"},"registrationClosedMessage":{"type":"string","description":"Kayıtlar kapalıyken gösterilecek mesaj"},"socialLinks":{"type":"object","description":"KuryoloExpress sosyal medya linkleri { platform: { url, enabled } }"},"posSocialLinks":{"type":"object","description":"KuryoloPOS sosyal medya linkleri { platform: { url, enabled } }"},"heroImageUrl":{"type":"string","description":"Landing hero görseli yolu (/uploads/...)"},"smtpHost":{"type":"string","description":"SMTP sunucu adresi","example":"smtp.yandex.com"},"smtpPort":{"type":"number","description":"SMTP port","example":465},"smtpUser":{"type":"string","description":"SMTP kullanıcı adı"},"smtpPass":{"type":"string","description":"SMTP şifresi"},"smtpFromEmail":{"type":"string","description":"Gönderen e-posta adresi","example":"no-reply@kuryoloexpress.com"},"smtpNoreplyEmail":{"type":"string","description":"Sistem e-postalarının gönderen adresi (noreply@...)"},"smtpFromName":{"type":"string","description":"Gönderen adı","example":"KuryoloExpress"},"smtpSecure":{"type":"boolean","description":"SSL (465) için true, STARTTLS (587) için false"},"legalName":{"type":"string","description":"Ticaret unvanı"},"legalAddress":{"type":"string","description":"Tebligata elverişli adres"},"taxOffice":{"type":"string","description":"Vergi dairesi"},"taxNumber":{"type":"string","description":"Vergi kimlik numarası"},"mersisNo":{"type":"string","description":"MERSİS numarası"},"contactPhone":{"type":"string","description":"İletişim telefonu"},"contactEmail":{"type":"string","description":"İletişim e-postası"},"cardPaymentEnabled":{"type":"boolean","description":"Kart ile ödeme açık mı"},"transferPaymentEnabled":{"type":"boolean","description":"Havale/EFT ile ödeme açık mı (ikisi birden kapatılamaz)"}}},"DashboardStatsDto":{"type":"object","properties":{"creditBalance":{"type":"number"},"isDemoActive":{"type":"boolean"},"unlimited":{"type":"boolean","description":"Admin tarafından verilen süresiz/sınırsız erişim"},"demoExpired":{"type":"boolean","description":"Demo süresi dolmuş hesap mı"},"demoEndsAt":{"format":"date-time","type":"string"},"totalOrders":{"type":"number"},"createdToday":{"type":"number"},"deliveredToday":{"type":"number"},"cancelledToday":{"type":"number"},"inTransit":{"type":"number"},"monthlyOrderCount":{"type":"number"},"creditUnitPrice":{"type":"number","description":"Kredi birim fiyatı (TL)"}},"required":["creditBalance","isDemoActive","unlimited","demoExpired","demoEndsAt","totalOrders","createdToday","deliveredToday","cancelledToday","inTransit","monthlyOrderCount","creditUnitPrice"]},"DashboardOrderSummaryDto":{"type":"object","properties":{"id":{"type":"string"},"amount":{"type":"number"},"status":{"type":"string"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","amount","status","createdAt"]},"DashboardResponseDto":{"type":"object","properties":{"stats":{"$ref":"#/components/schemas/DashboardStatsDto"},"last10Orders":{"type":"array","items":{"$ref":"#/components/schemas/DashboardOrderSummaryDto"}}},"required":["stats","last10Orders"]},"CreateCourierDto":{"type":"object","properties":{"name":{"type":"string","description":"Courier full name","example":"Ahmet Yılmaz"},"slug":{"type":"string","description":"Courier username (slug)","example":"ahmet-yilmaz"},"phone":{"type":"string","description":"Courier phone number (10 digits starting with 5, e.g. 5321234567)","example":"5321234567"},"email":{"type":"string","description":"Courier email","example":"ahmet@example.com"},"password":{"type":"string","description":"Courier password (min 6 characters)","example":"sifre123"},"address":{"type":"string","description":"Courier address","example":"İstanbul, Kadıköy"},"licensePlate":{"type":"string","description":"Courier vehicle license plate","example":"34 ABC 123"},"settingsOverride":{"type":"object","description":"Kuryeye özel ayar override (boş = firma geneli): perDeliveryFee, maxActiveTasks, breakMinutes, distanceTiers, dailyTargets, events"}},"required":["name","phone"]},"CourierResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Courier ID"},"courierCompanyId":{"type":"string","description":"Company ID"},"slug":{"type":"string","description":"Courier username (slug)"},"name":{"type":"string","description":"Courier name"},"phone":{"type":"string","description":"Courier phone"},"email":{"type":"string","description":"Courier email"},"address":{"type":"string","description":"Courier address"},"licensePlate":{"type":"string","description":"Courier vehicle license plate"},"isActive":{"type":"boolean","description":"Is courier active"},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp"},"activeTaskCount":{"type":"number","description":"Number of assigned tasks"},"deliveredCount":{"type":"number","description":"Number of delivered tasks"},"settingsOverride":{"type":"object","description":"Kuryeye özel ayar override (null = firma geneli)"}},"required":["id","courierCompanyId","name","phone","isActive","createdAt","updatedAt"]},"CouriersListResponseDto":{"type":"object","properties":{"couriers":{"description":"List of couriers","type":"array","items":{"$ref":"#/components/schemas/CourierResponseDto"}},"total":{"type":"number","description":"Total count of couriers matching filters"},"page":{"type":"number","description":"Current page number"},"limit":{"type":"number","description":"Number of items per page"}},"required":["couriers","total","page","limit"]},"UpdateCourierDto":{"type":"object","properties":{"name":{"type":"string","description":"Courier full name","example":"Ahmet Yılmaz"},"slug":{"type":"string","description":"Courier username (slug)","example":"ahmet-yilmaz"},"phone":{"type":"string","description":"Courier phone number (10 digits starting with 5, e.g. 5321234567)","example":"5321234567"},"email":{"type":"string","description":"Courier email","example":"ahmet@example.com"},"password":{"type":"string","description":"Courier password (min 6 characters)","example":"yenisifre123"},"address":{"type":"string","description":"Courier address","example":"İstanbul, Kadıköy"},"licensePlate":{"type":"string","description":"Courier vehicle license plate","example":"34 ABC 123"},"isActive":{"type":"boolean","description":"Whether the courier is active","example":false},"settingsOverride":{"type":"object","description":"Kuryeye özel ayar override (boş = firma geneli)"}}},"AvailabilityDto":{"type":"object","properties":{"isAvailable":{"type":"boolean","description":"Kurye müsait mi (çevrimiçi)"}},"required":["isAvailable"]},"PushTokenDto":{"type":"object","properties":{"token":{"type":"string","description":"Mobil push cihaz token (Expo/FCM)"}},"required":["token"]},"ChangePasswordDto":{"type":"object","properties":{"currentPassword":{"type":"string","description":"Mevcut şifre"},"newPassword":{"type":"string","description":"Yeni şifre (en az 6 karakter)"}},"required":["currentPassword","newPassword"]},"DeliveryTaskSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Task ID"},"orderId":{"type":"string","description":"Order ID"},"address":{"type":"string","description":"Order address"},"status":{"type":"string","description":"Current task status","enum":["PENDING","ASSIGNED","PICKED_UP","IN_TRANSIT","DELIVERED","CANCELLED","FAILED"]},"courierId":{"type":"string","description":"Assigned courier ID"},"courierName":{"type":"string","description":"Courier name"},"courierPhone":{"type":"string","description":"Courier phone"},"createdAt":{"format":"date-time","type":"string","description":"Task creation date"},"updatedAt":{"format":"date-time","type":"string","description":"Last update date"}},"required":["id","orderId","address","status","createdAt","updatedAt"]},"TasksListResponseDto":{"type":"object","properties":{"tasks":{"description":"List of delivery tasks","type":"array","items":{"$ref":"#/components/schemas/DeliveryTaskSummaryDto"}},"total":{"type":"number","description":"Total count of tasks matching filters"},"page":{"type":"number","description":"Current page number"},"limit":{"type":"number","description":"Number of items per page"}},"required":["tasks","total","page","limit"]},"OrderItemDto":{"type":"object","properties":{"id":{"type":"string","description":"Item ID"},"name":{"type":"string","description":"Ürün adı (snapshot)"},"qty":{"type":"number","description":"Adet"},"price":{"type":"number","description":"Birim fiyat (TL)"},"lineTotal":{"type":"number","description":"Satır toplamı (TL)"},"note":{"type":"string","description":"Kalem notu / özelleştirme"},"imageUrl":{"type":"string","description":"Ürün görsel yolu"}},"required":["id","name","qty","price","lineTotal"]},"RestaurantSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Restaurant ID"},"name":{"type":"string","description":"Restaurant name"},"address":{"type":"string","description":"Restaurant address (pickup)"},"latitude":{"type":"number","description":"Restaurant latitude"},"longitude":{"type":"number","description":"Restaurant longitude"}},"required":["id","name"]},"OrderSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Order ID"},"amount":{"type":"number","description":"Order amount"},"address":{"type":"string","description":"Delivery address"},"source":{"type":"string","description":"Order source"},"status":{"type":"string","description":"Order status"},"createdAt":{"format":"date-time","type":"string","description":"Order creation date"},"customerName":{"type":"string","description":"Customer name"},"customerPhone":{"type":"string","description":"Customer phone"},"note":{"type":"string","description":"Order note"},"distanceKm":{"type":"number","description":"Restoran→teslimat yol mesafesi (km)"},"courierKmExtra":{"type":"number","description":"Bu siparişten kuryenin km ek ücreti (TL)"},"eventBonus":{"type":"number","description":"Bu siparişten etkinlik bonusu (TL)"},"items":{"description":"Order line items","type":"array","items":{"$ref":"#/components/schemas/OrderItemDto"}},"restaurant":{"description":"Pickup restaurant","allOf":[{"$ref":"#/components/schemas/RestaurantSummaryDto"}]}},"required":["id","amount","address","source","status","createdAt"]},"CourierSummaryDto":{"type":"object","properties":{"id":{"type":"string","description":"Courier ID"},"name":{"type":"string","description":"Courier name"},"phone":{"type":"string","description":"Courier phone"},"isActive":{"type":"boolean","description":"Is courier active"}},"required":["id","name","phone","isActive"]},"TaskStatusHistoryDto":{"type":"object","properties":{"id":{"type":"string","description":"History entry ID"},"status":{"type":"string","description":"Status at this point"},"changedAt":{"format":"date-time","type":"string","description":"When the status changed"},"changedBy":{"type":"string","description":"User/courier ID who made the change"},"notes":{"type":"string","description":"Optional notes"}},"required":["id","status","changedAt","notes"]},"DeliveryTaskResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Task ID"},"courierCompanyId":{"type":"string","description":"Company ID"},"orderId":{"type":"string","description":"Order ID"},"courierId":{"type":"string","description":"Assigned courier ID"},"status":{"type":"string","description":"Current task status","enum":["PENDING","ASSIGNED","PICKED_UP","IN_TRANSIT","DELIVERED","CANCELLED","FAILED"]},"assignedAt":{"format":"date-time","type":"string","description":"When courier was assigned"},"pickedUpAt":{"format":"date-time","type":"string","description":"When package was picked up"},"deliveredAt":{"format":"date-time","type":"string","description":"When delivered"},"cancelledAt":{"format":"date-time","type":"string","description":"When cancelled"},"failureReason":{"type":"string","description":"Failure reason if failed"},"notes":{"type":"string","description":"Additional notes"},"createdAt":{"format":"date-time","type":"string","description":"Task creation date"},"updatedAt":{"format":"date-time","type":"string","description":"Last update date"},"order":{"description":"Associated order","allOf":[{"$ref":"#/components/schemas/OrderSummaryDto"}]},"courier":{"description":"Assigned courier","allOf":[{"$ref":"#/components/schemas/CourierSummaryDto"}]},"statusHistory":{"description":"Status history","type":"array","items":{"$ref":"#/components/schemas/TaskStatusHistoryDto"}}},"required":["id","courierCompanyId","orderId","status","createdAt","updatedAt"]},"AssignCourierDto":{"type":"object","properties":{"courierId":{"type":"string","description":"ID of the courier to assign","example":"cmm3abc123"}},"required":["courierId"]},"RevenueSummaryDto":{"type":"object","properties":{"totalRevenueTRY":{"type":"number","description":"Toplam gelir (TL)"},"totalCreditsSold":{"type":"number","description":"Toplam satılan kredi miktarı"},"totalTransactions":{"type":"number","description":"Toplam işlem sayısı"},"thisMonthRevenueTRY":{"type":"number","description":"Bu ay gelir (TL)"},"thisMonthCreditsSold":{"type":"number","description":"Bu ay satılan kredi"},"thisMonthTransactions":{"type":"number","description":"Bu ay işlem sayısı"},"todayRevenueTRY":{"type":"number","description":"Bugün gelir (TL)"},"todayCreditsSold":{"type":"number","description":"Bugün satılan kredi"},"todayTransactions":{"type":"number","description":"Bugün işlem sayısı"},"totalRefundedTRY":{"type":"number","description":"İade edilen toplam tutar (TL)"},"totalRefundedCredits":{"type":"number","description":"İade edilen toplam kredi"}},"required":["totalRevenueTRY","totalCreditsSold","totalTransactions","thisMonthRevenueTRY","thisMonthCreditsSold","thisMonthTransactions","todayRevenueTRY","todayCreditsSold","todayTransactions","totalRefundedTRY","totalRefundedCredits"]},"RevenueTransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"İşlem ID"},"companyId":{"type":"string","description":"Şirket ID"},"companyName":{"type":"string","description":"Şirket adı"},"companySlug":{"type":"string","description":"Şirket slug"},"type":{"type":"string","description":"İşlem tipi","enum":["DEMO","TOPUP","DEBIT","REFUND","ADJUSTMENT"]},"amount":{"type":"number","description":"Kredi miktarı"},"amountTRY":{"type":"number","description":"TL tutarı (sadece TOPUP işlemleri için)"},"unitPriceTRY":{"type":"number","description":"Birim fiyat (TL)"},"description":{"type":"string","description":"İşlem açıklaması"},"createdAt":{"format":"date-time","type":"string","description":"İşlem tarihi"}},"required":["id","companyId","companyName","companySlug","type","amount","amountTRY","unitPriceTRY","description","createdAt"]},"RevenueReportsResponseDto":{"type":"object","properties":{"summary":{"description":"Gelir özeti","allOf":[{"$ref":"#/components/schemas/RevenueSummaryDto"}]},"transactions":{"description":"İşlem listesi","type":"array","items":{"$ref":"#/components/schemas/RevenueTransactionDto"}},"total":{"type":"number","description":"Toplam kayıt sayısı"}},"required":["summary","transactions","total"]},"CompanyAdminDto":{"type":"object","properties":{"name":{"type":"string","description":"Admin kullanıcı adı"},"email":{"type":"string","description":"Admin e-posta adresi"}},"required":["name","email"]},"CompanyListItemDto":{"type":"object","properties":{"id":{"type":"string","description":"Şirket ID"},"slug":{"type":"string","description":"Şirket slug"},"name":{"type":"string","description":"Şirket adı"},"accountType":{"type":"string","description":"Hesap tipi","enum":["PLATFORM","DEMO","NORMAL"]},"status":{"type":"string","description":"Şirket durumu","enum":["ACTIVE","SUSPENDED","CANCELLED"]},"isDemoActive":{"type":"boolean","description":"Demo aktif mi?"},"demoEndsAt":{"format":"date-time","type":"string","description":"Demo bitiş tarihi"},"unlimitedAccess":{"type":"boolean","description":"Süresiz/sınırsız erişim (kredi düşmez)"},"creditBalance":{"type":"number","description":"Kredi bakiyesi"},"totalOrders":{"type":"number","description":"Toplam sipariş sayısı"},"activeTasks":{"type":"number","description":"Aktif görev sayısı (teslim edilmemiş/iptal edilmemiş)"},"createdAt":{"format":"date-time","type":"string","description":"Şirket oluşturulma tarihi"},"admin":{"description":"Admin bilgileri","allOf":[{"$ref":"#/components/schemas/CompanyAdminDto"}]},"companyCategory":{"type":"string","description":"Şirket kategorisi: DELIVERY veya POS"}},"required":["id","slug","name","accountType","status","isDemoActive","creditBalance","totalOrders","activeTasks","createdAt"]},"CompaniesListResponseDto":{"type":"object","properties":{"companies":{"description":"Şirket listesi","type":"array","items":{"$ref":"#/components/schemas/CompanyListItemDto"}},"total":{"type":"number","description":"Toplam sayı"}},"required":["companies","total"]},"CreateCompanyDto":{"type":"object","properties":{"name":{"type":"string","description":"Şirket adı","example":"Acme Kurye Hizmetleri"},"slug":{"type":"string","description":"Şirket slug (benzersiz URL-friendly identifier)","example":"acme-courier"},"adminEmail":{"type":"string","description":"Admin e-posta adresi","example":"admin@acme.com"},"adminPassword":{"type":"string","description":"Admin şifresi","example":"Admin123!","minLength":8},"adminName":{"type":"string","description":"Admin adı","example":"Ahmet Yılmaz"},"accountType":{"type":"string","description":"Hesap tipi","enum":["PLATFORM","DEMO","NORMAL"],"example":"NORMAL","default":"NORMAL"},"initialCredits":{"type":"number","description":"Başlangıç kredi bakiyesi (sadece NORMAL hesaplar için)","example":100},"companyCategory":{"type":"string","description":"Şirket kategorisi (POS / DELIVERY)","default":"DELIVERY"},"phone":{"type":"string","description":"İşletme telefonu (POS için)"},"address":{"type":"string","description":"İşletme adresi (POS için)"}},"required":["name","slug","adminEmail","adminPassword","adminName","accountType"]},"CreditTransactionDto":{"type":"object","properties":{"id":{"type":"string","description":"İşlem ID"},"type":{"type":"string","description":"İşlem tipi","enum":["DEMO","TOPUP","DEBIT","REFUND","ADJUSTMENT"]},"amount":{"type":"number","description":"İşlem tutarı"},"description":{"type":"string","description":"İşlem açıklaması"},"balanceBefore":{"type":"number","description":"Bakiye öncesi"},"balanceAfter":{"type":"number","description":"Bakiye sonrası"},"createdAt":{"format":"date-time","type":"string","description":"İşlem oluşturulma tarihi"}},"required":["id","type","amount","description","balanceBefore","balanceAfter","createdAt"]},"OrderDto":{"type":"object","properties":{"id":{"type":"string","description":"Sipariş ID"},"amount":{"type":"number","description":"Sipariş tutarı"},"address":{"type":"string","description":"Teslimat adresi"},"source":{"type":"string","description":"Sipariş kaynağı","enum":["MANUAL","POS","MARKETPLACE","API","GETIR","TRENDYOL_YEMEK","YEMEKSEPETI","MIGROS_YEMEK"]},"status":{"type":"string","description":"Sipariş durumu","enum":["CREATED","PREPARING","READY","ASSIGNED","PICKED_UP","IN_TRANSIT","DELIVERED","CANCELLED","FAILED"]},"createdAt":{"format":"date-time","type":"string","description":"Sipariş oluşturulma tarihi"}},"required":["id","amount","address","source","status","createdAt"]},"DeliveryTaskDto":{"type":"object","properties":{"id":{"type":"string","description":"Görev ID"},"orderId":{"type":"string","description":"Sipariş ID"},"courierId":{"type":"string","description":"Kurye ID"},"status":{"type":"string","description":"Görev durumu","enum":["PENDING","ASSIGNED","PICKED_UP","IN_TRANSIT","DELIVERED","CANCELLED","FAILED"]},"createdAt":{"format":"date-time","type":"string","description":"Görev oluşturulma tarihi"}},"required":["id","orderId","courierId","status","createdAt"]},"CompanyDetailDto":{"type":"object","properties":{"id":{"type":"string","description":"Şirket ID"},"slug":{"type":"string","description":"Şirket slug"},"name":{"type":"string","description":"Şirket adı"},"accountType":{"type":"string","description":"Hesap tipi","enum":["PLATFORM","DEMO","NORMAL"]},"status":{"type":"string","description":"Şirket durumu","enum":["ACTIVE","SUSPENDED","CANCELLED"]},"isDemoActive":{"type":"boolean","description":"Demo aktif mi?"},"demoEndsAt":{"format":"date-time","type":"string","description":"Demo bitiş tarihi"},"unlimitedAccess":{"type":"boolean","description":"Süresiz/sınırsız erişim (kredi düşmez)"},"creditBalance":{"type":"number","description":"Kredi bakiyesi"},"businessName":{"type":"string","description":"İşletme (ana şube) adı"},"address":{"type":"string","description":"İşletme adresi"},"phone":{"type":"string","description":"İşletme telefonu"},"contactName":{"type":"string","description":"Yetkili kişi"},"city":{"type":"string","description":"Şehir"},"users":{"description":"Şirket kullanıcıları","type":"array","items":{"type":"string"}},"businessEmail":{"type":"string","description":"İşletme e-postası"},"createdAt":{"format":"date-time","type":"string","description":"Şirket oluşturulma tarihi"},"updatedAt":{"format":"date-time","type":"string","description":"Şirket son güncelleme tarihi"},"creditTransactions":{"description":"Son 20 kredi işlemi","type":"array","items":{"$ref":"#/components/schemas/CreditTransactionDto"}},"orders":{"description":"Son 20 sipariş","type":"array","items":{"$ref":"#/components/schemas/OrderDto"}},"deliveryTasks":{"description":"Son 20 teslimat görevi","type":"array","items":{"$ref":"#/components/schemas/DeliveryTaskDto"}}},"required":["id","slug","name","accountType","status","isDemoActive","unlimitedAccess","creditBalance","users","createdAt","updatedAt","creditTransactions","orders","deliveryTasks"]},"UpdateCompanyStatusDto":{"type":"object","properties":{"status":{"type":"string","description":"New company status","enum":["ACTIVE","SUSPENDED","CANCELLED"],"example":"SUSPENDED"}},"required":["status"]},"UpdateCompanyDto":{"type":"object","properties":{"name":{"type":"string","description":"Şirket adı","example":"Kurye Hız Teslimat"},"address":{"type":"string","description":"İşletme adresi"},"phone":{"type":"string","description":"İşletme telefonu"},"slug":{"type":"string","description":"Şirket slug (URL uyumlu tanımlayıcı)","example":"kurye-hiz-teslimat"},"adminName":{"type":"string","description":"Admin kullanıcısının yeni adı","example":"Ahmet Yılmaz"},"adminEmail":{"type":"string","description":"Admin kullanıcısının yeni e-posta adresi","example":"ahmet@example.com"},"unlimitedAccess":{"type":"boolean","description":"Süresiz/sınırsız erişim (kredi düşmez, abonelik gerekmez)","example":false}}},"UpdateCompanyResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Şirket ID"},"slug":{"type":"string","description":"Şirket slug"},"name":{"type":"string","description":"Şirket adı"},"accountType":{"type":"string","description":"Hesap tipi","enum":["PLATFORM","DEMO","NORMAL"]},"status":{"type":"string","description":"Şirket durumu","enum":["ACTIVE","SUSPENDED","CANCELLED"]},"isDemoActive":{"type":"boolean","description":"Demo aktif mi?"},"demoEndsAt":{"format":"date-time","type":"string","description":"Demo bitiş tarihi"},"unlimitedAccess":{"type":"boolean","description":"Süresiz/sınırsız erişim (kredi düşmez)"},"creditBalance":{"type":"number","description":"Kredi bakiyesi"},"totalOrders":{"type":"number","description":"Toplam sipariş sayısı"},"activeTasks":{"type":"number","description":"Aktif görev sayısı"},"createdAt":{"format":"date-time","type":"string","description":"Şirket oluşturulma tarihi"},"admin":{"description":"Admin bilgileri","allOf":[{"$ref":"#/components/schemas/CompanyAdminDto"}]}},"required":["id","slug","name","accountType","status","isDemoActive","creditBalance","totalOrders","activeTasks","createdAt"]},"DeleteCompanyResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Şirket ID"},"status":{"type":"string","description":"Şirket durumu","enum":["ACTIVE","SUSPENDED","CANCELLED"]}},"required":["id","status"]},"ResetPasswordResponseDto":{"type":"object","properties":{"email":{"type":"string","description":"Şirket admin e-posta"},"tempPassword":{"type":"string","description":"Geçici şifre (sadece bir kez gösterilir)"}},"required":["email","tempPassword"]},"CreditAdjustDto":{"type":"object","properties":{"amount":{"type":"number","description":"Amount to adjust (positive to add, negative to subtract)","example":1000},"reason":{"type":"string","description":"Reason for the adjustment","example":"Promotional credit added"}},"required":["amount"]},"CreditAdjustResponseDto":{"type":"object","properties":{"transactionId":{"type":"string","description":"İşlem ID"},"previousBalance":{"type":"number","description":"Önceki bakiye"},"newBalance":{"type":"number","description":"Yeni bakiye"},"amount":{"type":"number","description":"Düzenleme miktarı"},"walletId":{"type":"string","description":"Cüzdan ID"}},"required":["transactionId","previousBalance","newBalance","amount","walletId"]},"TopupTryDto":{"type":"object","properties":{"amountTRY":{"type":"number","description":"Yüklenecek TL tutarı","example":100},"note":{"type":"string","description":"İşlem notu","example":"Manuel kredi yükleme"}},"required":["amountTRY"]},"TopupTryResponseDto":{"type":"object","properties":{"transactionId":{"type":"string","description":"İşlem ID"},"previousBalance":{"type":"number","description":"Önceki bakiye"},"newBalance":{"type":"number","description":"Yeni bakiye"},"creditsAdded":{"type":"number","description":"Eklenen kredi miktarı"},"amountTRY":{"type":"number","description":"Ödenen TL tutarı"},"unitPriceTRY":{"type":"number","description":"Kredi birim fiyatı (TL)"},"walletId":{"type":"string","description":"Cüzdan ID"}},"required":["transactionId","previousBalance","newBalance","creditsAdded","amountTRY","unitPriceTRY","walletId"]},"DemoActionResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Şirket ID"},"accountType":{"type":"string","description":"Hesap tipi","enum":["PLATFORM","DEMO","NORMAL"]},"demoStartedAt":{"format":"date-time","type":"string","description":"Demo başlangıç tarihi"},"demoEndsAt":{"format":"date-time","type":"string","description":"Demo bitiş tarihi"}},"required":["id","accountType","demoStartedAt","demoEndsAt"]},"SubscriptionPlanDto":{"type":"object","properties":{"id":{"type":"string","description":"Plan ID"},"key":{"type":"string","description":"Plan anahtarı (STARTER, PROFESSIONAL, ENTERPRISE)"},"name":{"type":"string","description":"Plan adı"},"description":{"type":"string","description":"Plan açıklaması"},"credits":{"type":"number","description":"Aylık kredi limiti"},"priceTRY":{"type":"number","description":"Aylık fiyat (kuruş)"},"features":{"type":"object","description":"Özellikler JSON"},"isActive":{"type":"boolean","description":"Aktif mi?"},"sortOrder":{"type":"number","description":"Sıralama"},"posKind":{"type":"string","description":"POS ürün tipi: \"POS\" | \"QR\" (yalnız POS planları için)"},"intervalMonths":{"type":"number","description":"Faturalama dönemi (ay). 1=aylık, 12=yıllık","example":1}},"required":["id","key","name","credits","priceTRY","features","isActive","sortOrder","intervalMonths"]},"CompanySubscriptionDto":{"type":"object","properties":{"id":{"type":"string","description":"Abonelik ID"},"companyId":{"type":"string","description":"Şirket ID"},"plan":{"description":"Plan bilgileri","allOf":[{"$ref":"#/components/schemas/SubscriptionPlanDto"}]},"stripeSubscriptionId":{"type":"string","description":"Stripe Subscription ID"},"creditsUsed":{"type":"number","description":"Kullanılan kredi"},"creditsRemaining":{"type":"number","description":"Kalan kredi"},"currentPeriodStart":{"format":"date-time","type":"string","description":"Dönem başlangıç"},"currentPeriodEnd":{"format":"date-time","type":"string","description":"Dönem bitiş"},"nextBillingDate":{"format":"date-time","type":"string","description":"Sonraki fatura tarihi"},"status":{"type":"string","description":"Durum"},"autoRenew":{"type":"boolean","description":"Otomatik yenileme"},"renewalCount":{"type":"number","description":"Yenileme sayısı"},"cancelledAt":{"format":"date-time","type":"string","description":"İptal tarihi"},"graceUntil":{"format":"date-time","type":"string","description":"Yenileme ödeme süresi sonu (PAST_DUE)"},"activeCouponCode":{"type":"string","description":"Aktif süreli indirim kodu"},"couponCyclesRemaining":{"type":"number","description":"Süreli indirimde kalan yenileme döngüsü"},"couponDiscountType":{"type":"string","description":"Süreli indirim tipi (PERCENT/FIXED)"},"couponValue":{"type":"number","description":"Süreli indirim değeri (PERCENT: yüzde, FIXED: kuruş)"},"scheduledPlanKey":{"type":"string","description":"Dönem sonunda geçilecek plan anahtarı (downgrade)"}},"required":["id","companyId","plan","creditsUsed","creditsRemaining","currentPeriodStart","currentPeriodEnd","nextBillingDate","status","autoRenew","renewalCount"]},"SubscriptionStatsDto":{"type":"object","properties":{"totalCredits":{"type":"number","description":"Toplam kredi"},"creditsUsed":{"type":"number","description":"Kullanılan kredi"},"creditsRemaining":{"type":"number","description":"Kalan kredi"},"usagePercentage":{"type":"number","description":"Kullanım yüzdesi"},"currentPeriodEnd":{"format":"date-time","type":"string","description":"Dönem bitiş tarihi"},"daysRemaining":{"type":"number","description":"Gün kalan"}},"required":["totalCredits","creditsUsed","creditsRemaining","usagePercentage","currentPeriodEnd","daysRemaining"]},"CreateSubscriptionDto":{"type":"object","properties":{"planKey":{"type":"string","description":"Plan ID veya Key"},"couponCode":{"type":"string","description":"İndirim kuponu kodu (ilk faturaya uygulanır)"}},"required":["planKey"]},"StripeSubscriptionResponseDto":{"type":"object","properties":{"paymentId":{"type":"string","description":"Ödeme kaydıyla eşleşen PaymentIntent kimliği"},"clientSecret":{"type":"string","description":"Stripe Client Secret"},"subscriptionId":{"type":"string","description":"Abonelik ID"},"plan":{"description":"Plan bilgileri","allOf":[{"$ref":"#/components/schemas/SubscriptionPlanDto"}]}},"required":["clientSecret","subscriptionId","plan"]},"CustomOfferRequestDto":{"type":"object","properties":{"expectedVolume":{"type":"number","description":"Beklenen aylık teslimat sayısı"},"message":{"type":"string","description":"Mesaj / ihtiyaç açıklaması"}}},"CreateCustomOfferDto":{"type":"object","properties":{"companyId":{"type":"string","description":"Şirket ID"},"offerType":{"type":"string","description":"Teklif türü","enum":["RECURRING","ONE_TIME"]},"deliveries":{"type":"number","description":"Teslimat adedi (aylık kota veya tek seferlik paket)"},"priceTRY":{"type":"number","description":"Fiyat (TL)"},"validUntil":{"type":"string","description":"Geçerlilik tarihi (ISO 8601)"},"adminNote":{"type":"string","description":"Admin notu / açıklama"}},"required":["companyId","offerType","deliveries","priceTRY"]},"SendCustomOfferDto":{"type":"object","properties":{"offerType":{"type":"string","enum":["RECURRING","ONE_TIME"]},"deliveries":{"type":"number"},"priceTRY":{"type":"number"},"validUntil":{"type":"string"},"adminNote":{"type":"string"},"status":{"type":"string","description":"Durum (örn. CANCELLED)"}}},"UpdateSubscriptionDto":{"type":"object","properties":{"autoRenew":{"type":"boolean","description":"Otomatik yenileme"},"planKey":{"type":"string","description":"Plan Key (yükseltme/indirme için)"}}},"ValidateCouponDto":{"type":"object","properties":{"code":{"type":"string","example":"HOSGELDIN20"},"planKey":{"type":"string","description":"Plan key","example":"PROFESSIONAL"},"companyId":{"type":"string","description":"Doğrulayan şirket ID (hedefleme kontrolü için)"}},"required":["code","planKey"]},"CreateCouponDto":{"type":"object","properties":{"code":{"type":"string","example":"HOSGELDIN20"},"discountType":{"type":"string","enum":["PERCENT","FIXED"]},"value":{"type":"number","description":"PERCENT: 1-100 · FIXED: TL","example":20},"maxRedemptions":{"type":"number","description":"Maksimum kullanım (boş = sınırsız)"},"validFrom":{"type":"string"},"validUntil":{"type":"string"},"active":{"type":"boolean","default":true},"targetCompanyId":{"type":"string","description":"Yalnızca bu şirket kullanabilir (boş = herkese açık)"},"allowedPlanKeys":{"description":"İzin verilen plan anahtarları (boş = tüm planlar)","example":["STARTER","PROFESSIONAL"],"type":"array","items":{"type":"string"}},"maxPerCompany":{"type":"number","description":"Şirket başına maksimum kullanım (boş = sınırsız)"},"durationMonths":{"type":"number","description":"Süre (ay/döngü): N>1 ise N dönem boyunca tekrarlayan indirim (boş/1 = tek seferlik)"}},"required":["code","discountType","value"]},"AssignCouponDto":{"type":"object","properties":{"companyId":{"type":"string","description":"Hedef şirket ID"},"discountType":{"type":"string","enum":["PERCENT","FIXED"]},"value":{"type":"number","description":"PERCENT: 1-100 · FIXED: TL","example":100},"durationMonths":{"type":"number","description":"Kaç dönem (ay) geçerli (boş = 1)"}},"required":["companyId","discountType","value"]},"UpdateCouponDto":{"type":"object","properties":{"discountType":{"type":"string"},"value":{"type":"number"},"maxRedemptions":{"type":"number"},"validFrom":{"type":"string"},"validUntil":{"type":"string"},"active":{"type":"boolean"},"targetCompanyId":{"type":"string"},"allowedPlanKeys":{"type":"array","items":{"type":"string"}},"maxPerCompany":{"type":"number"},"durationMonths":{"type":"number","description":"Süre (ay/döngü): N>1 ise N dönem tekrarlayan indirim"}}},"UpdateCompanySettingsDto":{"type":"object","properties":{}},"SendCampaignDto":{"type":"object","properties":{"subject":{"type":"string","description":"E-posta konusu"},"html":{"type":"string","description":"E-posta içeriği (HTML)"},"audience":{"type":"string","description":"Hedef kitle","enum":["companies","restaurants","all"],"example":"companies"},"companyIds":{"description":"Belirli firma ID’leri (boşsa tüm firmalar)","type":"array","items":{"type":"string"}}},"required":["subject","html","audience"]},"SendTestEmailDto":{"type":"object","properties":{"to":{"type":"string","description":"Test e-postasının gönderileceği adres"}},"required":["to"]},"CreateContentDto":{"type":"object","properties":{"site":{"type":"string","default":"KURYOLOEXPRESS","description":"Site kapsamı: KURYOLOEXPRESS | KURYOLOPOS"},"type":{"type":"string","enum":["PAGE","BLOG"],"description":"İçerik tipi (PAGE / BLOG)"},"slug":{"type":"string","description":"URL slug (tip içinde benzersiz)","example":"hakkimizda"},"title":{"type":"string","description":"Başlık"},"excerpt":{"type":"string","description":"Özet / kısa açıklama"},"body":{"type":"string","description":"Markdown gövde"},"coverImageUrl":{"type":"string","description":"Kapak görseli URL (blog)"},"metaTitle":{"type":"string","description":"SEO başlık override"},"metaDescription":{"type":"string","description":"SEO açıklama override"},"keywords":{"type":"string","description":"Virgülle ayrılmış anahtar kelimeler"},"published":{"type":"boolean","default":false,"description":"Yayında mı"}},"required":["type","slug","title","body"]},"UpdateContentDto":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"excerpt":{"type":"string"},"body":{"type":"string"},"coverImageUrl":{"type":"string"},"metaTitle":{"type":"string"},"metaDescription":{"type":"string"},"keywords":{"type":"string"},"published":{"type":"boolean"}}},"TimeSeriesPointDto":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"number"},"count":{"type":"number"}},"required":["label","value"]},"OverviewStatsDto":{"type":"object","properties":{"totalOrders":{"type":"number"},"deliveredOrders":{"type":"number"},"cancelledOrders":{"type":"number"},"pendingOrders":{"type":"number"},"totalRevenue":{"type":"number"},"avgOrderValue":{"type":"number"},"totalCommission":{"type":"number"},"activeCouriers":{"type":"number"},"avgDeliveryTime":{"type":"number"},"ordersOverTime":{"type":"array","items":{"$ref":"#/components/schemas/TimeSeriesPointDto"}},"revenueOverTime":{"type":"array","items":{"$ref":"#/components/schemas/TimeSeriesPointDto"}}},"required":["totalOrders","deliveredOrders","cancelledOrders","pendingOrders","totalRevenue","avgOrderValue","totalCommission","activeCouriers","avgDeliveryTime","ordersOverTime","revenueOverTime"]},"CourierReportDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"deliveredCount":{"type":"number"},"cancelledCount":{"type":"number"},"totalEarnings":{"type":"number","description":"Toplam kurye ödemesi (baz + km ek + bonus), TL"},"kmExtraEarnings":{"type":"number","description":"Km bazlı ek ücret (TL)"},"bonusEarnings":{"type":"number","description":"Bonus (etkinlik + günlük hedef), TL"},"avgDeliveryTime":{"type":"number"},"totalDistance":{"type":"number","description":"Toplam yol mesafesi (km)"},"dailyStats":{"type":"array","items":{"$ref":"#/components/schemas/TimeSeriesPointDto"}}},"required":["id","name","deliveredCount","cancelledCount","totalEarnings","kmExtraEarnings","bonusEarnings","avgDeliveryTime","totalDistance","dailyStats"]},"RestaurantReportDto":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"orderCount":{"type":"number"},"totalRevenue":{"type":"number"},"avgOrderValue":{"type":"number"},"totalCommission":{"type":"number"},"commissionRate":{"type":"number"},"totalSurcharge":{"type":"number","description":"Km bazlı teslimat ek ücreti toplamı (TL)"},"totalDistance":{"type":"number","description":"Toplam yol mesafesi (km)"},"totalDue":{"type":"number","description":"Restoranın firmaya toplam borcu: komisyon + km ek ücret (TL)"},"dailyStats":{"type":"array","items":{"$ref":"#/components/schemas/TimeSeriesPointDto"}}},"required":["id","name","orderCount","totalRevenue","avgOrderValue","totalCommission","commissionRate","totalSurcharge","totalDistance","totalDue","dailyStats"]},"ReportsResponseDto":{"type":"object","properties":{"overview":{"$ref":"#/components/schemas/OverviewStatsDto"},"couriers":{"type":"array","items":{"$ref":"#/components/schemas/CourierReportDto"}},"restaurants":{"type":"array","items":{"$ref":"#/components/schemas/RestaurantReportDto"}},"period":{"type":"string"},"startDate":{"type":"string"},"endDate":{"type":"string"}},"required":["period","startDate","endDate"]},"RestaurantLoginDto":{"type":"object","properties":{"email":{"type":"string","example":"restaurant@demo.com"},"password":{"type":"string","example":"password123"}},"required":["email","password"]},"RestaurantAuthResponseDto":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"user":{"type":"object"},"restaurant":{"type":"object"}},"required":["accessToken","refreshToken","user","restaurant"]},"RestaurantRefreshDto":{"type":"object","properties":{"refreshToken":{"type":"string"}},"required":["refreshToken"]},"RestaurantDashboardStatsDto":{"type":"object","properties":{"todayOrderCount":{"type":"number"},"preparingCount":{"type":"number"},"readyCount":{"type":"number"},"todayRevenue":{"type":"number"},"todayGrossRevenue":{"type":"number"},"todayGuestCount":{"type":"number"},"todayExpenses":{"type":"number"},"avgOrderValue":{"type":"number"},"activeCouriers":{"type":"number"},"tableStats":{"type":"object"},"todayOrderTypeBreakdown":{"type":"array","items":{"type":"string"}}},"required":["todayOrderCount","preparingCount","readyCount","todayRevenue"]},"RestaurantCreateOrderDto":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"}},"customerName":{"type":"string"},"customerPhone":{"type":"string"},"address":{"type":"string"},"notes":{"type":"string"},"amount":{"type":"number"}},"required":["items","customerName","customerPhone","address","amount"]},"MenuCategoryResponseDto":{"type":"object","properties":{}},"CreateMenuCategoryDto":{"type":"object","properties":{"name":{"type":"string","description":"Kategori adı","example":"Ana Yemekler"},"parentId":{"type":"string","description":"Üst kategori ID (alt kategori için)","example":null},"sortOrder":{"type":"number","description":"Sıralama","default":0},"isActive":{"type":"boolean","description":"Aktif mi","default":true},"defaultCourse":{"type":"number","description":"Varsayılan MARŞ (1..4) — bu kategorinin ürünleri kaçıncı sırada pişsin. Çorba/meze 1, ana yemek 2, tatlı 3. Garson sipariş sırasında değiştirebilir.","default":1},"vatRate":{"type":"number","description":"Kategorinin varsayılan KDV oranı (%). Yeni ürün bu oranla açılır; ürün bazında değiştirilebilir. Yiyecek-içecek hizmeti %10, alkol %20.","default":10}},"required":["name"]},"UpdateMenuCategoryDto":{"type":"object","properties":{"name":{"type":"string","description":"Kategori adı"},"parentId":{"type":"string","description":"Üst kategori ID"},"sortOrder":{"type":"number","description":"Sıralama"},"isActive":{"type":"boolean","description":"Aktif mi"},"defaultCourse":{"type":"number","description":"Varsayılan MARŞ (1..4) — bu kategorinin ürünleri kaçıncı sırada pişsin. Çorba/meze 1, ana yemek 2, tatlı 3. Garson sipariş sırasında değiştirebilir.","default":1},"vatRate":{"type":"number","description":"Kategorinin varsayılan KDV oranı (%). Yeni ürün bu oranla açılır; ürün bazında değiştirilebilir. Yiyecek-içecek hizmeti %10, alkol %20.","default":10}}},"MenuItemResponseDto":{"type":"object","properties":{}},"CreateMenuItemDto":{"type":"object","properties":{"name":{"type":"string","description":"Ürün adı","example":"Adana Kebap"},"description":{"type":"string","description":"Ürün açıklaması"},"price":{"type":"number","description":"Fiyat (TL)","example":89.9},"categoryId":{"type":"string","description":"Kategori ID","example":"cmmb..."},"sortOrder":{"type":"number","description":"Sıralama","default":0},"isActive":{"type":"boolean","description":"Aktif mi","default":true},"isAvailable":{"type":"boolean","description":"Stokta var mı","default":true},"color":{"type":"string","description":"Hex renk kodu","example":"#8b5cf6"},"isFavorite":{"type":"boolean","description":"Favori ürün","default":false},"isPublished":{"type":"boolean","description":"Yayınlandı mı","default":false},"isHiddenOnPos":{"type":"boolean","description":"POS'ta gizli","default":false},"tablePrice":{"type":"number","description":"Masa fiyatı (TL)"},"takeawayPrice":{"type":"number","description":"Gel-al fiyatı (TL)"},"deliveryPrice":{"type":"number","description":"Paket/teslimat fiyatı (TL)"},"itemCode":{"type":"string","description":"Ürün kodu / PLU"},"kitchenGroupId":{"type":"string","description":"Mutfak yazıcı grubu ID"},"vatRate":{"type":"number","description":"KDV oranı (%)","default":0,"enum":[0,10,20]},"isVatExclusive":{"type":"boolean","description":"KDV hariç fiyatlandır","default":false},"costPrice":{"type":"number","description":"Maliyet tutarı (TL)"},"trackStock":{"type":"boolean","description":"Stok takibi","default":false},"stockCount":{"type":"number","description":"Stok adedi","default":0},"autoAskModifiers":{"type":"boolean","description":"Özellik otomatik sorulsun","default":false},"autoAskPortions":{"type":"boolean","description":"Porsiyon otomatik sorulsun","default":false}},"required":["name","price","categoryId"]},"UpdateMenuItemDto":{"type":"object","properties":{"name":{"type":"string","description":"Ürün adı"},"description":{"type":"string","description":"Ürün açıklaması"},"price":{"type":"number","description":"Fiyat (TL)"},"categoryId":{"type":"string","description":"Kategori ID"},"sortOrder":{"type":"number","description":"Sıralama"},"isActive":{"type":"boolean","description":"Aktif mi"},"isAvailable":{"type":"boolean","description":"Stokta var mı"},"color":{"type":"string","description":"Hex renk kodu"},"isFavorite":{"type":"boolean","description":"Favori ürün"},"isPublished":{"type":"boolean","description":"Yayınlandı mı"},"isHiddenOnPos":{"type":"boolean","description":"POS'ta gizli"},"tablePrice":{"type":"number","description":"Masa fiyatı (TL)"},"takeawayPrice":{"type":"number","description":"Gel-al fiyatı (TL)"},"deliveryPrice":{"type":"number","description":"Paket/teslimat fiyatı (TL)"},"itemCode":{"type":"string","description":"Ürün kodu / PLU"},"kitchenGroupId":{"type":"string","description":"Mutfak yazıcı grubu ID"},"vatRate":{"type":"number","description":"KDV oranı (%)"},"isVatExclusive":{"type":"boolean","description":"KDV hariç fiyatlandır"},"costPrice":{"type":"number","description":"Maliyet tutarı (TL)"},"trackStock":{"type":"boolean","description":"Stok takibi"},"stockCount":{"type":"number","description":"Stok adedi"},"autoAskModifiers":{"type":"boolean","description":"Özellik otomatik sorulsun"},"autoAskPortions":{"type":"boolean","description":"Porsiyon otomatik sorulsun"}}},"CreateMenuItemPortionDto":{"type":"object","properties":{"name":{"type":"string","description":"Porsiyon adı","example":"Küçük"},"price":{"type":"number","description":"Fiyat (TL)","example":25},"sortOrder":{"type":"number","description":"Sıralama","default":0},"isDefault":{"type":"boolean","description":"Varsayılan porsiyon","default":false}},"required":["name","price"]},"UpdateMenuItemPortionDto":{"type":"object","properties":{"name":{"type":"string","description":"Porsiyon adı"},"price":{"type":"number","description":"Fiyat (TL)"},"sortOrder":{"type":"number","description":"Sıralama"},"isDefault":{"type":"boolean","description":"Varsayılan porsiyon"},"isActive":{"type":"boolean","description":"Aktif mi"}}},"KitchenGroupResponseDto":{"type":"object","properties":{}},"CreateKitchenGroupDto":{"type":"object","properties":{"name":{"type":"string","description":"Grup adı","example":"Mutfak"},"printerIp":{"type":"string","description":"Yazıcı IP adresi","example":"192.168.1.100"},"isDefault":{"type":"boolean","description":"Varsayılan grup","default":false},"sortOrder":{"type":"number","description":"Sıralama","default":0}},"required":["name"]},"UpdateKitchenGroupDto":{"type":"object","properties":{"name":{"type":"string","description":"Grup adı"},"printerIp":{"type":"string","description":"Yazıcı IP adresi"},"isDefault":{"type":"boolean","description":"Varsayılan grup"},"sortOrder":{"type":"number","description":"Sıralama"}}},"MenuListResponseDto":{"type":"object","properties":{}},"CustomerResponseDto":{"type":"object","properties":{}},"CustomerDetailResponseDto":{"type":"object","properties":{}},"CreateCustomerDto":{"type":"object","properties":{"phone":{"type":"string","description":"Müşteri telefonu","example":"05321234567"},"name":{"type":"string","description":"Müşteri adı","example":"Ahmet Yılmaz"},"address":{"type":"string","description":"Müşteri adresi","example":"Bağdat Caddesi No: 123"},"notes":{"type":"string","description":"Müşteri notları","example":"Kapı zili çalışmıyor"}},"required":["phone"]},"UpdateCustomerDto":{"type":"object","properties":{"phone":{"type":"string","description":"Müşteri telefonu"},"name":{"type":"string","description":"Müşteri adı"},"address":{"type":"string","description":"Müşteri adresi"},"notes":{"type":"string","description":"Müşteri notları"}}},"TopProductDto":{"type":"object","properties":{}},"PosDashboardStatsDto":{"type":"object","properties":{"todayOrderCount":{"type":"number","description":"Bugünkü sipariş adedi"},"preparingCount":{"type":"number","description":"Hazırlanan sipariş adedi"},"readyCount":{"type":"number","description":"Teslime hazır sipariş adedi"},"todayRevenue":{"type":"number","description":"Bugünkü ciro (TL)"}},"required":["todayOrderCount","preparingCount","readyCount","todayRevenue"]},"PosCustomerDto":{"type":"object","properties":{"phone":{"type":"string","description":"Müşteri telefonu (05XXXXXXXXX) — teslimat/paket için zorunlu, masa siparişinde opsiyonel","example":"05321234567"},"name":{"type":"string","description":"Müşteri adı soyadı","example":"Ahmet Yılmaz"},"address":{"type":"string","description":"Müşteri teslimat adresi — yalnızca DELIVERY için zorunlu","example":"Bağdat Caddesi No: 123"},"notes":{"type":"string","description":"Müşteri notları","example":"Kapı zili çalışmıyor"}}},"PosOrderItemDto":{"type":"object","properties":{"menuItemId":{"type":"string","description":"Menü ürün ID","example":"cmmb..."},"qty":{"type":"number","description":"Adet","example":2},"note":{"type":"string","description":"Kalem notu / özelleştirme","example":"soğansız"},"modifiers":{"description":"Seçilen modifier'lar","type":"array","items":{"type":"string"}},"course":{"type":"number","description":"Marş — kalemin kaçıncı sırada pişeceği (1..4). Verilmezse kategorinin varsayılanı.","example":2}},"required":["menuItemId","qty"]},"CreatePosOrderDto":{"type":"object","properties":{"orderType":{"type":"string","description":"Sipariş türü","enum":["DELIVERY","DINE_IN","TAKEAWAY"],"default":"DELIVERY"},"tableId":{"type":"string","description":"Masa ID — yalnızca DINE_IN siparişlerinde zorunlu","example":"clxxx..."},"customer":{"description":"Müşteri bilgileri","allOf":[{"$ref":"#/components/schemas/PosCustomerDto"}]},"items":{"description":"Sipariş kalemleri","type":"array","items":{"$ref":"#/components/schemas/PosOrderItemDto"}},"paymentMethod":{"type":"string","description":"Ödeme yöntemi — DINE_IN açık hesap için opsiyonel, ödeme hesap kapatılırken alınır","enum":["CASH","CARD","ONLINE","HAVALE"]},"note":{"type":"string","description":"Sipariş notu"},"discountId":{"type":"string","description":"Uygulanacak indirim ID (restaurant_discounts)"},"manualDiscountType":{"type":"string","description":"Manuel indirim tipi","enum":["PERCENTAGE","FIXED_AMOUNT"]},"manualDiscountValue":{"type":"number","description":"Manuel indirim değeri (oran % veya tutar kuruş)"}},"required":["customer","items"]},"PosOrderResponseDto":{"type":"object","properties":{}},"PosOrderListResponseDto":{"type":"object","properties":{}},"AddItemsToOrderDto":{"type":"object","properties":{"items":{"description":"Eklenecek sipariş kalemleri","type":"array","items":{"$ref":"#/components/schemas/PosOrderItemDto"}}},"required":["items"]},"CheckoutOrderDto":{"type":"object","properties":{"paymentMethod":{"type":"string","description":"Ödeme yöntemi","enum":["CASH","CARD","ONLINE","HAVALE"]},"note":{"type":"string","description":"Hesap notu"},"discountId":{"type":"string","description":"Uygulanacak indirim ID (restaurant_discounts)"},"manualDiscountType":{"type":"string","description":"Manuel indirim tipi","enum":["PERCENTAGE","FIXED_AMOUNT"]},"manualDiscountValue":{"type":"number","description":"Manuel indirim değeri"}},"required":["paymentMethod"]},"CreatePosTableDto":{"type":"object","properties":{"name":{"type":"string","description":"Masa adı","example":"Masa 1"},"zoneId":{"type":"string","description":"Bölge ID","example":"cuid..."},"capacity":{"type":"number","description":"Kapasite (kişi)","example":4},"sortOrder":{"type":"number","description":"Sıralama","example":1}},"required":["name"]},"BulkCreateTablesDto":{"type":"object","properties":{"prefix":{"type":"string","description":"Masa adı öneki","example":"Masa"},"startNum":{"type":"number","description":"Başlangıç numarası","example":1},"endNum":{"type":"number","description":"Bitiş numarası","example":10},"capacity":{"type":"number","description":"Kapasite (kişi)","example":4},"zoneId":{"type":"string","description":"Bölge ID","example":"cuid..."}},"required":["prefix","startNum","endNum"]},"ReorderZonesDto":{"type":"object","properties":{"items":{"description":"Sıralama güncellemeleri","type":"array","items":{"type":"object"}}},"required":["items"]},"UpdatePosTableDto":{"type":"object","properties":{"name":{"type":"string","description":"Masa adı","example":"Masa 1"},"zoneId":{"type":"string","description":"Bölge ID","example":"cuid..."},"capacity":{"type":"number","description":"Kapasite (kişi)","example":4},"sortOrder":{"type":"number","description":"Sıralama","example":1},"isActive":{"type":"boolean","description":"Aktif mi","example":true}}},"UpdateTableStatusDto":{"type":"object","properties":{"status":{"type":"string","description":"Masa durumu","example":"FREE","enum":["FREE","OCCUPIED","RESERVED"]}},"required":["status"]},"CreateTableZoneDto":{"type":"object","properties":{"name":{"type":"string","description":"Bölge adı","example":"İç Salon"},"sortOrder":{"type":"number","description":"Sıralama","example":0}},"required":["name"]},"UpdateTableZoneDto":{"type":"object","properties":{"name":{"type":"string","description":"Bölge adı","example":"Teras"},"sortOrder":{"type":"number","description":"Sıralama","example":1},"isActive":{"type":"boolean","description":"Aktif mi","example":true}}},"CreateBranchDto":{"type":"object","properties":{"name":{"type":"string","example":"Kadıköy Şubesi"},"address":{"type":"string"},"phone":{"type":"string"},"cloneFromPrimary":{"type":"boolean","description":"Ana şubeden menü ve ayarları kopyala"}},"required":["name"]},"UpdateBranchDto":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string"},"phone":{"type":"string"},"isActive":{"type":"boolean"}}},"CreateTicketDto":{"type":"object","properties":{"category":{"type":"string","description":"Kategori","enum":["TECHNICAL","BILLING","DELIVERY","ACCOUNT","FEATURE_REQUEST","BUG_REPORT","OTHER"]},"priority":{"type":"string","description":"Öncelik","enum":["LOW","MEDIUM","HIGH","URGENT"]},"subject":{"type":"string","description":"Konu"},"description":{"type":"string","description":"Açıklama"},"customerName":{"type":"string","description":"Müşteri adı (ziyaretçi için)"},"customerEmail":{"type":"string","description":"Müşteri e-posta (ziyaretçi için)"},"customerPhone":{"type":"string","description":"Müşteri telefon (ziyaretçi için)"},"attachments":{"description":"Ekler","type":"array","items":{"type":"string"}}},"required":["category","priority","subject","description"]},"MessageResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Message ID"},"userId":{"type":"string","description":"Kullanıcı ID"},"userName":{"type":"string","description":"Kullanıcı adı"},"userRole":{"type":"string","description":"Kullanıcı rolü"},"message":{"type":"string","description":"Mesaj"},"isInternal":{"type":"boolean","description":"Internal not mu?"},"attachments":{"description":"Ekler","type":"array","items":{"type":"string"}},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"}},"required":["id","userId","userName","userRole","message","isInternal","createdAt"]},"TicketDetailResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Ticket ID"},"ticketNumber":{"type":"string","description":"Ticket Numarası"},"category":{"type":"string","description":"Kategori","enum":["TECHNICAL","BILLING","DELIVERY","ACCOUNT","FEATURE_REQUEST","BUG_REPORT","OTHER"]},"priority":{"type":"string","description":"Öncelik","enum":["LOW","MEDIUM","HIGH","URGENT"]},"status":{"type":"string","description":"Durum","enum":["OPEN","IN_PROGRESS","WAITING_CUSTOMER","WAITING_THIRD_PARTY","RESOLVED","CLOSED"]},"subject":{"type":"string","description":"Konu"},"description":{"type":"string","description":"Açıklama"},"customerName":{"type":"string","description":"Müşteri adı"},"customerEmail":{"type":"string","description":"Müşteri e-posta"},"customerPhone":{"type":"string","description":"Müşteri telefon"},"resolvedAt":{"format":"date-time","type":"string","description":"Çözüm tarihi"},"resolution":{"type":"string","description":"Çözüm"},"satisfactionRating":{"type":"number","description":"Memnuniyet puanı (1-5)"},"messageCount":{"type":"number","description":"Mesaj sayısı"},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"},"updatedAt":{"format":"date-time","type":"string","description":"Son güncelleme"},"messages":{"description":"Mesajlar","type":"array","items":{"$ref":"#/components/schemas/MessageResponseDto"}}},"required":["id","ticketNumber","category","priority","status","subject","description","messageCount","createdAt","updatedAt","messages"]},"UpdateTicketDto":{"type":"object","properties":{"status":{"type":"string","description":"Durum","enum":["OPEN","IN_PROGRESS","WAITING_CUSTOMER","WAITING_THIRD_PARTY","RESOLVED","CLOSED"]},"priority":{"type":"string","description":"Öncelik","enum":["LOW","MEDIUM","HIGH","URGENT"]},"resolution":{"type":"string","description":"Çözüm"}}},"CreateMessageDto":{"type":"object","properties":{"message":{"type":"string","description":"Mesaj"},"isInternal":{"type":"boolean","description":"Sadece adminler arasında görünen internal mesaj"},"attachments":{"description":"Ekler","type":"array","items":{"type":"string"}}},"required":["message"]},"SatisfactionRatingDto":{"type":"object","properties":{"rating":{"type":"number","description":"Puan (1-5)","minimum":1,"maximum":5}},"required":["rating"]},"SupportStatsDto":{"type":"object","properties":{"open":{"type":"number","description":"Açık ticketlar"},"inProgress":{"type":"number","description":"İşlemde olan ticketlar"},"waiting":{"type":"number","description":"Bekleyen ticketler"},"resolved":{"type":"number","description":"Çözülen ticketler"},"closed":{"type":"number","description":"Kapalı ticketlar"},"total":{"type":"number","description":"Toplam ticket"},"avgSatisfaction":{"type":"number","description":"Ortalama memnuniyet puanı"}},"required":["open","inProgress","waiting","resolved","closed","total","avgSatisfaction"]},"CreateStripePaymentDto":{"type":"object","properties":{"amountTRY":{"type":"number","description":"Ödenecek tutar (TL)","example":100},"credits":{"type":"number","description":"Kredi miktarı (opsiyonel)","example":100},"customOfferId":{"type":"string","description":"Özel teklif ID — kart ödemesi bu teklifi etkinleştirir"},"description":{"type":"string","description":"Açıklama"},"planKey":{"type":"string","description":"Ödeme tamamlanınca etkinleştirilecek plan. Abonelik yenileme/yükseltme ödemeleri bunu taşır."}},"required":["amountTRY"]},"StripePaymentResponseDto":{"type":"object","properties":{"clientSecret":{"type":"string","description":"Client Secret for Stripe Elements"},"paymentId":{"type":"string","description":"Payment ID"},"amount":{"type":"number","description":"Ödeme tutarı (kuruş)"},"currency":{"type":"string","description":"Para birimi"}},"required":["clientSecret","paymentId","amount","currency"]},"CreateBankTransferDto":{"type":"object","properties":{"senderName":{"type":"string","description":"Gönderen adı"},"senderIban":{"type":"string","description":"Gönderen IBAN (TR + 24 rakam)"},"bankName":{"type":"string","description":"Banka adı"},"amountTRY":{"type":"number","description":"Yatırılan tutar (TL). Abonelik havalesinde plandan alınır."},"referenceCode":{"type":"string","description":"Referans kodu / dekont (boşsa otomatik üretilir)"},"credits":{"type":"number","description":"Kredi miktarı (isteğe bağlı)"},"planKey":{"type":"string","description":"Abonelik planı anahtarı — onaylanınca abonelik etkinleşir"},"couponCode":{"type":"string","description":"İndirim kodu (abonelik ödemesine uygulanır)"},"customOfferId":{"type":"string","description":"Özel teklif ID — onaylanınca teklif etkinleşir"},"receiptUrl":{"type":"string","description":"Fotoğraf URL (fiş/dekont)"},"description":{"type":"string","description":"Açıklama"}},"required":["senderName","senderIban","bankName"]},"PaymentResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Payment ID"},"type":{"type":"string","description":"Payment Type","enum":["CREDIT_PURCHASE","INVOICE","SUBSCRIPTION"]},"status":{"type":"string","description":"Payment Status","enum":["PENDING","PROCESSING","COMPLETED","FAILED","CANCELLED","REFUNDED"]},"amountTRY":{"type":"number","description":"Amount in Turkish Lira (kuruş)"},"amountFormatted":{"type":"string","description":"Amount in Turkish Lira (formatlı)"},"description":{"type":"string","description":"Açıklama"},"stripePaymentId":{"type":"string","description":"Stripe Payment ID"},"referenceCode":{"type":"string","description":"Referans kodu (havale için)"},"creditsPurchased":{"type":"number","description":"Satın alınan kredi"},"companyName":{"type":"string","description":"Şirket adı (admin çapraz-şirket görünümü)"},"couponCode":{"type":"string","description":"Uygulanan indirim kodu"},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"},"senderName":{"type":"string","description":"Gönderen adı / ünvanı"},"senderIban":{"type":"string","description":"Gönderen IBAN"},"bankName":{"type":"string","description":"Gönderen banka"},"receiptUrl":{"type":"string","description":"Dekont bağlantısı"},"planKey":{"type":"string","description":"Abonelik planı anahtarı"}},"required":["id","type","status","amountTRY","amountFormatted","createdAt"]},"BankAccountResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Bank account ID"},"bankName":{"type":"string","description":"Banka adı"},"accountName":{"type":"string","description":"Hesap sahibi"},"iban":{"type":"string","description":"IBAN (maskelenmiş)"},"accountNumber":{"type":"string","description":"Hesap numarası (maskelenmiş)"},"branchCode":{"type":"string","description":"Şube kodu"},"swiftCode":{"type":"string","description":"SWIFT kodu"},"isActive":{"type":"boolean","description":"Aktif mi?"},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"}},"required":["id","bankName","accountName","iban","isActive","createdAt"]},"CreatePlatformBankAccountDto":{"type":"object","properties":{"bankName":{"type":"string","description":"Banka adı"},"accountName":{"type":"string","description":"Hesap sahibi"},"iban":{"type":"string","description":"IBAN"},"branchName":{"type":"string","description":"Şube"},"description":{"type":"string","description":"Açıklama / not"},"isActive":{"type":"boolean","description":"Aktif mi"},"sortOrder":{"type":"number","description":"Sıralama"}},"required":["bankName","accountName","iban"]},"UpdatePlatformBankAccountDto":{"type":"object","properties":{"bankName":{"type":"string","description":"Banka adı"},"accountName":{"type":"string","description":"Hesap sahibi"},"iban":{"type":"string","description":"IBAN"},"branchName":{"type":"string","description":"Şube"},"description":{"type":"string","description":"Açıklama / not"},"isActive":{"type":"boolean","description":"Aktif mi"},"sortOrder":{"type":"number","description":"Sıralama"}}},"UpdatePaymentStatusDto":{"type":"object","properties":{"status":{"type":"string","description":"Yeni durum","enum":["PENDING","PROCESSING","COMPLETED","FAILED","CANCELLED","REFUNDED"]},"reason":{"type":"string","description":"Red/sebep açıklaması"},"adminNote":{"type":"string","description":"Yönetici notu. \"Başka kanaldan ödendi\" gibi durumlarda paranın nereden alındığı; açıklamaya eklenir ve denetime yazılır."}},"required":["status"]},"BankAccountDto":{"type":"object","properties":{"bankName":{"type":"string","description":"Banka adı"},"accountName":{"type":"string","description":"Hesap sahibi"},"iban":{"type":"string","description":"IBAN"},"accountNumber":{"type":"string","description":"Hesap numarası"},"branchCode":{"type":"string","description":"Şube kodu"},"swiftCode":{"type":"string","description":"SWIFT kodu"}},"required":["bankName","accountName","iban"]},"MarketplaceSyncResponseDto":{"type":"object","properties":{"imported":{"type":"number","description":"İçe aktarılan sipariş sayısı"},"duplicated":{"type":"number","description":"Tekrarlanan sipariş sayısı"},"failed":{"type":"number","description":"Başarısız sipariş sayısı"},"orderIds":{"description":"İçe aktarılan siparişlerin IDleri","type":"array","items":{"type":"string"}}},"required":["imported","duplicated","failed","orderIds"]},"MarketplaceConnectionResponseDto":{"type":"object","properties":{}},"CreateMarketplaceConnectionDto":{"type":"object","properties":{"provider":{"type":"string","description":"Marketplace sağlayıcısı","enum":["GETIR","TRENDYOL_YEMEK","YEMEKSEPETI","MIGROS_YEMEK"]},"displayName":{"type":"string","description":"Görünen ad"},"credentialsJson":{"type":"object","description":"API kimlik bilgileri (JSON)"},"marketplaceDelivers":{"type":"boolean","description":"Teslimatı pazaryeri mi yapar (true) yoksa restoran mı (false)"},"restaurantId":{"type":"string","description":"Yönlendirilecek şube (restaurant) ID — boşsa birincil şube"}},"required":["provider","displayName"]},"MockOrderItem":{"type":"object","properties":{"name":{"type":"string","description":"Ürün adı"},"qty":{"type":"number","description":"Adet"},"priceCents":{"type":"number","description":"Birim fiyat (kuruş)"}},"required":["name","qty","priceCents"]},"SimulateMarketplaceOrderDto":{"type":"object","properties":{"customerName":{"type":"string","description":"Müşteri adı"},"customerPhone":{"type":"string","description":"Müşteri telefon"},"address":{"type":"string","description":"Teslimat adresi"},"items":{"description":"Sipariş kalemleri","type":"array","items":{"$ref":"#/components/schemas/MockOrderItem"}},"note":{"type":"string","description":"Sipariş notu"}}},"UpdateMarketplaceConnectionDto":{"type":"object","properties":{"displayName":{"type":"string","description":"Görünen ad"},"isActive":{"type":"boolean","description":"Aktif/Pasif"},"credentialsJson":{"type":"object","description":"API kimlik bilgileri (JSON)"},"marketplaceDelivers":{"type":"boolean","description":"Teslimatı pazaryeri mi yapar (true) yoksa restoran mı (false)"},"restaurantId":{"type":"string","description":"Yönlendirilecek şube (restaurant) ID — boşsa birincil şube"}}},"MarketplaceOrderListResponseDto":{"type":"object","properties":{}},"MarketplaceStatsDto":{"type":"object","properties":{"total":{"type":"number","description":"Toplam sipariş sayısı"},"imported":{"type":"number","description":"İçe aktarılan"},"duplicated":{"type":"number","description":"Tekrarlanan"},"failed":{"type":"number","description":"Başarısız"},"processed":{"type":"number","description":"İşlenen"}},"required":["total","imported","duplicated","failed","processed"]},"PlatformSettingsResponseDto":{"type":"object","properties":{"id":{"type":"string","description":"Settings ID (singleton)"},"creditUnitPriceTRY":{"type":"number","description":"1 kredi = X TL"},"demoDurationDays":{"type":"number","description":"Demo süresi (gün)"},"createdAt":{"format":"date-time","type":"string","description":"Oluşturulma tarihi"},"updatedAt":{"format":"date-time","type":"string","description":"Güncelleme tarihi"}},"required":["id","creditUnitPriceTRY","demoDurationDays","createdAt","updatedAt"]},"UpdatePlatformSettingsDto":{"type":"object","properties":{"creditUnitPriceTRY":{"type":"number","description":"1 kredi = X TL","example":4},"demoDurationDays":{"type":"number","description":"Demo süresi (gün)","example":14}}},"CreateContactDto":{"type":"object","properties":{"name":{"type":"string","example":"Ahmet Yılmaz"},"email":{"type":"string","example":"ahmet@ornek.com"},"phone":{"type":"string","example":"5551234567"},"subject":{"type":"string","example":"Demo talebi"},"message":{"type":"string","example":"Ürününüz hakkında bilgi almak istiyorum."}},"required":["name","email","message"]},"SubscribePushDto":{"type":"object","properties":{}},"UnsubscribePushDto":{"type":"object","properties":{}},"SaveBridgeConfigDto":{"type":"object","properties":{"apiBase":{"type":"string","description":"Express API taban adresi","example":"https://kuryoloexpress.com/api"},"apiKey":{"type":"string","description":"Kurye firmasının verdiği API anahtarı (kx_live_...)"},"webhookSecret":{"type":"string","description":"Webhook imza doğrulama sırrı"},"enabled":{"type":"boolean","description":"Köprü aktif mi","default":true}},"required":["apiBase","apiKey"]},"DispatchOrderDto":{"type":"object","properties":{"orderId":{"type":"string","description":"Express'e gönderilecek POS sipariş kimliği"}},"required":["orderId"]}}}}