Create User

## Kullanıcı Oluştur Offline kapsamda yeni bir kullanıcı kaydı oluşturur. Bu endpoint; sigorta şirketlerinin veya acentelerin kendi kapsamlarında API erişimi için yeni kullanıcılar tanımlamasına olanak tanır. İstek; doğrulama kontrolleri, kimlik kapsamı çözümlemesi (şirket/acente), e-posta ve kullanıcı adı tekillik kontrolü ardından kullanıcıyı oluşturur. --- ## Endpoint Bilgisi | Özellik | Değer | | --- | --- | | **HTTP Metodu** | `POST` | | **URL** | `/api/offline/users` | | **Content-Type** | `application/json` | | **Yetkilendirme** | `Authorization: Bearer {token}` | ### Yetkilendirme Rolleri Çağıranın aşağıdaki rollerden birine sahip olması gerekir: | Rol | Erişim Kapsamı | | --- | --- | | `InsuranceCompanyAPIAdmin` | Şirket kapsamında yeni kullanıcı oluşturabilir | | `Supervizor` | Şirket/acente kapsamında yeni kullanıcı oluşturabilir | > **Not:** Endpoint `Create` policy'si ile korunur. Bu rollere sahip olmayan kullanıcılar `403 Forbidden` alır. --- ## İstek Modeli | Alan | Tip | Zorunlu | Açıklama | Doğrulama Kuralları | | --- | --- | --- | --- | --- | | `UserName` | `string` | Evet | Kullanıcı adı | Boş olamaz: `"UserName is required."` <br>Min. 3 karakter: `"UserName must be at least 3 characters."` <br>Maks. 256 karakter: `"UserName must be less than or equal to 256 characters."` | | `Email` | `string` | Evet | E-posta adresi | Boş olamaz: `"Email is required."` <br>Geçerli e-posta formatı olmalı: `"Email must be a valid email address."` | | `Password` | `string` | Evet | Kullanıcı şifresi | Boş olamaz: `"Password is required."` <br>Min. 8 karakter: `"Password must be at least 8 characters."` <br>Maks. 100 karakter: `"Password must be less than or equal to 100 characters. Recommended length is 16 characters."` <br>En az bir büyük harf: `"Password must contain at least one uppercase letter (A-Z)."` <br>En az bir küçük harf: `"Password must contain at least one lowercase letter (a-z)."` <br>En az bir rakam: `"Password must contain at least one number (0-9)."` <br>En az bir özel karakter: `"Password must contain at least one non-alphanumeric character."` | | `FullName` | `string` | Evet | Kullanıcının tam adı | Boş olamaz: `"FullName is required."` <br>Min. 3 karakter: `"FullName must be at least 3 characters."` <br>Maks. 100 karakter: `"FullName must be less than or equal to 100 characters."` | > **Şifre Politikası:** Şifre; en az bir büyük harf, bir küçük harf, bir rakam ve bir özel karakter içermelidir. Önerilen uzunluk 16 karakterdir. --- ## İstek Örneği ``` http POST /api/offline/users Authorization: Bearer {token} Content-Type: application/json { "UserName": "api-user-01", "Email": "api-user-01@acme.local", "Password": "StrongPass123!", "FullName": "Api User" } ``` --- ## Yanıt Formatı ### Başarılı Yanıt **HTTP Durumu:** `201 Created` Yanıt gövdesinde oluşturulan kullanıcının kimliği döner: ``` json { "Id": "3f4f95f8-0f6a-4763-86c9-5e6cf9dd8d7b" } ``` ### Hata Yanıtı ``` json { "Status": false, "Code": "Error.Code", "Message": "Error description", "Response": null } ``` Doğrulama hatalarında `Response` alanı detayları içerir: ``` json { "Status": false, "Code": "Validation.General", "Message": "One or more validation errors occurred", "Response": [ { "Field": "FieldName", "Message": "Error message description" } ] } ``` --- ## HTTP Durum Kodları | Durum | Açıklama | | --- | --- | | `201 Created` | Kullanıcı başarıyla oluşturuldu | | `400 Bad Request` | İstek doğrulama hatası | | `401 Unauthorized` | Eksik, geçersiz veya süresi dolmuş token | | `403 Forbidden` | Yetersiz yetki, geçersiz rol veya kapsam | | `409 Conflict` | Duplicate email veya kullanıcı adı | | `500 Internal Server Error` | Beklenmeyen business hatası | --- ## Hata Kodları Referansı | Kod | HTTP Durumu | Mesaj | | --- | --- | --- | | `Validation.General` | 400 | One or more validation errors occurred | | `OfflineUsers.DuplicateEmail` | 409 | Email '{email}' already exists. | | `OfflineUsers.DuplicateUserName` | 409 | UserName '{userName}' already exists. | | `OfflineUsers.InsuranceCompanyNotFound` | 403 | No valid insurance company assignment found in token. | | `OfflineUsers.AgentNotFound` | 403 | No valid agent assignment found in token. | | `OfflineUsers.AgentOrCompanyRoleRequired` | 403 | Only agent or company users are authorized for this endpoint. | | `OfflineUsers.CreateFailed` | 500 | User could not be created due to a business rule violation. | --- ## İşleme Akışı Endpoint, isteği aldığında aşağıdaki adımları sırasıyla uygular: 1. **Kimlik Doğrulama** — Bearer token doğrulanır; token yoksa/geçersizse `401` döner. 2. **Yetkilendirme** — `Create` policy'si ve `InsuranceCompanyAPIAdmin` / `Supervizor` rolü kontrol edilir; yetersizse `403` döner. 3. **İstek Doğrulama** — `CreateUserRequestValidator` ile alan bazlı kurallar uygulanır; ihlal varsa `400` döner. 4. **Identity Scope Çözümleme** — Token claim'lerinden `InsuranceCompanyIds` (company) veya `AgentId` (agent) okunur. Uygun rol/scope yoksa `403` döner. 5. **Duplicate Kontrolleri** — E-posta ve kullanıcı adı için tekillik kontrolü yapılır; çakışma varsa `409` döner. 6. **Kullanıcı Oluşturma** — Business katmanında gerekli işlemler yapılır. 7. **Sonuç** — Başarıyla oluşturulursa `201 Created` ve `{ Id }` döner. Business katmanından `BusinessRuleException` alınırsa `OfflineUsers.CreateFailed` koduyla `500` döner. --- ## Notlar - **Identity Scope:** Oluşturulan kullanıcı, isteği yapan token sahibinin kapsamına (şirket veya acente) göre atanır. Company kullanıcıları kendi şirketlerine, agent kullanıcıları ise kendi acentelerine kullanıcı ekleyebilir. - **Şifre Güvenliği:** Şifreler sistemde hash'lenerek saklanır; düz metin olarak döndürülmez. İstekten sonra şifreyi güvenli bir şekilde ilgili kullanıcıya iletmek çağıranın sorumluluğundadır. - **Kullanıcı Adı & E-posta:** Her ikisi de sistem genelinde tekildir. Oluşturulduktan sonra aynı değerlerle yeni bir kullanıcı oluşturulamaz. ---

Authentication

AuthorizationBearer

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

Request

This endpoint expects an object.

Response headers

Content-Typestring

Response

Created

Errors

400
Bad Request Error
403
Forbidden Error
409
Conflict Error