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ı"
}