# Wisecolt-CI Proje Dökümantasyonu ## 📋 İçindekiler - [Proje Genel Bakış](#-proje-genel-bakış) - [Backend Dökümantasyonu](#-backend-dökümantasyonu) - [Frontend Dökümantasyonu](#-frontend-dökümantasyonu) - [API Referansı](#-api-referansı) - [Kurulum](#-kurulum) - [Kullanım](#-kullanım) - [Geliştirme](#-geliştirme) ## 🎯 Proje Genel Bakış Wisecolt-CI, modern web teknolojileriyle geliştirilmiş tam teşekküllü bir CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım) platformudur. Proje, repository otomasyonu ve test süreçlerini yönetmek için tasarlanmıştır. ### ✨ Temel Özellikler - **🔐 Kimlik Doğrulama**: JWT tabanlı güvenli kimlik yönetimi - **📊 Job Yönetimi**: Repository'lar için otomatik test süreçleri - **⚡ Gerçek Zamanlı**: Socket.io ile canlı durum güncellemeleri - **🎨 Modern UI**: React + shadcn/ui ile responsive arayüz - **🌙 Tema Desteği**: Dark/Light moda geçiş imkanı - **🐳 Konteynerizasyon**: Docker ile tam izole geliştirme ortamı ### 🛠 Teknoloji Yığını #### Backend - **Node.js** + **TypeScript** - Güçlü sunucu tarafı geliştirme - **Express.js** - Minimal ve esnek web framework'ü - **MongoDB** - NoSQL veritabanı - **Socket.io** - Gerçek zamanlı çift yönlü iletişim - **JWT** - Güvenli kimlik doğrulama - **Mongoose** - MongoDB modelleme ve validasyon #### Frontend - **React 18** - Modern bileşen tabanlı UI kütüphanesi - **TypeScript** - Tip güvenli geliştirme - **Vite** - Hızlı build tool ve geliştirme sunucusu - **Tailwind CSS** - Utility-first CSS framework'ü - **shadcn/ui** - Modern React UI bileşen kütüphanesi - **React Router** - Client tarafı rotalama - **Axios** - HTTP istemci kütüphanesi #### DevOps - **Docker** + **Docker Compose** - Konteyner orkestrasyon - **Hot Reload** - Geliştirme anında canlı güncellemeler ## 📊 Backend Dökümantasyonu ### 🏗 Mimari Backend, RESTful API prensiplerine göre tasarlanmış modüler bir yapıya sahiptir. #### Ana Bileşenler 1. **Express Sunucusu** (`src/index.ts`) 2. **Router'lar** (`src/routes/`) 3. **Middleware** (`src/middleware/`) 4. **Servisler** (`src/services/`) 5. **Modeller** (`src/models/`) 6. **Konfigürasyon** (`src/config/`) ### 🔐 Authentication Sistemi #### Endpoint'ler - `POST /auth/login` - Kullanıcı girişi - `GET /auth/me` - Token doğrulama ve kullanıcı bilgileri #### Güvenlik Özellikleri - JWT tabanlı kimlik doğrulama - Bearer token authentication - CORS yapılandırması - .env tabanlı hassas bilgi yönetimi #### Kullanım ```typescript // Giriş işlemi const response = await fetch('/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }); // Token ile korumalı istek const response = await fetch('/protected-endpoint', { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' } }); ``` ### 📋 Job Yönetim Sistemi #### Model Yapısı ```typescript interface JobDocument { name: string; // Job adı repoUrl: string; // Repository URL'si testCommand: string; // Çalıştırılacak test komutu checkValue: number; // Kontrol değeri (dakika/saat/gün) checkUnit: TimeUnit; // Kontrol birimi status: JobStatus; // Job durumu lastRunAt?: Date; // Son çalışma zamanı lastDurationMs?: number; // Son çalışma süresi (ms) lastMessage?: string; // Son mesaj } ``` #### Endpoint'ler - `GET /jobs` - Tüm job'ları listele - `GET /jobs/:id` - Job detaylarını getir - `POST /jobs` - Yeni job oluştur - `PUT /jobs/:id` - Job güncelle - `DELETE /jobs/:id` - Job sil - `POST /jobs/:id/run` - Job'ı manuel çalıştır #### Job Süreç Yönetimi - **Otomatik Çalıştırma**: Belirlenen aralıklarla otomatik çalışma - **Git Operasyonları**: Clone/pull işlemleri - **NPM Kurulum**: Bağımlılıkların otomatik kurulumu - **Test Çalıştırma**: Belirlenen komutların çalıştırılması - **Sonuç Kaydı**: Test sonuçlarının veritabanına kaydedilmesi ### ⚡ Socket.io Real-time İletişim #### Olaylar - `connection` - Yeni bağlantı kurulduğunda - `hello` - Bağlantı kurulduğunda hoş geldik mesajı - `ping/pong` - Bağlantı kontrolü - `counter:update` - Sayaç güncellemesi - `counter:start/stop` - Sayaç başlatma/durdurma - `job:subscribe` - Job durum takibi - `job:status` - Job durum güncellemesi - `job:log` - Job log akışı #### Kullanım Örneği ```typescript // Client tarafı socket.on('job:status', (data) => { console.log('Job durumu güncellendi:', data); }); // Server tarafı io.to(`job:${jobId}`).emit('job:status', { jobId, status: 'running', lastMessage: 'Test çalıştırılıyor...' }); ``` ### 🔧 Konfigürasyon Yönetimi #### Environment Değişkenleri ```bash PORT=4000 # Backend sunucu portu MONGO_URI=mongodb://mongo:27017/wisecoltci # MongoDB bağlantı adresi ADMIN_USERNAME=admin # Admin kullanıcı adı ADMIN_PASSWORD=supersecret # Admin şifresi JWT_SECRET=your-secret-key # JWT imzalama anahtarı CLIENT_ORIGIN=http://localhost:5173 # Frontend adresi (CORS için) ``` ## 🎨 Frontend Dökümantasyonu ### 🏗 Mimari Frontend, modern React prensiplerine göre tasarlanmış bileşen tabanlı bir yapıya sahiptir. #### Ana Bileşenler 1. **App Component** - Ana rotalama ve yapılandırma 2. **Pages** - Sayfa bileşenleri (HomePage, JobsPage, vb.) 3. **Components** - Yeniden kullanılabilir UI bileşenleri 4. **Providers** - React Context Provider'lar 5. **API Layer** - Backend ile iletişim katmanı ### 🔐 Authentication Provider #### AuthProvider Özellikleri - Kullanıcı durum yönetimi - Token saklama (localStorage) - Otomatik kimlik doğrulama - Login/logout işlemleri #### Kullanım ```typescript const { user, token, login, logout, loading } = useAuth(); // Giriş yapma await login('admin', 'password'); // Çıkış yapma logout(); // Korumalı bileşen if (!user) { return ; } ``` ### 📱 Sayfa Bileşenleri #### HomePage - Proje genel bakış ve istatistikler - Hızlı erişim linkleri #### JobsPage - Job listesi - Job oluşturma/düzenleme/silme işlemleri - Real-time durum güncellemeleri #### JobDetailPage - Job detayları - Manuel çalıştırma - Log akışı izleme ### 🎨 UI Bileşen Kütüphanesi (shadcn/ui) #### Temel Bileşenler - **Button** - Özelleştirilebilir düğmeler - **Input** - Form giriş alanları - **Select** - Seçim kutuları - **Card** - Kart bileşenleri - **Label** - Etiket bileşenleri - **Switch** - Toggle switch'ler - **Toaster** - Bildirim sistemi #### Stil Sistemi - **Tailwind CSS** - Utility-first stil yaklaşımı - **Responsive Design** - Mobil uyumlu tasarım - **Tema Desteği** - Dark/Light moda geçiş ### 📱 Responsive Tasarım #### Breakpoint'ler - `sm:` - 640px ve üzeri - `md:` - 768px ve üzeri - `lg:` - 1024px ve üzeri - `xl:` - 1280px ve üzeri #### Örnek Kullanım ```typescript
{/* Responsive grid layout */}
``` ## 🔌 API Referansı ### Authentication API #### POST /auth/login Kullanıcı girişi için endpoint. **Request Body:** ```json { "username": "admin", "password": "supersecret" } ``` **Response:** ```json { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "username": "admin" } ``` #### GET /auth/me Token doğrulama ve kullanıcı bilgileri. **Headers:** ``` Authorization: Bearer ``` **Response:** ```json { "username": "admin" } ``` ### Jobs API #### GET /jobs Tüm job'ları listeler. **Response:** ```json [ { "_id": "64a1b2c3d4e5f6789012345", "name": "Frontend Tests", "repoUrl": "https://github.com/user/frontend-repo", "testCommand": "npm test", "checkValue": 5, "checkUnit": "dakika", "status": "idle", "lastRunAt": "2023-07-01T10:30:00.000Z", "lastDurationMs": 45000, "lastMessage": "Başarılı", "createdAt": "2023-07-01T08:00:00.000Z", "updatedAt": "2023-07-01T10:30:00.000Z" } ] ``` #### POST /jobs Yeni job oluşturur. **Request Body:** ```json { "name": "Backend Tests", "repoUrl": "https://github.com/user/backend-repo", "testCommand": "npm run test", "checkValue": 10, "checkUnit": "dakika" } ``` #### GET /jobs/:id Belirtilen job'ın detaylarını getirir. #### PUT /jobs/:id Mevcut job'ı günceller. **Request Body:** POST ile aynı formatta #### DELETE /jobs/:id Job'ı siler. **Response:** ```json { "success": true } ``` #### POST /jobs/:id/run Job'ı manuel olarak çalıştırır. **Response:** ```json { "queued": true } ``` ### WebSocket Olayları #### client → server - `ping` - Bağlantı kontrolü - `job:subscribe` - Job durum takibi - `job:unsubscribe` - Job durum takibi bırakma #### server → client - `hello` - Bağlantı kurulduğunda - `pong` - Ping yanıtı - `job:status` - Job durumu güncellemesi - `job:log` - Job log mesajı ## 🚀 Kurulum ### Gereksinimler - Docker ve Docker Compose - Git ### Adım Adım Kurulum 1. **Repo'yu klonla:** ```bash git clone https://github.com/your-repo/wisecolt-ci.git cd wisecolt-ci ``` 2. **Ortam dosyalarını yapılandır:** ```bash cp backend/.env.example backend/.env cp frontend/.env.example frontend/.env ``` 3. **Admin bilgilerini gir:** ```bash # backend/.env ADMIN_USERNAME=your-admin-username ADMIN_PASSWORD=your-secure-password JWT_SECRET=your-jwt-secret-key CLIENT_ORIGIN=http://localhost:5173 # frontend/.env VITE_API_URL=http://localhost:4000 ``` 4. **Servisleri başlat:** ```bash docker compose up --build ``` 5. **Uygulamaya eriş:** - Frontend: http://localhost:5173 - Backend API: http://localhost:4000 - MongoDB: mongodb://localhost:27017 ## 💻 Kullanım ### Giriş İşlemi 1. Tarayıcıda http://localhost:5173 adresine gidin 2. Varsayılan giriş bilgileri: - Kullanıcı adı: `admin` - Şifre: `supersecret` 3. Giriş yap butonuna tıklayın ### Job Oluşturma 1. Sol menüden "Jobs" sayfasına gidin 2. "Yeni Job" butonuna tıklayın 3. Job bilgilerini girin: - **Job Adı**: Test için anlaşılır bir ad - **Repository URL**: GitHub repository adresi - **Test Komutu**: Çalıştırılacak komut (örn: `npm test`) - **Kontrol Değeri**: Kaç dakikada/saat/günde bir çalışacağı - **Kontrol Birimi**: Zaman birimi seçimi 4. Kaydet butonuna tıklayın ### Job İzleme 1. Jobs sayfasından oluşturduğunuz job'a tıklayın 2. Job detay sayfasında: - **Durum**: Job'un mevcut durumu (idle/running/success/failed) - **Sonuçlar**: Son çalıştırma sonuçları ve süreleri - **Loglar**: Gerçek zamanlı log akışı - **Manuel Çalıştırma**: Job'u anında çalıştırma ## 🛠 Geliştirme ### Backend Geliştirme #### Yeni Route Ekleme ```typescript // src/routes/yeniRoute.ts import { Router } from "express"; import { authMiddleware } from "../middleware/authMiddleware.js"; const router = Router(); router.use(authMiddleware); router.get("/", (req, res) => { res.json({ message: "Yeni endpoint çalışıyor" }); }); export default router; ``` #### Ana Dosyada Route Ekleme ```typescript // src/index.ts import yeniRoute from "./routes/yeniRoute.js"; app.use("/yeni", yeniRoute); ``` ### Frontend Geliştirme #### Yeni Sayfa Ekleme ```typescript // src/pages/YeniSayfa.tsx import React from "react"; export const YeniSayfa = () => { return (

