ProtoTürk, Türkçe soru-cevap platformudur. Bu repository, platformun Go ile yazılmış backend API'sini içerir.
- Go 1.21
- PostgreSQL
- GORM (ORM)
- Gin (Web Framework)
- JWT (Authentication)
- Air (Hot Reload)
Tüm tarih ve zaman işlemleri UTC+0 olarak kaydedilir ve yönetilir:
- Veritabanında tüm timestamp'ler
TIMESTAMP WITH TIME ZONE
tipinde ve UTC+0 olarak saklanır - Tüm zaman işlemleri için
pkg/utils/time.go
içindeki UTC-aware fonksiyonlar kullanılır - GORM model hook'ları (
BeforeCreate
,BeforeUpdate
) ile tüm timestamp'lerin UTC olması garanti edilir - JWT token'ları için expiration time UTC olarak hesaplanır
.
├── cmd/
│ └── api/ # Ana uygulama giriş noktası
├── internal/
│ ├── database/ # Database bağlantısı ve konfigürasyonu
│ ├── handlers/ # HTTP handlers
│ ├── middleware/ # Middleware'ler
│ ├── models/ # Database modelleri
│ └── validator/ # Validasyon kuralları
├── pkg/
│ ├── response/ # Global response yapısı
│ └── errors/ # Global error yapısı
├── migrations/ # Database migrasyonları
└── config/ # Konfigürasyon dosyaları
- PostgreSQL'i yükleyin ve bir veritabanı oluşturun:
createdb prototurk
- Repository'yi klonlayın:
git clone <repo-url>
cd prototurk
- Gerekli Go paketlerini yükleyin:
go mod download
.env
dosyasını oluşturun:
cp .env.example .env
.env
dosyasını düzenleyin:
PORT=8080
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=prototurk
JWT_SECRET=your-secret-key-here
- Uygulamayı başlatın:
go run cmd/api/main.go
Hot reload özelliği için Air kullanabilirsiniz:
- Air'i yükleyin:
go install github.com/air-verse/air@latest
export PATH=$PATH:$(go env GOPATH)/bin
- Uygulamayı Air ile başlatın:
air
- POST
/api/auth/register
{
"username": "test",
"email": "[email protected]",
"password": "123456"
}
- POST
/api/auth/login
{
"identifier": "test", // username veya email
"password": "123456"
}
- GET
/api/auth/me
- Headers:
- Authorization: Bearer
- PUT
/api/auth/profile
- Headers:
- Authorization: Bearer
{
"username": "new_username", // optional
"email": "[email protected]" // optional
}
Not: username
ve email
alanlarından en az birinin gönderilmesi gerekir. İki alan da opsiyoneldir.
- PUT
/api/auth/password
- Headers:
- Authorization: Bearer
{
"current_password": "mevcut123",
"new_password": "yeni123"
}
- POST
/api/admin/login
{
"email": "[email protected]",
"password": "123456"
}
- GET
/api/admin/me
- Headers:
- Authorization: Bearer
- POST
/api/admin
- Headers:
- Authorization: Bearer
{
"email": "[email protected]",
"name": "New Admin",
"password": "123456",
"role": "admin", // super_admin, admin, editor
"status": "active" // active, passive
}
- GET
/api/admin
- Headers:
- Authorization: Bearer
- GET
/api/admin/:id
- Headers:
- Authorization: Bearer
- PUT
/api/admin/:id
- Headers:
- Authorization: Bearer
{
"email": "[email protected]", // optional
"name": "Updated Name", // optional
"password": "newpass", // optional
"role": "editor", // optional
"status": "passive" // optional
}
- DELETE
/api/admin/:id
- Headers:
- Authorization: Bearer
{
"success": true,
"data": {
// response data
}
}
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Error message",
"details": {} // optional
}
}
VALIDATION_ERROR
: İstek validasyonu başarısızSERVER_ERROR
: Sunucu hatasıUNAUTHORIZED
: Yetkilendirme hatasıFORBIDDEN
: Yetki yetersizUSERNAME_EXISTS
: Kullanıcı adı zaten mevcutEMAIL_EXISTS
: Email zaten mevcutINVALID_CREDENTIALS
: Geçersiz kullanıcı adı/email veya şifreUSER_BANNED
: Kullanıcı yasaklanmışUSER_NOT_FOUND
: Kullanıcı bulunamadıACCOUNT_INACTIVE
: Hesap aktif değilNOT_FOUND
: Kayıt bulunamadıINVALID_ROLE
: Geçersiz rolINVALID_STATUS
: Geçersiz durum
active
: Aktif kullanıcıpassive
: Pasif kullanıcıbanned
: Yasaklanmış kullanıcı
- Yeni bir özellik eklerken branch oluşturun:
git checkout -b feature/feature-name
- Kodunuzu yazın ve commit edin:
git add .
git commit -m "feat: add new feature"
- Pull request oluşturun
- Admin paneli için endpoints
- Soru-cevap endpoints
- Kullanıcı profili güncelleme
- Şifre sıfırlama
- Email doğrulama
- Rate limiting
- Cache mekanizması
- Test coverage
- API documentation (Swagger)
- Docker deployment
- CI/CD pipeline