57 lines
1.7 KiB
Markdown
57 lines
1.7 KiB
Markdown
# Proje Yapısı
|
||
|
||
```
|
||
goaresv3/
|
||
├── main.go
|
||
├── .env
|
||
├── app/
|
||
│ ├── accounts/
|
||
│ │ ├── controllers/user.go
|
||
│ │ └── models/accounts.go
|
||
│ ├── settings/
|
||
│ │ ├── controllers/settings.go
|
||
│ │ └── models/{setting,hero,cors}.go
|
||
│ ├── shop/
|
||
│ │ ├── controllers/shop.go
|
||
│ │ └── models/{product,cart}.go
|
||
│ └── blog/
|
||
│ ├── controllers/blog.go
|
||
│ └── models/blog.go
|
||
├── config/database.go
|
||
├── pkg/
|
||
│ ├── jwt/jwt.go
|
||
│ ├── mailer/mailer.go
|
||
│ ├── middleware/{auth,cors_dynamic,rate_limit_dynamic}.go
|
||
│ └── swaggerui/initializer.go
|
||
├── router/router.go
|
||
├── docs/{docs.go,swagger.json,swagger.yaml}
|
||
└── belgeler/
|
||
```
|
||
|
||
## Uygulama Akışı
|
||
|
||
1. `.env` yüklenir (`godotenv`).
|
||
2. `config.ConnectDB()` ile MySQL bağlantısı açılır.
|
||
3. `config.RunAutoMigrate()` tüm modüllerin şemalarını uygular.
|
||
4. `config.SeedSecurityDefaults()` CORS/RateLimit başlangıç kayıtlarını (yoksa) ekler.
|
||
5. Gin başlatılır, global middlewareler çalışır:
|
||
- `DynamicCORS()`
|
||
- `DynamicRateLimit()`
|
||
6. `router.Setup(r)` ile endpointler yüklenir.
|
||
|
||
## Yetki Modeli
|
||
|
||
- `AuthRequired()`:
|
||
- Access token doğrular
|
||
- Context'e `user_id`, `email`, `username` yazar
|
||
- `AdminRequired()`:
|
||
- `users.is_admin` alanını kontrol eder
|
||
- `POST/PUT/DELETE/PATCH` gibi mutating endpointlerde kullanılır
|
||
|
||
## Route Grupları
|
||
|
||
- Public: `/api/v1/auth/*`
|
||
- Auth zorunlu (read + user işlemleri): `/api/v1/*`
|
||
- Admin zorunlu (mutating yönetim işlemleri): `/api/v1/*` altında admin grubu
|
||
- Swagger UI: `/swagger/*any`
|