Skip to content

oguzhan18/etnaspace-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ETNASPACE Backend (.NET 8 + MongoDB)

Bu klasör case study’de istenen backend’i içerir:

  • Merchant bazlı ürün ekleme ve listeleme
  • Kategori bazlı komisyon oranı (mock servis)
  • Satış fiyatı hesaplama: komisyon + %20 KDV
  • Merchant veri izolasyonu (header ile)
  • Swagger UI

Çalıştırma (Docker)

cd backend
cp .env.example .env
docker-compose up --build

Swagger: http://localhost:8080/swagger

Çalıştırma (Docker olmadan)

Önkoşullar:

  • .NET SDK 8
  • Çalışan bir MongoDB (lokal veya Atlas)

Mongo bağlantısını environment’tan verebilirsin:

export Mongo__ConnectionString="mongodb://localhost:27017"
export Mongo__DatabaseName="etnaspace"

Sonra API’yi çalıştır:

cd backend/src/EtnaSpace.Api
dotnet run

backend/.env içindeki değişkenleri kullanmak istersen (Atlas gibi), API başlangıcında .env dosyası otomatik yüklenir. Örn:

cd backend
cp .env.example .env
cd src/EtnaSpace.Api
dotnet run

Not: Uygulama açılışta migration runner (index) + seeder çalıştırır. Seeder’ı kapatmak için:

export Seed__Enabled="false"

Merchant Login Simülasyonu (Backend tarafı)

Her istekte X-Merchant-Id header zorunludur:

  • merchant-a
  • merchant-b
  • merchant-c

Testler

Önkoşullar:

  • .NET SDK 8
  • Integration testler için Docker (opsiyonel)

Unit test + coverage (>= %80 line):

cd backend/src
dotnet test EtnaSpace.Tests.Unit/EtnaSpace.Tests.Unit.csproj -c Release /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:Threshold=80 /p:ThresholdType=line

Integration testler (Docker varsa çalışır, yoksa otomatik skip):

cd backend/src
dotnet test EtnaSpace.Tests.Integration/EtnaSpace.Tests.Integration.csproj -c Release

API

Ürün oluşturma

POST /api/products

Header:

  • X-Merchant-Id: merchant-a

Body:

{
  "merchantId": "merchant-a",
  "productName": "Bluetooth Kulaklık",
  "category": "Elektronik",
  "baseCost": 500
}

Not: merchantId alanı body’de bulunsa da izolasyon için header esas alınır.

Ürün listeleme

GET /api/products

Header:

  • X-Merchant-Id: merchant-a

Komisyon (mock)

GET /api/commissions/{category}

Örn: GET /api/commissions/Elektronik

About

Case study submitted for ETNASPACE with .NET 8 and MongoDB

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors