Wielodostępna platforma e-commerce SaaS obsługująca operacje B2B i B2C.
Zbudowana z architekturą mikrousług, wdrożona na AWS ECS.
- Next.js 14 z App Router
- TypeScript w trybie strict
- Tailwind CSS + shadcn/ui
- React Query do pobierania danych
- Zustand do zarządzania stanem
- Usługa użytkowników: Node.js + Express + TypeORM
- Usługa produktów: Go + Gin + GORM
- Usługa zamówień: Python + FastAPI + SQLAlchemy
- Usługa płatności: Java + Spring Boot
- AWS ECS do orkiestracji kontenerów
- PostgreSQL (RDS) dla danych relacyjnych
- Redis do cachowania i sesji
- ElasticSearch do wyszukiwania produktów
- S3 do przechowywania mediów
## Przepływ pracy deweloperskiej
# Uruchom wszystkie usługi
# Uruchom konkretną usługę
docker-compose up user-service
- Testy jednostkowe: Jest dla JS/TS, Go test, pytest
- Testy integracyjne: Supertest + Docker
- Min. pokrycie: 80% dla nowego kodu
1. Utwórz gałąź funkcjonalną z develop
2. Format nazwy: feature/JIRA-123-krotki-opis
3. Format commit: "type(scope): opis"
4. Otwórz PR przeciwko develop
5. Wymagaj 2 zatwierdzeń + przechodzącego CI
- GET /api/v1/resources - Lista z paginacją
- GET /api/v1/resources/:id - Pojedynczy zasób
- POST /api/v1/resources - Utwórz nowy
- PUT /api/v1/resources/:id - Pełna aktualizacja
- PATCH /api/v1/resources/:id - Częściowa aktualizacja
- DELETE /api/v1/resources/:id - Usuwanie miękkie
- Authorization: Bearer {token}
- X-Tenant-ID: {tenantId}
## Kwestie bezpieczeństwa
- Wszystkie punkty końcowe wymagają uwierzytelniania oprócz /health
- Używaj zapytań sparametryzowanych aby zapobiec wstrzyknięciu SQL
- Waliduj wszystkie wejścia schematami Joi/Zod
- Ograniczenie prędkości: 100 żąd/min na użytkownika
- CORS skonfigurowany tylko dla konkretnych domen
- Zapytania do bazy danych muszą używać indeksów
- Implementuj paginację dla punktów końcowych list
- Cachuj żądania GET w Redis (5 min TTL)
- Ładuj leniwie obrazy i komponenty
- Budżet rozmiaru pakietu: 200KB dla początkowego ładowania
- Webhooki płatności czasem przekraczają limit czasu - logika ponawiania w miejscu
- Indeksowanie wyszukiwania ma 2-3 minutowe opóźnienie
- Niektóre starsze punkty końcowe używają camelCase zamiast snake_case
## Monitorowanie i debugowanie
- Logi: CloudWatch (wyszukaj po X-Request-ID)
- APM: DataDog (user-service.datadog.dashboard)
- Błędy: Sentry (filtruj po usłudze + env)
- Lokalne debugowanie: Patrz /docs/debugging.md