Backend dokumentazioa
Tech stack
- Next.js Route Handlers (
src/app/api/*) - TypeScript
- MySQL
mysql2/promisebidez - JWT (
jsonwebtoken) - Emaila Resend-en bidez
- Google Maps Directions + Geocoding
API route antolaketa
Domeinu karpetak backend-js/src/app/api azpian:
authuserspackagesroutesstopslogstracking
Use-case bakoitzak geruzatutako patroia jarraitzen du:
route.ts(transport)dto/dtos(balidazioa)service(negozio logika)repository(SQL sarbidea)
DTO balidazio patroia
DTO moduluek query/body input-ak balidatzen dituzte service-a exekutatu aurretik eta ValidationError botatzen dute balio ez dutenean. Route handler-ek erroreak lib/response.ts-eko handleError bidez zentralizatzen dituzte.
Service eta repository patroiak
- Service-ek arauak, trantsizioak eta albo-efektuak koordinatzen dituzte.
- Repository-ek SQL kontsultak kapsulatzen dituzte eta row-mapped objektuak itzultzen dituzte.
- Domeinuen arteko portaera partekatua erauzten da (adibidez pakete egoeren albo-efektuak).
Error handling eta response helper-ak
- Error pertsonalizatuak:
ValidationError,UnauthorizedError,ForbiddenError,NotFoundError,ConflictError. handleError(tag, error)-ek erroreak HTTP status-etara eta{ error }forma koherentera mapatzen ditu.res.ok-ek cookieak ezartzea/ezabatzea onartzen du.
Autentikazioa eta baimena
- Access token-a: Bearer JWT behar da endpoint babestuetarako.
requireAuth(request, allowedRoles?)-ek token-a eta aukerako rol murrizketak egiaztatzen ditu.- Rolak
src/app/types/index.ts-n definituta daude:adminetadistributor.
MySQL konexioa
connect()-ek pool bat modu lazy-an sortu eta cacheatzen du, connection limit 10 erabilita. SSL gaituta dago rejectUnauthorized: false ezarpenarekin uneko inplementazioan.
Email bidalketa
Resend bezeroa honetarako erabiltzen da:
- kontu aktibazioa,
- password reset-a,
- login jakinarazpenak,
- pakete egoera emailak (pending/assigned/in_transit/delivered/undelivered/failed).
Google Directions integrazioa
mapsService.optimizeRoute:
- Google Directions-era deitzen du waypoint optimization erabilita,
- stop ordenatuak + ETA kalkulatzen ditu,
- total duration eta distance itzultzen ditu.
mapsService.geocodeAddress-ek testuzko helbidea koordenatu bihurtzen du pakete sortze/eguneratze fluxuetarako.
Pakete egoeren albo-efektuak
applyPackageStatusSideEffects-ek hau egiten du:
- log txertaketa
package_status_logstaulan, - tracking token lookup-a,
- distributor name lookup-a,
- egoera emaila hartzaileei bidaltzea.
Tracking link-ak
Tracking token-ak tokens taulan gordetzen dira tracking_token motarekin, paketeari lotuta, eta endpoint publikoak erabiltzen ditu:
GET /api/tracking/:trackingToken
Reset password fluxua
POST /api/auth/forgotPassword-ek reset token-a sortu/ezeztatu eta emaila bidaltzen du.PATCH /api/auth/changePwd:- token-arekin bakarrik: balidazio check-a,
newPassword-ekin: password-a eguneratzen du, erabiltzailea aktibatzen du, reset/activation token-ak ezeztatzen ditu.
Kontu aktibazio fluxua
Erabiltzailea sortzeak aktibazio emailaren sorrera pizten du sendActivationEmailService bidez. Aktibazio token mota activate_account_token da eta changePwd token-verification mekanismo berak balidatzen du.
[!WARNING] Aktibazio URL-ak une honetan
RESET_BASE_URLberrerabiltzen du kodean. Kontuan hartu email link-ak konfiguratzean.
Logak
Egoera aldaketak package_status_logs-en idazten dira eta honen bidez agertzen dira:
GET /api/logs/listAll(admin)GET /api/logs/listByPackage(admin/distributor)
Routes/stops/packages domeinu fluxuak
Ruta sorrera
- Distributor user-a eta eguneko-ruta-bakarra constraint-a balidatzen ditu.
- Carryover package-ak bateratzen ditu.
- Stop ordena Google Directions bidez optimizatzen du.
- Ruta + route stops txertatzen ditu eta paketeen estimated delivery eguneratzen du.
Iraganeko rutatik jarraitzea
- Azken iraganeko ruta pendientea aurkitzen du.
- Stop pendienteak egungo eguneko rutara migratzen ditu.
- Pending pakete egoerak
in_transit-era mugitzen ditu albo-efektuekin.
Stop operazioak
PATCH /api/stops/reorder(admin) stop ordena eguneratzen du.PATCH /api/stops/updateArrival(distributor) bere stop-arenactual_arrivalzigilatzen du.
Package operazioak
- Paketea + helbidea + tracking token-a + hasierako log-a + tracking emaila sortzen ditu.
- Pakete xehetasunak/helbidea eta lotutako albo-efektuak eguneratzen ditu.
- Distributor egoera trantsizioak allowed-transition matrix eta route-order constraint-ekin behartzen dira.