Geliştirici dökümanı

CarDEX API

Panelin tükettiği REST uçları. Tüm yanıtlar JSON; hata yanıtları ortak bir formattadır. Base URL: https://cardex.script-app.cloud

Sistem

Sağlık durumu ve API meta bilgisi.

GET/health

Sağlık kontrolü

Yanıtlar

200{ ok: true, service, ts }
GET/api/v1

API kökü, endpoint listesi

Yanıtlar

200{ name, version, endpoints[] }

Araçlar

Bir kullanıcıya bağlı (opsiyonel) araç kayıtları.

GET/api/v1/cars

Liste

Query parametreleri

AlanTipAçıklama
firebaseUidstringBu Firebase kullanıcısının araçlarını getirir.

Yanıtlar

200Car[] (her satıra brand objesi gömülür)
POST/api/v1/carsapplication/json

Yeni araç oluştur

Gövde alanları

AlanTipAçıklama
plaka*string
marka*string
model*string
yil*number1900–2100
kmnumber≥ 0, varsayılan 0
transmissionstring?
fuelTypestring?
colorstring?
imageUrlurl?
notesstring?
brandIdnumber?brands tablosuna FK
firebaseUidstring?Sahip Firebase Auth UID

Yanıtlar

201Car (brand bilgisi ile)
400Doğrulama / yabancı anahtar hatası
GET/api/v1/cars/:id

Tek araç

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

200Car
404Bulunamadı
PATCH/api/v1/cars/:idapplication/json

Aracı güncelle (kısmi)

Path parametreleri

AlanTipAçıklama
id*number

Gövde alanları

AlanTipAçıklama
plakastring?
markastring?
modelstring?
yilnumber?
kmnumber?
transmissionstring?
fuelTypestring?
colorstring?
imageUrlurl?
notesstring?
brandIdnumber | null?
firebaseUidstring | null?

Yanıtlar

200Car
400EMPTY / doğrulama
DELETE/api/v1/cars/:id

Aracı sil

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

204Silindi (gövdesiz)
404Bulunamadı

Markalar

Logo dosyası ile birlikte yönetilir. POST/PATCH multipart/form-data alır; logo dosyası `logo` alanında.

GET/api/v1/brands

Liste (sortOrder, name)

Yanıtlar

200Brand[]
POST/api/v1/brandsmultipart/form-data

Yeni marka

Gövde alanları

AlanTipAçıklama
slug*stringOtomatik normalize edilir
name*string
sortOrdernumberVarsayılan 0
logofilePNG/JPG/WEBP/SVG, ≤ 5 MB. Disk yolu /uploads/brands/...

Yanıtlar

201Brand
400Doğrulama / desteklenmeyen dosya türü
409Slug zaten kullanılıyor (23505)
GET/api/v1/brands/:id

Tek marka

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

200Brand
404Bulunamadı
PATCH/api/v1/brands/:idmultipart/form-data

Markayı güncelle

Path parametreleri

AlanTipAçıklama
id*number

Gövde alanları

AlanTipAçıklama
slugstring?
namestring?
sortOrdernumber?
logofile?Yeni dosya: eski logo silinir
removeLogo1 | 0Mevcut logoyu silmek için (yeni dosya yoksa)

Yanıtlar

200Brand
404Bulunamadı
DELETE/api/v1/brands/:id

Markayı sil (logosu da diskten silinir)

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

204Silindi
404Bulunamadı

Modeller

Bir markaya bağlı model kataloğu. (brandId + name) çifti uniq.

GET/api/v1/models

Liste

Query parametreleri

AlanTipAçıklama
brandIdnumberSadece bu markanın modelleri

Yanıtlar

200Model[]
POST/api/v1/modelsapplication/json

Yeni model

Gövde alanları

AlanTipAçıklama
brandId*number
name*string
bodyTypestring?
yearStartnumber?
yearEndnumber?
notesstring?

Yanıtlar

201Model
400Marka yok / doğrulama
GET/api/v1/models/:id

Tek model

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

200Model
PATCH/api/v1/models/:idapplication/json

Modeli güncelle

Path parametreleri

AlanTipAçıklama
id*number

Gövde alanları

AlanTipAçıklama
brandIdnumber?
namestring?
bodyTypestring?
yearStartnumber?
yearEndnumber?
notesstring?

Yanıtlar

200Model
DELETE/api/v1/models/:id

Modeli sil

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

204Silindi

Tamirhaneler

GET/api/v1/workshops

Liste (önce aktifler)

Yanıtlar

200Workshop[]
POST/api/v1/workshopsapplication/json

Yeni tamirhane

Gövde alanları

AlanTipAçıklama
name*string
phonestring?
emailemail?
addressstring?
notesstring?
activebooleanVarsayılan true

Yanıtlar

201Workshop
GET/api/v1/workshops/:id

