Bu proje in memory veri yapısı kullanan basit bir RESTful API servisidir.
Projeyi lokalinizde veya Docker üzerinden kolayca çalıştırabilirsiniz.
```bash
# 1. Projeyi klonlayın.
git clone https://github.com/melihgurlek/MangoLabAI-Case-Study.git
# 2. Dependencyleri yükleyin
npm install
# 3. Geliştirme modunda başlatın
npm run dev
# Veya doğrudan production modunda başlatın
npm start
Sunucu varsayılan olarak http://localhost:3000 adresinde çalışacaktır.
# İmajı oluşturun
docker build -t task-management-api .
# Containeri başlatın
docker run -p 3000:3000 task-management-api
Projede ekstra kütüphane dependency yaratmamak için assert modülü ile unit testleri yazılmıştır.
npm test
Vaka çalışmasında benden istenen gereksinimlere istinaden projeyi şekillendirirken aşağıdaki konulara odaklandım:
- MVP Yaklaşımı: "In-memory" bir veritabanı istenmesine rağmen, tüm kodu tek bir
server.jsdosyasına yığmaktan kaçındım. Projeyi modüler ve teste uygun hale getirmek için Controller, Model ve Route katmanlarına ayırdım. - Bağımsızlık (Decoupling): Express uygulamasının konfigürasyonu (
app.js) ile uygulamanın portu dinlediği ana dosyayı (server.js) birbirinden ayırdım. Bu yaklaşım network katmanı olmadan kodun test edilebilmesini sağladı.
- Birim Test (Unit Test) Kararı: Vaka çalışmasında ekstra (opsiyonel) olarak küçük bir test yazılması istenmişti. Basit bir in-memory API için Jest veya Supertest gibi ağır dependencyler eklemek yerine, Node.js'in kendi
assertmodülünü kullanarak zero-dependency ve hafif bir test yazmaya karar verdim. - Hata Yönetimi ve Geliştirici Deneyimi (DX):
server.jsiçerisinde en sık karşılaşılan port çakışması hatalarını (EADDRINUSE) yakalayan bir listener ekledim. - Docker Optimizasyonu:
Dockerfileiçerisindenode:20-alpinekullanarak hafif bir imaj elde ettim. İmaj boyutunu küçük ve güvenli tutmak içinnpm ci --omit=devkomutuyla sadece production dependencylerinin kurulmasını sağladım. - Model Validasyonu: İsteğe bağlı olsa da, API'ye hatalı veri girilmesini önlemek için Controller katmanında gelen
titledeğişkenini denetleme mekanizmaları ekledim.
Geliştirme sürecini hızlandırmak ve best-practice'leri doğrulamak için yapay zeka araçlarını şu noktalarda kullandım:
- Uygulamanın temel klasör düzeni ve katmanların (MVC) sorumluluk sınırlarını doğrulamak için bir yardımcı olarak.
- Boilerplate konfigürasyon dosyalarının (örneğin
.dockerignorekuralları ve standart Express sunucu ayağa kaldırma blokları) hızlıca oluşturulması için.