Files
next-go-blog/GEMINI.md
Beyhan Oğur 6d95e27114 first commit
2026-04-26 22:16:43 +03:00

172 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.