Yeni Sayfa

{/* Sayfa içeriği */}
); }; ``` #### Rotalama Ekleme ```typescript // src/App.tsx import { YeniSayfa } from "./pages/YeniSayfa"; } /> ``` #### API İsteği Ekleme ```typescript // src/api/client.ts export async function yeniEndpoint() { const { data } = await apiClient.get("/yeni"); return data; } ``` ### 🐳 Docker Yapılandırması #### Backend Dockerfile ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 4000 CMD ["npm", "run", "start"] ``` #### Frontend Dockerfile ```dockerfile FROM node:18-alpine as build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` ### 🔄 Otomatik Test Süreci JobService, belirlenen aralıklarla otomatik test çalıştırır: 1. **Repository Clone**: İlk çalıştırmada repo klonlanır 2. **Bağımlılık Kurulum**: `npm install` çalıştırılır 3. **Test Çalıştırma**: Belirlenen komut çalıştırılır 4. **Sonuç Kayıt**: Sonuçlar veritabanına kaydedilir 5. **Real-time Güncelleme**: Socket.io ile client bilgilendirilir ### 📝 Notlar #### Güvenlik - JWT token'ları güvenli saklayın - Environment değişkenlerini .env dosyasında tutun - Production ortamında varsayılan şifreleri değiştirin #### Performans - MongoDB index'leri kullanın - Büyük repository'ler için caching stratejileri uygulayın - Frontend build optimizasyonu yapın #### İzleme - MongoDB log'larını izleyin - Docker container log'larını kontrol edin - Application metriklerini toplayın --- *Bu dökümantasyon Wisecolt-CI projesinin tüm özelliklerini ve kullanımını kapsamaktadır. Geliştirme sürecinde güncel tutulmalıdır.*