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

6.3 KiB
Raw Permalink Blame History

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:
    ./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.