Skip to navigation

Transition Service Availability Status

Transition Service Availability Status

Tek bir servis durumu kaydına statü geçişi uygular. Otomatik izleme kaynakları için tasarlanmıştır; geçişin uygulanıp uygulanmadığı yanıt gövdesinde bildirilir.

Uç Nokta (Endpoint)

POST {{baseUrl}}/api/ServiceAvailabilities/transitions

Content-Type: application/json


Kullanım

Bu servis, bir sigorta şirketi servisinde genel bir sorun tespit eden ya da sorunun giderildiğini gören otomatik kaynakların statüyü güncellemesi için kullanılır. Önerilen akış:

  1. Authentication Login servisinden Update yetkili bir token alınır.
  2. Kararı üreten olay için tekil bir CorrelationId belirlenir.
  3. Bu servis hedef statü (Active ya da AutoDisabled) ve kayıt kimliğiyle çağrılır.
  4. Yanıttaki Applied ve AlreadyProcessed alanları okunur; Applied = false ise Detail gerekçeyi taşır.

Idempotency: CorrelationId işlenen geçişlerin geçmişine yazılır. Aynı CorrelationId ile gelen tekrar istekler uygulanmaz; yanıt AlreadyProcessed = true ile döner. Böylece kaynak tarafındaki retry’lar statüyü ileri geri oynatmaz.

İzin verilen geçişler:

Mevcut StatüBu servis üzerinden izin verilen hedef
ActiveAutoDisabled
AutoDisabledActive
ManualDisabled— (otomatik kaynaklar değiştiremez)
Unknown—

⚠️ Uygulanmayan geçiş hata değildir: 200 OK ile Applied = false döner. İstemci yalnızca HTTP durum koduna bakarak geçişin uygulandığını varsaymamalıdır.

💡 Kayıt kimliği dört alanın birleşimidir: InsuranceCompanyId + ServiceOperationId + ProductId + OutsourceProcessId. Değerleri GET /api/ServiceAvailabilities yanıtındaki kayıttan birebir alın; ürün bağımsız kayıtlarda ProductId, outsource olmayan kayıtlarda OutsourceProcessId null gönderilir.


Kimlik Doğrulama

Bu uç nokta geçerli bir JWT erişim token’ı gerektirir. Token, Authentication Login servisinden alınır ve Authorization başlığında gönderilir.

BaşlıkTürZorunluAçıklama
Authorizationstring✅Bearer <token> biçiminde erişim token’ı.
Content-Typestring✅application/json olmalıdır.

Token’ın Update yetkisini taşıması gerekir. Yalnızca listeleme (Read) yetkisi olan tüketiciler statü değiştiremez; istek 403 Forbidden ile sonuçlanır.


İstek Gövdesi

ServiceStatusTransitionRequest

ParametreTürZorunluAçıklama
CorrelationIdstring✅Kararı üreten olayın tekil kimliği. Idempotency anahtarıdır. En fazla 100 karakter.
Sourcestring✅Statü geçmişine yazılan çağıran kimliği (ör. n8n:company-service-disable). En fazla 100 karakter.
TargetStatusstring✅Hedef statü. Yalnızca Active ya da AutoDisabled (büyük/küçük harf duyarsız).
Reasonstring✅Statü geçmişine yazılan geçiş gerekçesi. En fazla 500 karakter.
InsuranceCompanyIdinteger (int32)✅Kaydın sigorta şirketi. Sıfırdan büyük olmalıdır.
ServiceOperationIdinteger (int32)✅Kaydın servis operasyonu. Sıfırdan büyük olmalıdır.
ProductIdinteger (int32) | null⚠️ KoşulluKaydın ürünü. Ürünlü kayıtlarda zorunludur; ürün bağımsız kayıtlarda null gönderilir. Gönderilirse sıfırdan büyük olmalıdır.
OutsourceProcessIdinteger (int32) | null⚠️ KoşulluKaydın outsource süreci. Outsource kayıtlarda zorunludur; diğerlerinde null gönderilir. Gönderilirse sıfırdan büyük olmalıdır.

Örnek İstek:

{
"CorrelationId": "seq-2026081011043300123",
"Source": "n8n:company-service-disable",
"TargetStatus": "AutoDisabled",
"Reason": "Son 30 dakikada başarılı işlem üretilmedi.",
"InsuranceCompanyId": 12,
"ServiceOperationId": 118,
"ProductId": 27,
"OutsourceProcessId": null
}

