5.9 KiB
Implementation Notes
Bu belge projede su ana kadar yapilan implementasyonlari teknik olarak ozetler.
1. Genel Mimari
Proje Axum tabanli bir API olarak calisir.
Baslica moduller:
src/main.rs-> uygulama bootstrapsrc/app/-> router birlestirme ve OpenAPIsrc/auth/-> register/login/refresh/logout/me akisisrc/images/-> image upload, process, listeleme ve variant stream akisisrc/entities/-> SeaORM entity tanimlarisrc/migration/-> migration dosyalarisrc/state/->AppState, JWT ayarlari, DB initsrc/error/-> unifiedApiErrorsrc/tests/-> endpoint testleri
Katman mantigi:
controller-> HTTP request parsing / responseservice-> business logicrepository-> DB / fs / token source erisimiprocessor-> image decode/resize/encodedto-> request/response tasiyicilarimodel-> domain enum ve tipler
2. Auth Sistemi
Account sistemi JWT access + refresh token mantigi ile calisir.
Mevcut endpointler:
POST /api/v1/auth/registerPOST /api/v1/auth/loginPOST /api/v1/auth/refreshPOST /api/v1/auth/logoutGET /api/v1/auth/me
Davranis:
- sifreler
argon2ile hashlenir - access / refresh token
jsonwebtokenile uretilir - refresh token session'lari:
- DB varsa
refresh_tokenstablosu - DB yoksa in-memory fallback
- DB varsa
3. Images Modulu
Images modulu su endpointleri sunar:
GET /api/v1/images/processPOST /api/v1/images/processGET /api/v1/imagesGET /api/v1/images/{id}/variant
3.1 GET /api/v1/images/process
Bu endpoint query parametrelerini dogrular ve donusum metadata'si uretir.
Desteklenen parametreler:
width/wheight/hformatqualitycrop
Default degerler:
format = webpcrop = coverquality = 80
3.2 POST /api/v1/images/process
Bu endpoint multipart form-data ile dosya kabul eder.
Beklenen alanlar:
filewidthheightformatqualitycrop
Akis:
- bearer token okunur
- token validate edilir
- multipart file byte olarak okunur
- orijinal dosya
uploads/originalsaltina kaydedilir - image decode edilir
- gerekirse resize uygulanir
- istenen output format'a encode edilir
- islenmis varyant
uploads/variantsaltina kaydedilir - DB varsa metadata
imagesveimage_variantstablolarina yazilir - response olarak metadata donulur
3.3 GET /api/v1/images
Bu endpoint DB uzerinden image metadata listesi doner.
Not:
- DB yoksa
503 Service Unavailabledoner - response, her image icin latest variant bilgisini de icerebilir
3.4 GET /api/v1/images/{id}/variant
Bu endpoint ilgili image kaydinin en son varyant dosyasini binary olarak stream eder.
Not:
- DB gerektirir
- son varyant secimi
created_at descsirasina gore yapilir
4. Desteklenen Formatlar
Model tarafinda desteklenen formatlar:
avifpngjpgjpegwebp
Processor tarafinda gercek encode akisi vardir.
Not:
- input decode basarisizsa su an fallback davranisi source bytes donusumu yerine ham byte ile devam etmeye calisabilir veya hata doner; bu kisim ileride daha da sertlestirilebilir
cropenum'u dogrulaniyor fakat su an gercek crop stratejileri tam uygulanmiyor; mevcut implementasyon daha cok resize + format convert seviyesinde
5. Token Dogrulama
Image endpointleri icin bearer token zorunludur.
Su an iki yol desteklenir:
IMAGE_ACCESS_TOKENenv degeri ile gelen dev token- mevcut auth sisteminden uretilmis JWT access token
Bu davranis gecis sureci icindir.
Hedef mimari:
- Redis tabanli image token validation
- namespaced key yapisi, or.
image:token:{token}
6. Storage Davranisi
Varsayilan env ayarlari:
IMAGE_UPLOAD_DIR=uploads/originalsIMAGE_VARIANT_DIR=uploads/variants
Yuklenen orijinal dosya:
uploads/originals/<uuid>.<ext>
Uretilen varyant dosya:
uploads/variants/<uuid>.<target-ext>
Onemli not:
- su an response icinde
stored_pathdonuluyor - bu, mevcut implementasyonda debugging ve kontrol kolayligi icin acik
- hedef uretim mimarisinde raw path expose etmek yerine
image_idveya signed access token tercih edilmelidir
7. DB ve Migration Yapisi
7.1 Auth Tablolari
Migration:
m20260409_000001_create_auth_tables
Tablolar:
usersrefresh_tokens
7.2 Images Tablolari
Migration:
m20260409_000002_create_image_tables
Tablolar:
imagesimage_variants
Iliskiler:
users (1) -> (N) imagesimages (1) -> (N) image_variants
7.3 Migration Calisma Akisi
src/state/mod.rs icinde DB baglantisi varsa uygulama acilisinda Migrator::up cagrilir.
Yani:
- DB varsa migration'lar otomatik kontrol edilir
- DB baglantisi yoksa app fallback modda acilabilir
8. Swagger / OpenAPI
Swagger UI:
GET /swagger-ui
OpenAPI JSON:
GET /api-docs/openapi.json
Swagger'a ekli alanlar:
- auth endpointleri
- image process GET
- image upload POST (multipart form-data)
- image list
- image variant stream
9. Env Degiskenleri
Temel env degiskenleri:
DATABASE_URLJWT_SECRETJWT_ISSUERACCESS_TOKEN_TTL_SECSREFRESH_TOKEN_TTL_SECSENABLE_SWAGGER_UIIMAGE_ACCESS_TOKENIMAGE_UPLOAD_DIRIMAGE_VARIANT_DIRDB_REQUIRED
10. Mevcut Sinirlar / Sonraki Adimlar
Su an sistem calisir durumda ama halen gelistirilebilir alanlar var:
- Redis tabanli gercek image token repository
- gercek crop stratejileri (
cover,contain,centervs.) - image cache / variant cache
- raw path expose etmek yerine guvenli public serving
GET /api/v1/images/{id}/varianticin format/width/height/crop bazli secim- islenmis varyantlar icin duplicate-onleme / cache-aside stratejisi
- local fs yerine object storage destegi
11. Windows Build
Repo icinde win.sh scripti bulunur.
Amaci:
x86_64-pc-windows-gnutarget eklemek- linker config hazirlamak
- Windows release build almak
Script:
.cargo/config.tomlolusturabilircargo build --target x86_64-pc-windows-gnu --releasecalistirir