Tek kayıt

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

200Workshop
PATCH/api/v1/workshops/:idapplication/json

Güncelle

Path parametreleri

AlanTipAçıklama
id*number

Gövde alanları

AlanTipAçıklama
namestring?
phonestring?
emailemail?
addressstring?
notesstring?
activeboolean?

Yanıtlar

200Workshop
DELETE/api/v1/workshops/:id

Sil

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

204Silindi

Sigorta & Kasko

GET/api/v1/insurance

Liste

Yanıtlar

200InsuranceCompany[]
POST/api/v1/insuranceapplication/json

Yeni şirket

Gövde alanları

AlanTipAçıklama
name*string
type'insurance' | 'casco' | 'both'Varsayılan 'both'
phonestring?
emailemail?
websitestring?
addressstring?
notesstring?
activebooleanVarsayılan true

Yanıtlar

201InsuranceCompany
GET/api/v1/insurance/:id

Tek kayıt

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

200InsuranceCompany
PATCH/api/v1/insurance/:idapplication/json

Güncelle

Path parametreleri

AlanTipAçıklama
id*number

Gövde alanları

AlanTipAçıklama
namestring?
typestring?
phonestring?
emailemail?
websitestring?
addressstring?
notesstring?
activeboolean?

Yanıtlar

200InsuranceCompany
DELETE/api/v1/insurance/:id

Sil

Path parametreleri

AlanTipAçıklama
id*number

Yanıtlar

204Silindi

Firebase Auth

Firebase Admin SDK üzerinden mobil uygulama kullanıcıları. Sunucuda FIREBASE_SERVICE_ACCOUNT_PATH ayarlı olmalı; aksi halde 503 döner.

GET/api/v1/firebase-users/status

Firebase'in yapılandırılıp yapılandırılmadığı

Yanıtlar

200{ enabled: boolean }
GET/api/v1/firebase-users

Sayfalı kullanıcı listesi

Query parametreleri

AlanTipAçıklama
limitnumber1–1000 (vars. 100)
pageTokenstringÖnceki yanıttan dönen sayfa anahtarı

Yanıtlar

200{ users: FirebaseUser[], pageToken: string | null }
503Firebase ayarsız
GET/api/v1/firebase-users/:uid

Tek kullanıcı

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

200FirebaseUser
404Bulunamadı
PATCH/api/v1/firebase-users/:uidapplication/json

Kullanıcıyı güncelle

Path parametreleri

AlanTipAçıklama
uid*string

Gövde alanları

AlanTipAçıklama
emailemail?
emailVerifiedboolean?
displayNamestring?
phoneNumberstring?
photoURLurl?
disabledboolean?
passwordstring?≥ 6 karakter

Yanıtlar

200FirebaseUser
409E-posta başka kullanıcıda
POST/api/v1/firebase-users/:uid/disable

Kullanıcıyı devredışı bırak

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

200FirebaseUser
POST/api/v1/firebase-users/:uid/enable

Kullanıcıyı tekrar aktifleştir

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

200FirebaseUser
POST/api/v1/firebase-users/:uid/reset-password

Parola sıfırlama linki üret

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

200{ link, email }
400Kullanıcının e-postası yok
POST/api/v1/firebase-users/:uid/verify-email

E-posta doğrulama linki üret

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

200{ link, email }
POST/api/v1/firebase-users/:uid/claimsapplication/json

Panel rolü (custom claim) ata veya kaldır

Verilen role panel için Firebase custom claim olarak kaydedilir. Ardından refresh token'lar iptal edilir; kullanıcı yeniden giriş yaptığında claim aktif olur.

Path parametreleri

AlanTipAçıklama
uid*string

Gövde alanları

AlanTipAçıklama
role*'admin' | 'operator' | 'viewer' | nullnull gönderilirse rol kaldırılır

Yanıtlar

200FirebaseUser (yeni claim'lerle)
POST/api/v1/firebase-users/:uid/revoke-tokens

Tüm refresh token'ları iptal et (zorla logout)

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

204Tamam
DELETE/api/v1/firebase-users/:uid

Firebase kullanıcısını sil

Path parametreleri

AlanTipAçıklama
uid*string

Yanıtlar

204Silindi
404Bulunamadı

Yüklenen dosyalar

Markalar için yüklenen logolar. Statik servis edilir, kimlik doğrulama yok.

GET/uploads/brands/:filename

Marka logosu

Yanıtlar

200image/* binary
404Dosya yok

Hata formatı

Tüm 4xx/5xx yanıtları aşağıdaki şemaya uyar.

{
  "error": "Kısa hata özeti",
  "detail"?: "Açıklama veya doğrulama mesajları",
  "code"?: "BAD_ID | NOT_FOUND | EMPTY | ...",
  "debug"?: "Yalnızca dev ortamında postgres ham mesajı"
}