İstek Gövdesi Şeması (JSON Schema)

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "ServiceStatusTransitionRequest",
"type": "object",
"required": ["CorrelationId", "Source", "TargetStatus", "Reason", "InsuranceCompanyId", "ServiceOperationId"],
"properties": {
"CorrelationId": { "type": "string", "minLength": 1, "maxLength": 100 },
"Source": { "type": "string", "minLength": 1, "maxLength": 100 },
"TargetStatus": {
"type": "string",
"enum": ["Active", "AutoDisabled"],
"$comment": "Sunucu büyük/küçük harf duyarsız karşılaştırır."
},
"Reason": { "type": "string", "minLength": 1, "maxLength": 500 },
"InsuranceCompanyId": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 2147483647
},
"ServiceOperationId": {
"type": "integer",
"format": "int32",
"minimum": 1,
"maximum": 2147483647
},
"ProductId": {
"type": ["integer", "null"],
"format": "int32",
"minimum": 1,
"maximum": 2147483647
},
"OutsourceProcessId": {
"type": ["integer", "null"],
"format": "int32",
"minimum": 1,
"maximum": 2147483647
}
}
}

💡 Şemada additionalProperties: false bilinçli olarak yoktur: API bilinmeyen alanları yok sayar, isteği reddetmez.


Başarılı Yanıt (200 OK)

İstek işlendiğinde HTTP 200 OK döner; geçişin uygulanıp uygulanmadığı gövdede bildirilir.

AlanTürAçıklama
CorrelationIdstringİşlenen isteğin korelasyon kimliği.
AlreadyProcessedbooleantrue ise bu CorrelationId daha önce işlenmiştir ve bu çağrı hiçbir değişiklik uygulamamıştır.
AppliedbooleanGeçişin kayda uygulanıp uygulanmadığı.
DetailstringUygulanan geçiş (Active -> AutoDisabled) ya da uygulanmama gerekçesi.

Uygulanmama gerekçeleri (Applied = false):

DurumDetail
CorrelationId daha önce işlenmişCorrelationId was already processed; no change applied.
Kayıt bulunamadıRecord not found.
Kayıt ManualDisabledManualDisabled records cannot be changed by automated sources.
Kayıt zaten hedef statüdeRecord is already {TargetStatus}.
Durum makinesi izin vermiyorİş kuralı mesajı (Türkçe metin).

Örnek Başarılı Yanıt (geçiş uygulandı):

{
"CorrelationId": "seq-2026081011043300123",
"AlreadyProcessed": false,
"Applied": true,
"Detail": "Active -> AutoDisabled"
}

Örnek Başarılı Yanıt (tekrar istek):

{
"CorrelationId": "seq-2026081011043300123",
"AlreadyProcessed": true,
"Applied": false,
"Detail": "CorrelationId was already processed; no change applied."
}

Hatalı Yanıt (400 Bad Request)

Alan doğrulaması başarısız olduğunda ApiResponse zarfı içinde alan bazlı hata listesi döner.

AlanTürAçıklama
StatusbooleanHatalarda her zaman false.
CodestringHata kodu. Doğrulama hatalarında Validation.General.
MessagestringGenel hata açıklaması.
Responsearray | null{ Field, Message } listesi.

Alan doğrulama mesajları:

FieldMessage
CorrelationIdCorrelationId is required.
CorrelationIdCorrelationId must not exceed 100 characters.
SourceSource is required.
SourceSource must not exceed 100 characters.
TargetStatusTargetStatus must be 'Active' or 'AutoDisabled'.
ReasonReason is required.
ReasonReason must not exceed 500 characters.
InsuranceCompanyIdInsuranceCompanyId must be greater than zero.
ServiceOperationIdServiceOperationId must be greater than zero.
ProductIdProductId must be greater than zero when provided.
OutsourceProcessIdOutsourceProcessId must be greater than zero when provided.

Örnek Hatalı Yanıt:

{
"Status": false,
"Code": "Validation.General",
"Message": "One or more validation errors occurred",
"Response": [
{
"Field": "TargetStatus",
"Message": "TargetStatus must be 'Active' or 'AutoDisabled'."
},
{
"Field": "Reason",
"Message": "Reason is required."
}
]
}

⚠️ Model binding hataları (bozuk JSON, sayısal alana metin) doğrulamadan önce oluşur ve ApiResponse zarfı yerine farklı bir gövdeyle 400 döner.


Hatalı Yanıt (401 Unauthorized)

Token gönderilmediğinde, geçersiz olduğunda veya süresi dolduğunda HTTP 401 Unauthorized döner. Yanıt gövdesi boştur.

💡 Token’ın süresi dolduysa yanıtta Token-Expired: true başlığı bulunur. Bu durumda POST /api/authentication/refreshtoken ile yeni token alınmalıdır.


Hatalı Yanıt (403 Forbidden)

Token geçerli olduğu hâlde Update yetkisini taşımadığında HTTP 403 Forbidden döner. Yanıt gövdesi boştur.

Authentication

AuthorizationBearer

Bearer authentication of the form Bearer <token>, where token is your auth token.

Headers

AuthorizationstringOptional

Request

This endpoint expects an object.

Response headers

Content-TypestringOptional

Response

OK

Errors

400
Bad Request Error