first commit
This commit is contained in:
171
AGENTS.md
Normal file
171
AGENTS.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# Genimi (AI) Kuralları
|
||||
- **Dil:** Her zaman (kod blokları hariç) Türkçe cevap vermelisin.
|
||||
|
||||
# Go Backend Guidelines — JWT + OAuth + RBAC & Security
|
||||
# Go Next Js Guidelines
|
||||
Bu doküman Next frontend'e hizmet edecek Go (backend) uygulaması için güncel proje ve mimari rehberidir.
|
||||
|
||||
## Proje Backend Durumu ve Özellikler
|
||||
|
||||
- **Go Sürümü:** 1.25.6
|
||||
- **Veritabanı:** PostgreSQL
|
||||
- **Web Framework:** Gin
|
||||
- **Mimari:** RESTful API
|
||||
|
||||
## Proje Frontend Durumu ve Özellikler
|
||||
|
||||
- **Next js:** 16.1.6
|
||||
- **Next-auth":** 4.24.13
|
||||
- **Radix-ui":** 1.4.3
|
||||
- **Shadcn/ui":** Latest
|
||||
- **Sweetalert2":** 11.26.18
|
||||
- **Ioredis":** 5.9.2
|
||||
- **Redux":** 1.4.3
|
||||
- **Redux Toolkit":** 1.4.3
|
||||
- **Zod":** 4.3.6
|
||||
- **Tailwindcss":** 4
|
||||
- **Tailwind-merge":** 3.4.0
|
||||
- **Lucide-react":** 0.563.0
|
||||
- **Tw-animate-css":** 1.4.0
|
||||
- **server side rendering:** true
|
||||
|
||||
## API Uç Noktaları
|
||||
|
||||
-- Register Yeni Kullanıcı
|
||||
POST
|
||||
http://localhost:8080/v1/auth/register
|
||||
-- Gönderrilen JSON
|
||||
{
|
||||
"email":"beyhanod@beyhan.dev",
|
||||
"password":"1923btO**",
|
||||
"username":"test yaptim"
|
||||
}
|
||||
-- Cevap
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmMDVlZTc0Zi1hYjgzLTQxNzEtYjI3Ny1mZGM0NDZhNjA3YjciLCJlbWFpbCI6ImJleHlzc2hhbm9kQGJleWhhbi5kZXYiLCJwZXJtaXNzaW9ucyI6WyJ1c2VyOnJlYWQiXSwiaXNzIjoiZ2F1dGgtY2VudHJhbCIsImV4cCI6MTc3MDEzMDQ2OCwiaWF0IjoxNzcwMTI5NTY4fQ.Qc5EnE2r-In7hm6-NjP6WX2TKm3MyuM68SwsHYUNJbI",
|
||||
"email": "bexysshanod@beyhan.dev",
|
||||
"message": "User created successfully",
|
||||
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJmMDVlZTc0Zi1hYjgzLTQxNzEtYjI3Ny1mZGM0NDZhNjA3YjciLCJlbWFpbCI6ImJleHlzc2hhbm9kQGJleWhhbi5kZXYiLCJpc3MiOiJnYXV0aC1jZW50cmFsIiwiZXhwIjoxNzcwNzM0MzY4LCJpYXQiOjE3NzAxMjk1Njh9.JE2UZ6jJti2N2jbExx_TTY5VPSfXKvc2ZGB-Nw_toLQ",
|
||||
"roles": [
|
||||
{
|
||||
"id": 2,
|
||||
"name": "user",
|
||||
"description": "Default user role",
|
||||
"permissions": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "user:read",
|
||||
"description": "Can read user data"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"user_id": "f05ee74f-ab83-4171-b277-fdc446a607b7",
|
||||
"username": "test yaptim"
|
||||
}
|
||||
|
||||
-- Login Yeni Kullanıcı
|
||||
POST
|
||||
http://localhost:8080/v1/auth/login
|
||||
-- Gönderrilen JSON
|
||||
{
|
||||
"email":"beyhanod@beyhan.dev",
|
||||
"password":"1923btO**"
|
||||
}
|
||||
-- Cevap
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MWNmMDg2OC1kZjI0LTRiOGYtYjQ5MS03MGQ5ZWI3YTQzNzMiLCJlbWFpbCI6ImJleWhhbm9AYmV5aGFuLmRldiIsInBlcm1pc3Npb25zIjpbInVzZXI6cmVhZCJdLCJpc3MiOiJnYXV0aC1jZW50cmFsIiwiZXhwIjoxNzcwMTMwNjU3LCJpYXQiOjE3NzAxMjk3NTd9.QbsRFn5fr7L4Wc7HCxOs0_zOWWhuceWzPmt20TV5lNI",
|
||||
"email": "beyhano@beyhan.dev",
|
||||
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MWNmMDg2OC1kZjI0LTRiOGYtYjQ5MS03MGQ5ZWI3YTQzNzMiLCJlbWFpbCI6ImJleWhhbm9AYmV5aGFuLmRldiIsImlzcyI6ImdhdXRoLWNlbnRyYWwiLCJleHAiOjE3NzA3MzQ1NTcsImlhdCI6MTc3MDEyOTc1N30.wBML1pT9S9i9FtAw3PKmJBMdcobZexWVBTRV5remb_s",
|
||||
"roles": [
|
||||
{
|
||||
"id": 2,
|
||||
"name": "user",
|
||||
"description": "Default user role",
|
||||
"permissions": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "user:read",
|
||||
"description": "Can read user data"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"user_id": "91cf0868-df24-4b8f-b491-70d9eb7a4373",
|
||||
"username": "user_91cf0868"
|
||||
}
|
||||
|
||||
-- Refresh Token
|
||||
POST
|
||||
http://localhost:8080/v1/auth/refresh
|
||||
-- Gönderilen JSON
|
||||
{
|
||||
"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MWNmMDg2OC1kZjI0LTRiOGYtYjQ5MS03MGQ5ZWI3YTQzNzMiLCJlbWFpbCI6ImJleWhhbm9AYmV5aGFuLmRldiIsImlzcyI6ImdhdXRoLWNlbnRyYWwiLCJleHAiOjE3NzA3MzQ2NDUsImlhdCI6MTc3MDEyOTg0NX0.ACDDM20v1u6yjyNrqBnWafjXnrRAAT1-8CvfqSkjTsE"
|
||||
}
|
||||
-- Cevap
|
||||
{
|
||||
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MWNmMDg2OC1kZjI0LTRiOGYtYjQ5MS03MGQ5ZWI3YTQzNzMiLCJlbWFpbCI6ImJleWhhbm9AYmV5aGFuLmRldiIsInBlcm1pc3Npb25zIjpbInVzZXI6cmVhZCJdLCJpc3MiOiJnYXV0aC1jZW50cmFsIiwiZXhwIjoxNzcwMTMxMjYwLCJpYXQiOjE3NzAxMzAzNjB9.BKmZBkL6FPo208mYLeBFMkNOqJ2tsmGXJUN_0bdZFHQ",
|
||||
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI5MWNmMDg2OC1kZjI0LTRiOGYtYjQ5MS03MGQ5ZWI3YTQzNzMiLCJlbWFpbCI6ImJleWhhbm9AYmV5aGFuLmRldiIsImlzcyI6ImdhdXRoLWNlbnRyYWwiLCJleHAiOjE3NzA3MzUxNjAsImlhdCI6MTc3MDEzMDM2MH0.tkpcbQ6QmVVXK-r0QgP333X_FrAktVOuh1AJhwvV1BQ"
|
||||
}
|
||||
|
||||
-- Me (Kullanıcı Profili)
|
||||
GET
|
||||
http://localhost:8080/v1/auth/me
|
||||
-- Header
|
||||
Authorization: Bearer ACCESS_TOKEN_BURAYA
|
||||
-- Body: YOK (GET isteği)
|
||||
-- Cevap
|
||||
{
|
||||
"id": "91cf0868-df24-4b8f-b491-70d9eb7a4373",
|
||||
"username": "user_91cf0868",
|
||||
"email": "beyhano@beyhan.dev",
|
||||
"created_at": "2026-02-03T17:03:07.863425+03:00",
|
||||
"updated_at": "2026-02-03T17:03:07.880923+03:00",
|
||||
"social_accounts": null,
|
||||
"roles": [
|
||||
{
|
||||
"id": 2,
|
||||
"name": "user",
|
||||
"description": "Default user role",
|
||||
"permissions": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "user:read",
|
||||
"description": "Can read user data"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
-- Validate Token (Token Doğrulama)
|
||||
GET
|
||||
http://localhost:8080/v1/auth/validate
|
||||
-- Header
|
||||
Authorization: Bearer ACCESS_TOKEN_BURAYA
|
||||
-- Body: YOK (GET isteği, body gönderilmez)
|
||||
-- Cevap
|
||||
{
|
||||
"email": "beyhano@beyhan.dev",
|
||||
"message": "Token is valid",
|
||||
"user_id": "91cf0868-df24-4b8f-b491-70d9eb7a4373"
|
||||
}
|
||||
## Kurulum ve Çalıştırma
|
||||
|
||||
1. `.env.example` dosyasını `.env` olarak kopyalayın ve değerleri düzenleyin.
|
||||
2. Docker ile veritabanını ve uygulamayı başlatmak için:
|
||||
```bash
|
||||
./scripts/run.sh
|
||||
```
|
||||
_(Bu script Docker konteynerini kontrol eder, yoksa başlatır ve ardından Go sunucusunu çalıştırır)_
|
||||
|
||||
## Geliştirme Notları
|
||||
|
||||
- **Env Değişkenleri:**
|
||||
- `RATE_LIMIT_BLACKLIST_IPS=...`, `RATE_LIMIT_BLACKLIST_DOMAINS=...` ile yasaklama.
|
||||
- `RATE_LIMIT_WHITELIST=...`, `RATE_LIMIT_WHITELIST_DOMAINS=...` ile muafiyet.
|
||||
|
||||
- **Migration Ekleme:** `internal/db/migrations` klasörüne `00000X_description.up.sql` formatında yeni dosya ekleyin.
|
||||
- **Admin Kullanıcısı:** Sistem ilk açılışta `admin@example.com` / `admin123` kullanıcısını otomatik oluşturur.
|
||||
- **Docker Volume:** `/uploads` klasörü `uploads_data` volume'ü ile kalıcı hale getirilmiştir.
|
||||
- **Image Processing:** WebP desteği için Dockerfile `CGO_ENABLED=1` ve `build-base` içerir.
|
||||
Reference in New Issue
Block a user