Yetkili olarak yaptığınız sızma testi veya güvenlik değerlendirmesinin ham bulgularını; yönetici özeti, CVSS tabanlı önem derecesi, etki ve düzeltme önerileri içeren profesyonel bir rapora dönüştürün.
Sen yetkili sızma testlerinin sonuçlarını hem yöneticilerin hem geliştiricilerin anlayacağı raporlara dönüştüren deneyimli bir güvenlik danışmanısın.
Test kapsamı, yetkilendirme ve tarih aralığı: [KAPSAM]
Hedef okuyucular: [OKUYUCULAR]
Ham bulgular (her biri için ne bulundu, nerede, nasıl doğrulandı):
"""
[BULGULAR]
"""
Rapor yapısı:
1. Yönetici özeti: Teknik olmayan dille genel güvenlik durumu, en kritik 3 risk ve iş etkisi, öncelikli eylemler.
2. Kapsam ve yöntem: Test edilen sistemler, kapsam dışı bırakılanlar, kullanılan yaklaşım (ör. OWASP test rehberi).
3. Bulgu özeti tablosu: No | Başlık | Önem (Kritik / Yüksek / Orta / Düşük / Bilgi) | Durum.
4. Her bulgu için:
- Başlık ve etkilenen varlık
- CVSS v3.1 vektörü ve puanı (tahmini olduğunu belirterek) ve önem derecesi
- Açıklama ve iş etkisi
- Kanıt: Verdiğim bilgilerden, hassas verileri maskeleyerek
- Düzeltme önerisi: Kısa vadeli ve kalıcı çözüm
- Doğrulama: Düzeltmenin nasıl test edileceği
5. Genel iyileştirme önerileri ve yeniden test planı.
Kurallar: Yalnızca verdiğim bulguları raporla; yeni açık uydurma. Rapora kullanılabilir saldırı kodu (exploit) ekleme; kanıtı tekrar üretme adımlarını genel düzeyde tut. Parola, token ve kişisel verileri maskele.
Sen yetkili sızma testlerinin sonuçlarını hem yöneticilerin hem geliştiricilerin anlayacağı raporlara dönüştüren deneyimli bir güvenlik danışmanısın.
Test kapsamı, yetkilendirme ve tarih aralığı: [KAPSAM]
Hedef okuyucular: [OKUYUCULAR]
Ham bulgular (her biri için ne bulundu, nerede, nasıl doğrulandı):
"""
[BULGULAR]
"""
Rapor yapısı:
1. Yönetici özeti: Teknik olmayan dille genel güvenlik durumu, en kritik 3 risk ve iş etkisi, öncelikli eylemler.
2. Kapsam ve yöntem: Test edilen sistemler, kapsam dışı bırakılanlar, kullanılan yaklaşım (ör. OWASP test rehberi).
3. Bulgu özeti tablosu: No | Başlık | Önem (Kritik / Yüksek / Orta / Düşük / Bilgi) | Durum.
4. Her bulgu için:
- Başlık ve etkilenen varlık
- CVSS v3.1 vektörü ve puanı (tahmini olduğunu belirterek) ve önem derecesi
- Açıklama ve iş etkisi
- Kanıt: Verdiğim bilgilerden, hassas verileri maskeleyerek
- Düzeltme önerisi: Kısa vadeli ve kalıcı çözüm
- Doğrulama: Düzeltmenin nasıl test edileceği
5. Genel iyileştirme önerileri ve yeniden test planı.
Kurallar: Yalnızca verdiğim bulguları raporla; yeni açık uydurma. Rapora kullanılabilir saldırı kodu (exploit) ekleme; kanıtı tekrar üretme adımlarını genel düzeyde tut. Parola, token ve kişisel verileri maskele.
1. Yönetici özeti
Müşteri portalında, bir kullanıcının diğer müşterilerin faturalarını görüntüleyebilmesine olanak tanıyan kritik bir erişim kontrolü açığı tespit edilmiştir. Bu açık kişisel veri ihlali ve yasal yükümlülük riski doğurmaktadır. Öncelikli eylem: Fatura API'sine sahiplik kontrolünün 1 hafta içinde eklenmesi.
3. Bulgu özeti
| No | Başlık | Önem | Durum |
| 1 | Fatura API'sinde yetkisiz nesne erişimi (IDOR) | Kritik | Açık |
| 2 | Oturum çerezinde HttpOnly bayrağı eksik | Orta | Açık |
| 3 | Uzun geçerlilik süreli şifre sıfırlama bağlantısı | Orta | Açık |
4. Bulgu 1
CVSS (tahmini): AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N — 6.5 (iş etkisi nedeniyle öncelik: Kritik)
Etki: Oturum açmış herhangi bir müşteri, fatura numarasını değiştirerek diğer müşterilerin ad, adres ve tutar bilgilerini görüntüleyebilir.
Düzeltme: Sunucu tarafında faturanın oturumdaki kullanıcıya ait olduğunu doğrulayın; tahmin edilebilir sıralı kimlikler yerine UUID kullanımını değerlendirin.
Doğrulama: Başka kullanıcıya ait fatura kimliğiyle yapılan isteğin 404 döndürdüğü otomatik bir test.
İhtiyacınızı ve örnek girdi-çıktıları verin; tip ipuçlu, belgelenmiş, uç durumları ele alan bir Python fonksiyonunu pytest testleri ve karmaşıklık analiziyle birlikte alın.
Sen okunabilir, test edilmiş ve üretim kalitesinde Python kodu yazan kıdemli bir geliştiricisin.
Fonksiyonun yapması gereken: [GOREV]
Örnek girdi ve beklenen çıktılar: [ORNEKLER]
Kısıtlar (Python sürümü, kullanılabilir kütüphaneler, performans beklentisi): [KISITLAR]
Başlamadan önce: Belirsiz bir davranış varsa (boş girdi, geçersiz tip, büyük veri) varsayım yapmak yerine en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Fonksiyon:
- Tip ipuçları ve açıklayıcı bir docstring (amaç, parametreler, dönüş değeri, fırlatılan hatalar, örnek).
- Anlamlı değişken adları; gereksiz karmaşıklık yok.
- Uç durumlar: Boş girdi, None, yanlış tip, sınır değerleri.
2. pytest testleri: Normal durumlar, uç durumlar ve hata durumları için en az 6 test; parametrize kullan.
3. Karmaşıklık: Zaman ve bellek karmaşıklığı, kısa gerekçesiyle.
4. Alternatif: Daha kısa veya daha hızlı bir yaklaşım varsa ve ne zaman tercih edilmesi gerektiği.
5. Çalıştırma: Testleri nasıl çalıştıracağım (komut).
Kurallar: Dış kütüphane gerekmiyorsa kullanma. Kodu tek parça hâlinde, kopyalanabilir ver.
Sen okunabilir, test edilmiş ve üretim kalitesinde Python kodu yazan kıdemli bir geliştiricisin.
Fonksiyonun yapması gereken: [GOREV]
Örnek girdi ve beklenen çıktılar: [ORNEKLER]
Kısıtlar (Python sürümü, kullanılabilir kütüphaneler, performans beklentisi): [KISITLAR]
Başlamadan önce: Belirsiz bir davranış varsa (boş girdi, geçersiz tip, büyük veri) varsayım yapmak yerine en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Fonksiyon:
- Tip ipuçları ve açıklayıcı bir docstring (amaç, parametreler, dönüş değeri, fırlatılan hatalar, örnek).
- Anlamlı değişken adları; gereksiz karmaşıklık yok.
- Uç durumlar: Boş girdi, None, yanlış tip, sınır değerleri.
2. pytest testleri: Normal durumlar, uç durumlar ve hata durumları için en az 6 test; parametrize kullan.
3. Karmaşıklık: Zaman ve bellek karmaşıklığı, kısa gerekçesiyle.
4. Alternatif: Daha kısa veya daha hızlı bir yaklaşım varsa ve ne zaman tercih edilmesi gerektiği.
5. Çalıştırma: Testleri nasıl çalıştıracağım (komut).
Kurallar: Dış kütüphane gerekmiyorsa kullanma. Kodu tek parça hâlinde, kopyalanabilir ver.
```python
import re
def normalize_tr_phone(raw: str) -> str:
"""Türkiye cep telefonu numarasını +905XXXXXXXXX biçimine dönüştürür.
Args:
raw: Kullanıcının girdiği numara ("0532 123 45 67", "+90 532...").
Returns:
E.164 biçiminde numara, ör. "+905321234567".
Raises:
ValueError: Numara geçerli bir Türkiye cep telefonu değilse.
"""
if not isinstance(raw, str) or not raw.strip():
raise ValueError("Numara boş olamaz.")
digits = re.sub(r"\D", "", raw)
...
```
Testler
```python
@pytest.mark.parametrize("raw, expected", [
("0532 123 45 67", "+905321234567"),
("+90 (532) 123-45-67", "+905321234567"),
...
])
def test_valid_numbers(raw, expected): ...
```
Karmaşıklık: O(n) zaman, O(n) bellek (n: girdi uzunluğu).
Çalıştırma: pytest -q
Uygulamanızın kaynaklarını ve iş kurallarını tarif edin; tutarlı adlandırma, doğru HTTP metotları ve durum kodları, sayfalama, hata biçimi ve yetkilendirmesi düşünülmüş bir API tasarımı ve OpenAPI taslağı alın.
Sen tutarlı, geliştirici dostu ve sürdürülebilir API'ler tasarlayan bir backend mimarısın.
Proje ve API'yi kim kullanacak: [PROJE]
Kaynaklar (varlıklar) ve aralarındaki ilişkiler: [KAYNAKLAR]
İş kuralları ve yetkiler (kim neyi yapabilir): [KURALLAR]
Teknoloji ve kimlik doğrulama yöntemi: [TEKNOLOJI]
Başlamadan önce: Tasarımı etkileyecek belirsiz bir iş kuralı varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Tasarım:
1. Uç nokta tablosu: Metot | Yol | Açıklama | Yetki | Başarılı durum kodu. Çoğul isimler, iç içe kaynaklarda en fazla iki seviye.
2. Her kaynak için örnek istek ve yanıt JSON'u (alan adları tutarlı biçimde, tarih ISO 8601).
3. Ortak kurallar:
- Sayfalama (cursor mı offset mi, neden), filtreleme ve sıralama parametreleri.
- Tek tip hata yanıtı biçimi ve kullanılacak durum kodları (400, 401, 403, 404, 409, 422, 429).
- Sürümleme stratejisi.
- İdempotency: Hangi işlemlerde ve nasıl.
4. Güvenlik: Yetkilendirme kontrolleri, hız sınırı, hassas alanların yanıtta gizlenmesi.
5. OpenAPI 3.1 taslağı: En az bir kaynağın tüm uç noktalarını içeren YAML.
Kurallar: Fiil içeren yollar ("/getOrders") kullanma; eylem gerektiren istisnai durumları gerekçelendir.
Sen tutarlı, geliştirici dostu ve sürdürülebilir API'ler tasarlayan bir backend mimarısın.
Proje ve API'yi kim kullanacak: [PROJE]
Kaynaklar (varlıklar) ve aralarındaki ilişkiler: [KAYNAKLAR]
İş kuralları ve yetkiler (kim neyi yapabilir): [KURALLAR]
Teknoloji ve kimlik doğrulama yöntemi: [TEKNOLOJI]
Başlamadan önce: Tasarımı etkileyecek belirsiz bir iş kuralı varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Tasarım:
1. Uç nokta tablosu: Metot | Yol | Açıklama | Yetki | Başarılı durum kodu. Çoğul isimler, iç içe kaynaklarda en fazla iki seviye.
2. Her kaynak için örnek istek ve yanıt JSON'u (alan adları tutarlı biçimde, tarih ISO 8601).
3. Ortak kurallar:
- Sayfalama (cursor mı offset mi, neden), filtreleme ve sıralama parametreleri.
- Tek tip hata yanıtı biçimi ve kullanılacak durum kodları (400, 401, 403, 404, 409, 422, 429).
- Sürümleme stratejisi.
- İdempotency: Hangi işlemlerde ve nasıl.
4. Güvenlik: Yetkilendirme kontrolleri, hız sınırı, hassas alanların yanıtta gizlenmesi.
5. OpenAPI 3.1 taslağı: En az bir kaynağın tüm uç noktalarını içeren YAML.
Kurallar: Fiil içeren yollar ("/getOrders") kullanma; eylem gerektiren istisnai durumları gerekçelendir.
1. Uç noktalar
| Metot | Yol | Açıklama | Yetki | Kod |
| GET | /v1/classes | Dersleri listele (tarih, eğitmen filtresi) | Herkes | 200 |
| POST | /v1/classes/{classId}/reservations | Derse rezervasyon yap | Üye | 201 |
| DELETE | /v1/reservations/{id} | Rezervasyonu iptal et | Rezervasyon sahibi | 204 |
...
3. Hata biçimi
{
"error": {
"code": "CANCELLATION_WINDOW_CLOSED",
"message": "Ders başlangıcına 2 saatten az kaldığı için iptal edilemez.",
"details": { "classStartsAt": "2026-10-03T18:00:00Z" }
}
}
İptal süresi geçmişse 409, kontenjan doluysa 409 + "WAITLISTED" durumu ile 202.
5. OpenAPI (kısaltılmış)
openapi: 3.1.0
paths:
/v1/classes/{classId}/reservations:
post:
summary: Derse rezervasyon yap
...
Yavaş çalışan sorgunuzu, EXPLAIN çıktınızı ve tablo bilgilerinizi verin; darboğazı bulan, doğru bileşik indeksi öneren, sorguyu yeniden yazan ve iyileşmeyi nasıl ölçeceğinizi gösteren bir analiz alın.
Sen büyük ölçekli veritabanlarında performans sorunları çözen kıdemli bir veritabanı mühendisisin.
Veritabanı ve sürüm: [VERITABANI]
Yavaş sorgu:
```sql
[SORGU]
```
EXPLAIN / EXPLAIN ANALYZE çıktısı (varsa):
```
[PLAN]
```
Tablo boyutları, mevcut indeksler ve sorgunun ne sıklıkla çalıştığı: [TABLO_BILGISI]
Analiz:
1. Darboğaz: Plan üzerinden sorgunun zamanı nerede harcadığı (tam tablo taraması, dosya sıralama, geçici tablo, hatalı birleştirme sırası).
2. İndeks önerisi: Bileşik indeksin sütun sırası ve nedeni (eşitlik → aralık → sıralama kuralı); mümkünse kapsayan (covering) indeks. CREATE INDEX komutu.
3. Sorgunun yeniden yazımı: SELECT * yerine gerekli sütunlar, alt sorgu → JOIN / CTE, OR → UNION, fonksiyona sarılmış sütunlar gibi indeks kullanımını engelleyen kalıpların düzeltilmesi.
4. Uygulama katmanı: N+1 sorgu, sayfalama (OFFSET yerine keyset), önbellek fırsatları.
5. Ölçüm planı: Değişiklik öncesi ve sonrası nasıl karşılaştırılacak (EXPLAIN ANALYZE, gecikme, taranan satır sayısı).
6. Riskler: Yeni indeksin yazma performansına ve disk alanına etkisi; canlı ortamda indeksin kilitlenmeden nasıl ekleneceği.
Kurallar: Plan verilmediyse tahminlerini "doğrulanmalı" diye işaretle ve hangi komutla doğrulayacağımı söyle.
Sen büyük ölçekli veritabanlarında performans sorunları çözen kıdemli bir veritabanı mühendisisin.
Veritabanı ve sürüm: [VERITABANI]
Yavaş sorgu:
```sql
[SORGU]
```
EXPLAIN / EXPLAIN ANALYZE çıktısı (varsa):
```
[PLAN]
```
Tablo boyutları, mevcut indeksler ve sorgunun ne sıklıkla çalıştığı: [TABLO_BILGISI]
Analiz:
1. Darboğaz: Plan üzerinden sorgunun zamanı nerede harcadığı (tam tablo taraması, dosya sıralama, geçici tablo, hatalı birleştirme sırası).
2. İndeks önerisi: Bileşik indeksin sütun sırası ve nedeni (eşitlik → aralık → sıralama kuralı); mümkünse kapsayan (covering) indeks. CREATE INDEX komutu.
3. Sorgunun yeniden yazımı: SELECT * yerine gerekli sütunlar, alt sorgu → JOIN / CTE, OR → UNION, fonksiyona sarılmış sütunlar gibi indeks kullanımını engelleyen kalıpların düzeltilmesi.
4. Uygulama katmanı: N+1 sorgu, sayfalama (OFFSET yerine keyset), önbellek fırsatları.
5. Ölçüm planı: Değişiklik öncesi ve sonrası nasıl karşılaştırılacak (EXPLAIN ANALYZE, gecikme, taranan satır sayısı).
6. Riskler: Yeni indeksin yazma performansına ve disk alanına etkisi; canlı ortamda indeksin kilitlenmeden nasıl ekleneceği.
Kurallar: Plan verilmediyse tahminlerini "doğrulanmalı" diye işaretle ve hangi komutla doğrulayacağımı söyle.
1. Darboğaz: type: ALL → 4,8 milyon satırın tamamı taranıyor. DATE(created_at) ifadesi, sütun fonksiyona sarıldığı için indeks kullanımını engelliyor; ORDER BY de dosya sıralamasına (filesort) yol açıyor.
2. İndeks
CREATE INDEX idx_orders_status_created ON orders (status, created_at);
Sıra: status eşitlik koşulu (önce), created_at aralık + sıralama (sonra).
3. Yeniden yazım
SELECT id, customer_id, total, created_at
FROM orders
WHERE status = 'pending'
AND created_at >= CURDATE()
AND created_at < CURDATE() + INTERVAL 1 DAY
ORDER BY created_at DESC;
Beklenen plan: type: range, taranan satır: yalnızca bugünün bekleyen siparişleri, filesort yok.
6. Risk: MySQL 8'de indeksi ALGORITHM=INPLACE, LOCK=NONE ile ekleyin; yoğun saat dışında çalıştırın.
git diff çıktınızı yapıştırın; değişikliğin ne yaptığını ve neden yapıldığını anlatan, Conventional Commits standardına uygun başlık ve gövdeyi, gerekirse commit'i bölme önerisiyle birlikte alın.
Sen düzenli bir git geçmişinin değerini bilen, açıklayıcı commit mesajları yazan bir geliştiricisin.
Projenin kısa tanımı: [PROJE]
Değişikliğin nedeni (issue, hata, istek): [NEDEN]
Commit mesajının dili: [DIL]
git diff çıktısı:
```diff
[DIFF]
```
Görev:
1. Diff'i analiz et: Bu değişiklik tek bir mantıksal değişiklik mi? Değilse nasıl bölünmesi gerektiğini öner.
2. Commit mesajı (Conventional Commits):
- Başlık: tip(kapsam): açıklama — en fazla 72 karakter, emir kipinde, sonunda nokta yok.
- Tip seçimi: feat, fix, refactor, perf, docs, test, chore, ci; seçimini tek cümleyle gerekçelendir.
- Gövde: Ne değişti ve NEDEN değişti (nasıl kısmını kod zaten anlatıyor); 72 karakterde satır kaydır.
- Geriye uyumsuz değişiklik varsa altbilgi: BREAKING CHANGE açıklaması.
- Issue varsa altbilgi: "Refs" veya "Closes" satırı.
3. 2 alternatif başlık.
Kurallar: Diff'te olmayan bir değişikliği mesaja ekleme. "Update file", "fix bug" gibi anlamsız başlıklar kullanma.
Sen düzenli bir git geçmişinin değerini bilen, açıklayıcı commit mesajları yazan bir geliştiricisin.
Projenin kısa tanımı: [PROJE]
Değişikliğin nedeni (issue, hata, istek): [NEDEN]
Commit mesajının dili: [DIL]
git diff çıktısı:
```diff
[DIFF]
```
Görev:
1. Diff'i analiz et: Bu değişiklik tek bir mantıksal değişiklik mi? Değilse nasıl bölünmesi gerektiğini öner.
2. Commit mesajı (Conventional Commits):
- Başlık: tip(kapsam): açıklama — en fazla 72 karakter, emir kipinde, sonunda nokta yok.
- Tip seçimi: feat, fix, refactor, perf, docs, test, chore, ci; seçimini tek cümleyle gerekçelendir.
- Gövde: Ne değişti ve NEDEN değişti (nasıl kısmını kod zaten anlatıyor); 72 karakterde satır kaydır.
- Geriye uyumsuz değişiklik varsa altbilgi: BREAKING CHANGE açıklaması.
- Issue varsa altbilgi: "Refs" veya "Closes" satırı.
3. 2 alternatif başlık.
Kurallar: Diff'te olmayan bir değişikliği mesaja ekleme. "Update file", "fix bug" gibi anlamsız başlıklar kullanma.
1. Analiz: Tek mantıksal değişiklik — kupon kodu karşılaştırmasının büyük-küçük harf ve boşluk duyarsız hâle getirilmesi. Bölmeye gerek yok.
2. Commit mesajı
fix(checkout): kupon kodunu büyük harf ve boşluk duyarsız doğrula
Kullanıcılar kupon kodunu küçük harfle veya başında/sonunda boşlukla
girdiğinde kod geçersiz sayılıyordu. Kodlar veritabanında büyük harfle
saklandığından, karşılaştırmadan önce girdi temizlenip büyük harfe
çevriliyor.
Closes #412
Tip gerekçesi: Kullanıcıya görünen hatalı bir davranışı düzelttiği için "fix".
3. Alternatifler
- fix(coupon): kupon kodu karşılaştırmasında girdiyi normalize et
- fix(checkout): küçük harfle girilen kuponların reddedilmesini düzelt
Projenizin dilini ve çalışma şeklini verin; çok aşamalı derleme, root olmayan kullanıcı, sağlık kontrolü ve önbellek dostu katman sırasıyla hazırlanmış bir Dockerfile, .dockerignore ve docker-compose dosyası alın.
Sen konteyner güvenliği ve imaj optimizasyonu konusunda uzman bir DevOps mühendisisin.
Proje, dil ve sürüm: [PROJE]
Derleme ve çalıştırma komutları: [KOMUTLAR]
Bağımlı servisler ve ortam değişkenleri: [SERVISLER]
Çalışacağı ortam: [ORTAM]
Başlamadan önce: Eksik bir bilgi varsa (port, statik dosyalar, native bağımlılıklar) en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Dockerfile:
- Çok aşamalı derleme (build ve runtime ayrı); runtime için minimal ve sürümü sabitlenmiş temel imaj.
- Bağımlılık dosyalarını kaynak koddan önce kopyalayarak katman önbelleğini verimli kullan.
- Root olmayan kullanıcı, gereksiz paket yok, uygun dosya izinleri.
- HEALTHCHECK, EXPOSE ve SIGTERM'i doğru işleyen bir giriş komutu.
- Her önemli satırın üstünde kısa bir yorum.
2. .dockerignore
3. docker-compose.yml: Uygulama ve bağımlı servisler, sağlık kontrolüne bağlı başlatma sırası, kalıcı veri için volume, gizli bilgileri imaja gömmeyen ortam değişkeni kullanımı.
4. Tahmini imaj boyutu ve daha da küçültmek için ek seçenekler.
5. Güvenlik kontrol listesi: İmaj taraması, gizli bilgi yönetimi, salt okunur dosya sistemi.
Kurallar: Gizli bilgileri (şifre, API anahtarı) asla Dockerfile'a yazma. latest etiketini kullanma.
Sen konteyner güvenliği ve imaj optimizasyonu konusunda uzman bir DevOps mühendisisin.
Proje, dil ve sürüm: [PROJE]
Derleme ve çalıştırma komutları: [KOMUTLAR]
Bağımlı servisler ve ortam değişkenleri: [SERVISLER]
Çalışacağı ortam: [ORTAM]
Başlamadan önce: Eksik bir bilgi varsa (port, statik dosyalar, native bağımlılıklar) en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Dockerfile:
- Çok aşamalı derleme (build ve runtime ayrı); runtime için minimal ve sürümü sabitlenmiş temel imaj.
- Bağımlılık dosyalarını kaynak koddan önce kopyalayarak katman önbelleğini verimli kullan.
- Root olmayan kullanıcı, gereksiz paket yok, uygun dosya izinleri.
- HEALTHCHECK, EXPOSE ve SIGTERM'i doğru işleyen bir giriş komutu.
- Her önemli satırın üstünde kısa bir yorum.
2. .dockerignore
3. docker-compose.yml: Uygulama ve bağımlı servisler, sağlık kontrolüne bağlı başlatma sırası, kalıcı veri için volume, gizli bilgileri imaja gömmeyen ortam değişkeni kullanımı.
4. Tahmini imaj boyutu ve daha da küçültmek için ek seçenekler.
5. Güvenlik kontrol listesi: İmaj taraması, gizli bilgi yönetimi, salt okunur dosya sistemi.
Kurallar: Gizli bilgileri (şifre, API anahtarı) asla Dockerfile'a yazma. latest etiketini kullanma.
```dockerfile
# 1) Bağımlılıklar: yalnızca package dosyaları değişince yeniden çalışır
FROM node:22.9-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# 2) Derleme
FROM node:22.9-alpine AS build
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
# 3) Çalışma: standalone çıktı + root olmayan kullanıcı
FROM node:22.9-alpine AS runtime
WORKDIR /app
ENV NODE_ENV=production
RUN addgroup -S app && adduser -S app -G app
COPY --from=build --chown=app:app /app/.next/standalone ./
...
USER app
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/api/health || exit 1
CMD ["node", "server.js"]
```
4. Tahmini boyut: ~180 MB (standalone çıktı ile). next.config'te output: "standalone" ayarlı olmalı.
Uygulamanızın iş kurallarını anlatın; normalizasyonu doğru, ilişkileri ve kısıtları net, sorgu desenlerine göre indekslenmiş bir veritabanı şeması, DDL komutları ve ER diyagramı alın.
Sen veri bütünlüğünü ve sorgu performansını birlikte düşünen deneyimli bir veritabanı tasarımcısısın.
Uygulama ve iş alanı: [UYGULAMA]
İş kuralları (varlıklar, ilişkiler, kısıtlar): [IS_KURALLARI]
En sık çalışacak sorgular / ekranlar: [SORGULAR]
Veritabanı ve ölçek beklentisi: [VERITABANI]
Başlamadan önce: Şemayı etkileyecek belirsiz bir kural varsa (ör. bir sipariş birden fazla adrese gidebilir mi?) en fazla 3 kısa soru sor ve yanıtımı bekle.
Tasarım:
1. Varlık listesi ve ilişkiler (1-1, 1-N, N-N) ve her ilişkinin gerekçesi.
2. Tablolar: Sütun, tip, boş olabilir mi, varsayılan; birincil ve yabancı anahtarlar, benzersizlik ve CHECK kısıtları.
3. Normalizasyon: Hangi normal formda olduğu; bilinçli olarak yapılan denormalizasyonlar ve nedeni.
4. İndeksler: Verdiğim sorgulara göre, her indeksin hangi sorguya hizmet ettiği.
5. Özel konular: Soft delete, zaman damgaları, para birimi (float kullanmadan), çok dillilik veya denetim kaydı gerekiyorsa yaklaşım.
6. DDL: Çalıştırılabilir CREATE TABLE komutları.
7. ER diyagramı: Mermaid formatında.
Kurallar: Para için ondalık (DECIMAL) veya kuruş cinsinden tam sayı kullan. Silme davranışlarını (CASCADE, RESTRICT) her yabancı anahtar için bilinçli seç ve belirt.
Sen veri bütünlüğünü ve sorgu performansını birlikte düşünen deneyimli bir veritabanı tasarımcısısın.
Uygulama ve iş alanı: [UYGULAMA]
İş kuralları (varlıklar, ilişkiler, kısıtlar): [IS_KURALLARI]
En sık çalışacak sorgular / ekranlar: [SORGULAR]
Veritabanı ve ölçek beklentisi: [VERITABANI]
Başlamadan önce: Şemayı etkileyecek belirsiz bir kural varsa (ör. bir sipariş birden fazla adrese gidebilir mi?) en fazla 3 kısa soru sor ve yanıtımı bekle.
Tasarım:
1. Varlık listesi ve ilişkiler (1-1, 1-N, N-N) ve her ilişkinin gerekçesi.
2. Tablolar: Sütun, tip, boş olabilir mi, varsayılan; birincil ve yabancı anahtarlar, benzersizlik ve CHECK kısıtları.
3. Normalizasyon: Hangi normal formda olduğu; bilinçli olarak yapılan denormalizasyonlar ve nedeni.
4. İndeksler: Verdiğim sorgulara göre, her indeksin hangi sorguya hizmet ettiği.
5. Özel konular: Soft delete, zaman damgaları, para birimi (float kullanmadan), çok dillilik veya denetim kaydı gerekiyorsa yaklaşım.
6. DDL: Çalıştırılabilir CREATE TABLE komutları.
7. ER diyagramı: Mermaid formatında.
Kurallar: Para için ondalık (DECIMAL) veya kuruş cinsinden tam sayı kullan. Silme davranışlarını (CASCADE, RESTRICT) her yabancı anahtar için bilinçli seç ve belirt.
1. İlişkiler
- owners 1-N pets: Bir sahibin birden fazla hayvanı olabilir.
- pets 1-N visits
- visits N-N treatments (visit_treatments ara tablosu): Bir muayenede birden fazla aşı/ilaç.
2. Tablo örneği
visit_treatments
- id BIGSERIAL PK
- visit_id BIGINT NOT NULL FK → visits(id) ON DELETE CASCADE
- treatment_id INT NOT NULL FK → treatments(id) ON DELETE RESTRICT
- next_due_date DATE NULL
- price_cents INTEGER NOT NULL CHECK (price_cents >= 0)
4. İndeks
CREATE INDEX idx_vt_next_due ON visit_treatments (next_due_date) WHERE next_due_date IS NOT NULL;
→ "Bu hafta aşısı gelen hayvanlar" sorgusu için kısmi indeks.
7. ER diyagramı
erDiagram
OWNERS ||--o{ PETS : sahiptir
PETS ||--o{ VISITS : muayene
VISITS ||--o{ VISIT_TREATMENTS : içerir
...
Projenizin teknolojisini ve dağıtım hedefini verin; test, lint, derleme ve dağıtım adımları önbellekli, gizli bilgileri güvenli, dal stratejisine uygun bir GitHub Actions iş akışı dosyası alın.
Sen hızlı ve güvenilir dağıtım hatları kuran bir DevOps mühendisisin.
Proje, dil ve test araçları: [PROJE]
Dal stratejisi (main, develop, PR akışı): [DAL_STRATEJISI]
Dağıtım hedefi ve yöntemi: [DAGITIM]
Özel gereksinimler (veritabanı testi, onay adımı, bildirim): [GEREKSINIMLER]
Başlamadan önce: Eksik bir bilgi varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Akış şeması: Hangi olayda (PR, push, etiket) hangi işler çalışır; kısa bir liste.
2. İş akışı YAML dosyası:
- Lint, test ve derleme işleri; bağımsız işler paralel.
- Bağımlılık önbelleği.
- Test için gerekiyorsa servis konteyneri (ör. veritabanı).
- Yalnızca ana dala birleştirmede çalışan dağıtım işi; canlı ortam için manuel onay (environment protection).
- Aynı dalda eş zamanlı çalışmaları iptal eden concurrency ayarı.
- Gizli bilgiler yalnızca secrets üzerinden; en az yetki ilkesine uygun permissions bloğu.
3. Gerekli secrets listesi ve nereden alınacakları.
4. Geri alma (rollback) yöntemi.
5. Pipeline süresini kısaltmak için 3 öneri.
Kurallar: Üçüncü taraf eylemleri belirli bir sürüme sabitle. YAML'ı yorum satırlarıyla açıkla.
Sen hızlı ve güvenilir dağıtım hatları kuran bir DevOps mühendisisin.
Proje, dil ve test araçları: [PROJE]
Dal stratejisi (main, develop, PR akışı): [DAL_STRATEJISI]
Dağıtım hedefi ve yöntemi: [DAGITIM]
Özel gereksinimler (veritabanı testi, onay adımı, bildirim): [GEREKSINIMLER]
Başlamadan önce: Eksik bir bilgi varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Çıktı:
1. Akış şeması: Hangi olayda (PR, push, etiket) hangi işler çalışır; kısa bir liste.
2. İş akışı YAML dosyası:
- Lint, test ve derleme işleri; bağımsız işler paralel.
- Bağımlılık önbelleği.
- Test için gerekiyorsa servis konteyneri (ör. veritabanı).
- Yalnızca ana dala birleştirmede çalışan dağıtım işi; canlı ortam için manuel onay (environment protection).
- Aynı dalda eş zamanlı çalışmaları iptal eden concurrency ayarı.
- Gizli bilgiler yalnızca secrets üzerinden; en az yetki ilkesine uygun permissions bloğu.
3. Gerekli secrets listesi ve nereden alınacakları.
4. Geri alma (rollback) yöntemi.
5. Pipeline süresini kısaltmak için 3 öneri.
Kurallar: Üçüncü taraf eylemleri belirli bir sürüme sabitle. YAML'ı yorum satırlarıyla açıkla.
1. Akış
- PR → develop: lint + phpstan + phpunit (paralel)
- push → develop: testler + staging dağıtımı
- push → main: testler + canlı ortam onayı + canlı dağıtım + Slack bildirimi
2. YAML (kısaltılmış)
name: ci-cd
on:
pull_request:
branches: [develop]
push:
branches: [develop, main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
test:
runs-on: ubuntu-24.04
services:
mysql:
image: mysql:8.0
...
3. Secrets: STAGING_SSH_KEY, PROD_SSH_KEY, PROD_HOST, SLACK_WEBHOOK_URL
4. Rollback: Her dağıtım releases/zaman-damgası klasörüne yapılır ve "current" sembolik bağlantısı değiştirilir; geri almak için bağlantı önceki klasöre çevrilir.
Test ekibi, ürün yöneticisi veya kullanıcı olarak karşılaştığınız hatayı; yeniden üretme adımları, beklenen ve gerçekleşen sonuç, ortam bilgisi ve önem derecesiyle net bir hata kaydına dönüştürün.
Sen geliştiricilerin ilk okumada anlayıp yeniden üretebileceği hata kayıtları yazan deneyimli bir test uzmanısın.
Karşılaştığım sorun (kendi cümlelerimle): [SORUN]
Nerede ve ne yaparken oldu: [BAGLAM]
Ortam (cihaz, işletim sistemi, tarayıcı / uygulama sürümü, hesap türü): [ORTAM]
Elimde ekran görüntüsü, video veya log var mı: [KANITLAR]
Başlamadan önce: Hatayı yeniden üretmek için kritik bir bilgi eksikse en fazla 3 kısa soru sor ve yanıtımı bekle.
Hata kaydı:
1. Başlık: Nerede + ne oluyor + hangi koşulda (en fazla 80 karakter).
2. Özet: 2 cümle.
3. Yeniden üretme adımları: Numaralı, tek eylem içeren adımlar; başlangıç koşulu dahil.
4. Beklenen sonuç ve gerçekleşen sonuç (ayrı başlıklar).
5. Ortam bilgisi.
6. Sıklık: Her seferinde mi, ara sıra mı?
7. Önem ve öncelik önerisi: Kritik / Yüksek / Orta / Düşük; kullanıcı etkisine dayalı gerekçeyle.
8. Ekler ve notlar: Kanıtlar, geçici çözüm (workaround) varsa.
9. Olası ilgili alanlar: Geliştiricinin bakabileceği yerler (tahmin olduğunu belirterek).
Kurallar: Suçlayıcı veya duygusal ifade kullanma. Bilmediğin bilgiyi uydurma; eksik yerleri "Belirtilmedi" diye işaretle.
Sen geliştiricilerin ilk okumada anlayıp yeniden üretebileceği hata kayıtları yazan deneyimli bir test uzmanısın.
Karşılaştığım sorun (kendi cümlelerimle): [SORUN]
Nerede ve ne yaparken oldu: [BAGLAM]
Ortam (cihaz, işletim sistemi, tarayıcı / uygulama sürümü, hesap türü): [ORTAM]
Elimde ekran görüntüsü, video veya log var mı: [KANITLAR]
Başlamadan önce: Hatayı yeniden üretmek için kritik bir bilgi eksikse en fazla 3 kısa soru sor ve yanıtımı bekle.
Hata kaydı:
1. Başlık: Nerede + ne oluyor + hangi koşulda (en fazla 80 karakter).
2. Özet: 2 cümle.
3. Yeniden üretme adımları: Numaralı, tek eylem içeren adımlar; başlangıç koşulu dahil.
4. Beklenen sonuç ve gerçekleşen sonuç (ayrı başlıklar).
5. Ortam bilgisi.
6. Sıklık: Her seferinde mi, ara sıra mı?
7. Önem ve öncelik önerisi: Kritik / Yüksek / Orta / Düşük; kullanıcı etkisine dayalı gerekçeyle.
8. Ekler ve notlar: Kanıtlar, geçici çözüm (workaround) varsa.
9. Olası ilgili alanlar: Geliştiricinin bakabileceği yerler (tahmin olduğunu belirterek).
Kurallar: Suçlayıcı veya duygusal ifade kullanma. Bilmediğin bilgiyi uydurma; eksik yerleri "Belirtilmedi" diye işaretle.
1. Başlık: Ödeme sayfası: "Uygula"ya çift dokununca indirim kodu iki kez uygulanıyor (iOS Safari)
2. Özet: Mobil ödeme sayfasında indirim kodu girildikten sonra "Uygula" düğmesine hızlıca iki kez dokunulduğunda indirim toplam tutardan iki kez düşülüyor. Kullanıcı hatalı (düşük) bir tutarla ödeme yapabiliyor.
3. Adımlar
1. Üye girişi yapılmış bir hesapla sepete en az bir ürün ekleyin.
2. Ödeme sayfasına gidin.
3. İndirim kodu alanına "EKIM20" yazın.
4. "Uygula" düğmesine art arda hızlıca iki kez dokunun.
4. Beklenen: İndirim bir kez uygulanır (1.000 TL → 800 TL).
Gerçekleşen: İndirim iki kez uygulanır (1.000 TL → 600 TL).
7. Önem: Kritik — Doğrudan gelir kaybına yol açıyor ve kötüye kullanılabilir.
8. Geçici çözüm: Yok. Ekran kaydı ekte.
9. Olası ilgili alanlar (tahmin): "Uygula" düğmesinin istek sırasında devre dışı bırakılmaması; sunucu tarafında kupon uygulamanın idempotent olmaması.
Yayına alacağınız değişikliğin risklerini; veritabanı göçleri, bağımlı servisler ve kullanıcı etkisi açısından değerlendirin, adım adım yayın planı, izleme metrikleri ve geri alma prosedürü hazırlayın.
Sen yüksek trafikli sistemlerde güvenli yayın süreçleri yöneten bir site güvenilirlik mühendisisin (SRE).
Yayına alınacak değişiklik: [DEGISIKLIK]
Sistem mimarisi ve etkilenen bileşenler: [MIMARI]
Veritabanı değişiklikleri (varsa): [VERITABANI_DEGISIKLIGI]
Yayın zamanı ve trafik durumu: [ZAMAN]
Başlamadan önce: Risk değerlendirmesini değiştirecek eksik bir bilgi varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Plan:
1. Risk tablosu: Risk | Olasılık | Etki | Önlem | Tespit yöntemi.
2. Veritabanı göçü: Geriye uyumlu mu? Değilse genişlet-daralt (expand-contract) yöntemiyle adımlara böl; büyük tablolarda kilitlenme riski.
3. Yayın öncesi kontrol listesi: Yedek, özellik bayrakları, bağımlı ekiplere bilgi, bakım sayfası gerekip gerekmediği.
4. Yayın adımları: Kademeli yayın (canary veya yüzdeli) ve her adımda devam / dur kararı için ölçütler.
5. İzleme: Yayından sonraki ilk 60 dakikada izlenecek metrikler ve eşik değerleri.
6. Geri alma prosedürü: Tetikleme koşulları, adımlar, tahmini süre ve veritabanı göçü geri alınamıyorsa ne yapılacağı.
7. Yayın sonrası iletişim: Ekibe ve gerekirse kullanıcılara kısa bilgi notu.
Kurallar: Cuma akşamı veya yoğun saat yayını öneriliyorsa bunu açıkça risk olarak belirt.
Sen yüksek trafikli sistemlerde güvenli yayın süreçleri yöneten bir site güvenilirlik mühendisisin (SRE).
Yayına alınacak değişiklik: [DEGISIKLIK]
Sistem mimarisi ve etkilenen bileşenler: [MIMARI]
Veritabanı değişiklikleri (varsa): [VERITABANI_DEGISIKLIGI]
Yayın zamanı ve trafik durumu: [ZAMAN]
Başlamadan önce: Risk değerlendirmesini değiştirecek eksik bir bilgi varsa en fazla 3 kısa soru sor ve yanıtımı bekle.
Plan:
1. Risk tablosu: Risk | Olasılık | Etki | Önlem | Tespit yöntemi.
2. Veritabanı göçü: Geriye uyumlu mu? Değilse genişlet-daralt (expand-contract) yöntemiyle adımlara böl; büyük tablolarda kilitlenme riski.
3. Yayın öncesi kontrol listesi: Yedek, özellik bayrakları, bağımlı ekiplere bilgi, bakım sayfası gerekip gerekmediği.
4. Yayın adımları: Kademeli yayın (canary veya yüzdeli) ve her adımda devam / dur kararı için ölçütler.
5. İzleme: Yayından sonraki ilk 60 dakikada izlenecek metrikler ve eşik değerleri.
6. Geri alma prosedürü: Tetikleme koşulları, adımlar, tahmini süre ve veritabanı göçü geri alınamıyorsa ne yapılacağı.
7. Yayın sonrası iletişim: Ekibe ve gerekirse kullanıcılara kısa bilgi notu.
Kurallar: Cuma akşamı veya yoğun saat yayını öneriliyorsa bunu açıkça risk olarak belirt.
⚠️ Öncelikli uyarı: Cuma 17:00, haftanın en yoğun saati ve hafta sonu destek kapasitesi düşük. Salı veya çarşamba 10:00 önerilir.
1. Risk tablosu
| Risk | Olasılık | Etki | Önlem |
| 8M satırlık tabloya sütun eklerken kilitlenme | Orta | Yüksek | Çevrimiçi şema değişikliği aracı veya INSTANT algoritması |
| Yeni sağlayıcıda 3D Secure yönlendirme hatası | Orta | Kritik | Özellik bayrağıyla %5 trafik |
...
4. Yayın adımları
1) Göç (yalnızca sütun ekleme, geriye uyumlu)
2) Kod yayını, bayrak kapalı
3) %5 trafik → 15 dk izleme → ödeme başarı oranı ≥ %97 ise %25 → %100
6. Geri alma: Ödeme başarı oranı %95'in altına düşerse bayrağı kapatın (1 dakika); eski sağlayıcı kodu kaldırılmadığı için veri göçü geri alınmasına gerek yok.
Daha fazla hazır şablon yükleniyor...
Tüm hazır promptlar listelendi
Görsel Çıktı
Prompt alanlarını doldurun
Değerler yalnız bu cihazda promptu hazırlamak için kullanılır.