1) Çalıştırma Ön Koşulları#
| Gereksinim | Detay | Kanıt |
|---|
| Node.js | Frontend ve backend Node tabanlı | englishcamplanding/package.json, englishcampbackend/package.json |
| MongoDB | Backend Mongoose ile bağlanır | englishcampbackend/src/database/database.module.ts |
| SMTP | OTP/contact/material mail akışı için gerekli | englishcampbackend/src/common/modules/email.module.ts |
| Cloudflare R2 | Dosya upload için gerekli | englishcampbackend/src/storage/storage.service.ts |
2) Local Development#
2.1 Backend#
Varsayılan port: 3000 (PORT yoksa)
Swagger: http://localhost:3000/api/docs
Swagger JSON: http://localhost:3000/swagger/json
Kanıt: englishcampbackend/src/main.ts2.2 Frontend#
API base URL: NEXT_PUBLIC_API_URL (fallback http://localhost:3000)
Kanıt: englishcamplanding/api/http/axios.ts2.3 Production Deployment (Coolify)#
| Alan | Değer |
|---|
| Sunucu sağlayıcısı | Hostinger |
| Sunucu paketi | KVM 1 |
| Orkestrasyon | Coolify |
| Coolify Project adı | EnglishCamp |
| Application'lar | Backend, Landing |
| Backend URL | https://api.englishcamper.com |
| Landing URL | https://englishcamper.com |
| Ek servis | BentoPDF (https://pdf.englishcamper.com) |
| DNS | Cloudflare * için A kaydı |
| Deploy stratejisi | GitHub main branch’e yeni commit geldiğinde otomatik deploy |
3) Build / Test / Quality Komutları#
3.1 Backend Komutları#
| Komut | Amaç |
|---|
npm run build | Nest build |
npm run start | Dist çalıştırma |
npm run dev | Watch mode |
npm run test | Unit test |
npm run test:e2e | E2E test |
npm run lint | ESLint |
Kanıt: englishcampbackend/package.json3.2 Frontend Komutları#
| Komut | Amaç |
|---|
npm run build | Next production build |
npm run start | Next production server |
npm run dev | Next development server |
npm run lint | ESLint |
npm run e2e | Playwright test |
npm run e2e:headed | Headed Playwright |
npm run e2e:ui | Playwright UI |
Kanıt: englishcamplanding/package.json4) Operasyonel Sağlık Kontrolleri#
4.1 Hızlı smoke-check#
4.2 Kritik fonksiyon kontrolleri#
1.
OTP isteği: /auth/otp/request
2.
Refresh token: /auth/refresh
3.
Settings okuma: /settings/landing_video_url
4.3 Production URL kontrolleri#
5) Operasyonel API Endpoint Özeti#
| Method | Endpoint | Amaç | Not |
|---|
GET | / | Servis ulaşılabilirlik | Basit metin cevap |
GET | /api/docs | API dokümantasyonu | Swagger UI |
GET | /swagger/json | Machine-readable schema | Swagger JSON |
POST | /auth/refresh | Access token yenileme | Frontend interceptor tarafından kullanılıyor |
GET | /settings/:key | Runtime ayar okuma | Landing video URL burada tutuluyor |
PUT | /settings | Runtime ayar güncelleme | Admin yetkisi gerekir |
POST | /storage/upload | Dosya yükleme | R2 konfigürasyonu gerekir |
GET | /admin/dashboard | Operasyon metrikleri | Admin yetkisi gerekir |
5.1 Rate Limit Özeti#
| Endpoint/Kural | Limit | Pencere | Not | Kanıt |
|---|
| Global default | 120 | 1 dakika | Override olmayan tüm endpointler | englishcampbackend/src/common/constants/rate-limit.constants.ts, englishcampbackend/src/app/app.module.ts |
POST /auth/refresh | 30 | 1 dakika | @Throttle({ default: RATE_LIMITS.AUTH_REFRESH }) | englishcampbackend/src/auth/auth.controller.ts |
POST /auth/otp/request | 5 | 5 dakika | OTP istek koruması | englishcampbackend/src/auth/auth.controller.ts |
POST /auth/otp/verify | 12 | 5 dakika | OTP doğrulama koruması | englishcampbackend/src/auth/auth.controller.ts |
POST /contact | 6 | 1 saat | Contact create için ayrı limit | englishcampbackend/src/common/controllers/contact.controller.ts |
POST /storage/upload | 20 | 10 dakika | Upload abuse koruması | englishcampbackend/src/storage/storage.controller.ts |
IP tracker x-forwarded-for başlığını önceliklendirir, yoksa req.ip kullanır.Kanıt: englishcampbackend/src/app/app.module.ts
6) Env Değişkenleri (Operasyon Odaklı)#
| Değişken | Katman | Operasyonel Etki | Kanıt |
|---|
PORT | Backend | Servis dinleme portu | englishcampbackend/src/main.ts |
MONGODB_URI | Backend | Veritabanı erişimi | englishcampbackend/src/config/mongodb.config.ts |
JWT_SECRET | Backend | Auth güvenliği | englishcampbackend/src/config/jwt.config.ts |
JWT_EXPIRATION / JWT_REFRESH_EXPIRATION | Backend | Token yaşam döngüsü | englishcampbackend/src/config/jwt.config.ts |
MAIL_HOST, MAIL_PORT, MAIL_USER, MAIL_PASS, MAIL_FROM_* | Backend | OTP/reply/material e-postaları | englishcampbackend/src/config/mail.config.ts |
FRONTEND_BASE_URL | Backend | Mail içi materyal linkleri | englishcampbackend/src/education-materials/use-cases/assign-education-material-to-users.use-case.ts |
R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET, R2_ENDPOINT, R2_BUCKET_CUSTOM_DOMAIN, R2_ACCOUNT_ID | Backend | Upload/saklama | englishcampbackend/src/config/r2.config.ts |
NEXT_PUBLIC_API_URL | Frontend | API çağrı hedefi | englishcamplanding/api/http/axios.ts |
NEXT_PUBLIC_SITE_URL | Frontend | SEO canonical/sitemap/robots | englishcamplanding/lib/seo.ts |
NEXT_PUBLIC_UMAMI_WEBSITE_ID | Frontend | Umami analytics | englishcamplanding/components/analytics/analytics-loader.tsx |
NEXT_PUBLIC_GA_MEASUREMENT_ID | Frontend | GA aç/kapat | englishcamplanding/components/analytics/google-analytics.tsx |
7) Operasyonel Rol Matrisi#
| İşlem/Alan | Public | User | Admin | Superadmin | Kanıt |
|---|
/ ve /api/docs erişimi | Evet | Evet | Evet | Evet | englishcampbackend/src/app/app.controller.ts, englishcampbackend/src/main.ts |
/auth/refresh | Evet | Evet | Evet | Evet | englishcampbackend/src/auth/auth.controller.ts |
/settings/:key (read) | Evet | Evet | Evet | Evet | englishcampbackend/src/settings/controllers/settings.controller.ts |
/settings (upsert) | Hayır | Hayır | Evet | Evet | englishcampbackend/src/settings/controllers/settings.controller.ts |
/admin/dashboard | Hayır | Hayır | Evet | Evet | englishcampbackend/src/admin-dashboard/controllers/admin-dashboard.controller.ts |
/storage/upload | Evet | Evet | Evet | Evet | englishcampbackend/src/storage/controllers/storage.controller.ts |
8) Veri Modeli (Operasyon Etkisi Olan Varlıklar)#
| Varlık | Operasyonel Önemi | Kanıt |
|---|
User | Auth ve yetkilendirme temel varlığı | englishcampbackend/src/users/schemas/user.schema.ts |
RefreshToken + BlacklistedToken | Token yaşam döngüsü ve logout güvenliği | englishcampbackend/src/users/schemas/refresh-token.schema.ts, englishcampbackend/src/users/schemas/blacklisted-token.schema.ts |
Otp | OTP doğrulama işleyişi | englishcampbackend/src/users/schemas/otp.schema.ts |
Setting | Runtime key/value konfigürasyonları | englishcampbackend/src/settings/schemas/setting.schema.ts |
Contact | Müşteri iletişim operasyonu | englishcampbackend/src/common/schemas/contact.schema.ts |
Course, ProficiencyTest, UserTestResult | Eğitim içeriği ve sınav operasyonları | englishcampbackend/src/courses/schemas/course.schema.ts, englishcampbackend/src/proficiency-tests/schemas/proficiency-test.schema.ts, englishcampbackend/src/proficiency-tests/schemas/user-test-result.schema.ts |
EducationMaterial + Assignment | Dosya dağıtımı ve kullanıcı atama operasyonları | englishcampbackend/src/education-materials/schemas/education-material.schema.ts, englishcampbackend/src/education-materials/schemas/user-education-material-assignment.schema.ts |
Detaylı ER diyagram için: docs/03-technical-guide.md9) Operasyonel Gözlemler#
Request body limiti global 50mb olarak set edilmiş.Kanıt: englishcampbackend/src/main.ts
CORS origin: true ile geniş açık.Kanıt: englishcampbackend/src/main.ts
Global request logları console.log ile yazılıyor.Kanıt: englishcampbackend/src/main.ts
Frontend tarafında 401 durumunda refresh retry kuyruğu uygulanıyor.Kanıt: englishcamplanding/api/http/interceptors.ts
10) E2E / Test Kapsamı Gözlemi#
Frontend Playwright senaryoları: courses, proficiency tests, profile editing.Kanıt: englishcamplanding/e2e/*.spec.ts
Backend e2e testleri mevcut, ancak kapsam sınırlı.Kanıt: englishcampbackend/test/*.e2e-spec.ts
Modified at 2026-02-14 10:37:51