2.4 KiB
2.4 KiB
GinImageAPI Kisa Teknik Ozet
Proje Dizini (aktif)
ginimageApi/
├── main.go
├── go.mod
├── app/
│ ├── accounts/
│ │ ├── handlers/user.go
│ │ └── models/{accounts,token}.go
│ └── middleware/{auth,security}.go
├── configs/{db,redis}.go
├── routers/router.go
├── docs/{docs.go,swagger.json,swagger.yaml}
├── app/images/{handlers,models}
└── pkg/images/processor.go
Uygulama Baslangic Akisi
.envyuklenir (godotenv).JWT_SECRETkontrol edilir; bos ise uygulama fail-fast kapanir.configs.ConnectDB()ile DB baglantisi acilir.configs.RunAutoMigrate()modelleri uygular.configs.SeedSecurityDefaults()calisir.configs.ConnectRedis()ile Redis baglanir.- Gin middleware zinciri calisir:
DynamicCORS()DynamicRateLimit()
routers.Setup(r)ile endpointler yuklenir.
Auth ve Yetki Kurallari
- Access token formati: standart JWT (HS256)
- Zorunlu claim kontrolleri:
iss,aud,nbf,exp Authorizationheader formati zorunludur:Bearer <access_token>- Legacy access token formatlari desteklenmez
AuthRequired()context'e sunlari yazar:user_id,email,usernameAdminRequired()mutating methodlarda (POST/PUT/PATCH/DELETE)users.is_adminkontrolu yapar
Route Gruplari
- Public auth:
/api/v1/auth/register,/api/v1/auth/login,/api/v1/auth/refresh - Auth gerekli:
/api/v1/me - Auth gerekli:
/api/v1/images/process - Auth gerekli:
/api/v1/images - Auth gerekli:
/api/v1/images/{id} - Admin gerekli:
/api/v1/users/{id}/admin - Swagger UI:
/swagger/index.html
Resim Isleme
- Endpoint:
POST /api/v1/images/process(multipart/form-data) - Dosya alani:
file(zorunlu) - Opsiyonel alanlar:
width,height,format,quality,cover - Varsayilanlar:
format:avifquality:90width/heightverilmezse boyutlar orijinal kalir (sifir deger)
- Desteklenen formatlar:
avif,webp,png,jpg/jpeg - Islenmis dosya fiziksel olarak
uploads/processed/altina yazilir - DB'ye
imagestablosunda kayit atilir (public_path,format,size,width,height,quality) - Response JSON olarak
file_name,public_pathveurlbilgilerini doner
Swagger
- Uretim komutu:
swag init -g main.go -o docs
- UI:
http://localhost:8080/swagger/index.html