Turtor Docs
Architektura

NestJS moduly

Přehled všech backend modulů v apps/api/src/modules/

Backend je postaven na frameworku NestJS a organizován do feature modulů. Každý modul zapouzdřuje svůj controller, service, DTOs a entity.

Struktura modulu

Každý modul dodržuje následující vzor:

modules/feature/
├── feature.module.ts      # Definice modulu
├── feature.controller.ts  # HTTP endpointy
├── feature.service.ts     # Business logika
├── dto/                   # Data Transfer Objects
│   ├── create-feature.dto.ts
│   └── update-feature.dto.ts
└── entities/              # TypeORM entity
    └── feature.entity.ts

Přehled modulů

Doménové moduly

ModulAdresářPopis
Authmodules/auth/Autentizace (Magic Link, Google OAuth, email/password), JWT tokeny, správa session
Usersmodules/users/CRUD uživatelů, aktivace/deaktivace, přepínání rolí
Coursesmodules/courses/Správa kurzů, team matching, kanban, generování, náhrady
Bookingsmodules/bookings/Rezervace kurzů, potvrzení, storno, recenze
Instructorsmodules/instructors/Profily instruktorů, certifikace, specializace
Companiesmodules/companies/Firemní profily, členové, ověření

Podpůrné moduly

ModulAdresářPopis
Salesmodules/sales/B2B CRM -- leady, aktivity, pipeline, konverze na firmy
Availabilitymodules/availability/Správa dostupnosti instruktorů (bitmask sloty)
Regionsmodules/regions/14 českých krajů + 62 oblastních spolků ČČK
Paymentsmodules/payments/Stripe platby, fakturace, refundace, PDF generátor
Notificationsmodules/notifications/In-app a e-mailové notifikace
Emailmodules/email/E-mailová služba (Resend), magic tokeny pro akce z e-mailu
Filesmodules/files/Nahrávání souborů přes S3/MinIO, presigned URLs
Verifymodules/verify/Ověření telefonu přes Twilio SMS OTP
Geomodules/geo/H3 hexagonální grid, města, pokrytí instruktorů
ARESmodules/ares/Vyhledávání v českém obchodním rejstříku (ARES)
Jobsmodules/jobs/BullMQ procesory (e-maily, SMS upomínky, generování kurzů)
Adminmodules/admin/Administrátorské statistiky a systémový health check
Healthmodules/health/Health check endpoint (/api/v1/health)

WebSockets

ModulAdresářPopis
WebSocketssrc/websockets/Socket.IO gateway pro real-time aktualizace

Detail klíčových modulů

Auth modul

Tři metody autentizace: Magic Link (OTP přes e-mail), Google OAuth (přes WorkOS) a klasické email/password.

  • Controller: auth.controller.ts -- 16 endpointů (register, login, magic-link, OAuth, refresh, me, switch-role, ...)
  • Service: auth.service.ts -- generování JWT, ověřování, správa cookies
  • Entity: magic-link.entity.ts -- OTP kódy (hashované bcrypt)
  • Strategie: jwt.strategy.ts -- Passport JWT strategie
  • DTO: unified-profile.dto.ts -- kombinovaný profil (user + instructor + company + garant)

Courses modul

Nejkomplexnější modul -- správa kurzů, týmový matching, bulk pozvánky, náhrady, kanban.

Obsahuje více controllerů:

ControllerRoute prefixÚčel
CoursesController/coursesCRUD kurzů, publikování, rušení, tým
CourseGenerationController/courses/generateAutomatické generování kurzů
CourseProposalsController/course-proposalsNávrhy kurzů ke schválení
ReplacementController/replacementsNáhrady nemocných instruktorů
WithdrawalController/withdrawalsŽádosti o odstoupení z kurzu
GenerationLogsController/generation-logsLogy generovacího algoritmu

Instructors modul

Profily instruktorů, certifikace a specializace.

ControllerRoute prefixÚčel
InstructorsController/instructorsCRUD instruktorů, schvalování, pozastavení
SpecializationController/specializationsCRUD typů specializací
InstructorSpecializationController/instructorsPřiřazení specializací instruktorům

InstructorSpecializationController sdílí route prefix /instructors s InstructorsController -- endpointy se sloučí pod stejnou base route.

Regions modul

Správa 14 českých krajů (ISO 3166-2:CZ) a 62 oblastních spolků Českého červeného kříže.

  • CRUD krajů a oblastních spolků
  • Přiřazení garantů ke krajům (GarantRegion M2M)
  • Statistiky za region

Sdílené komponenty (common/)

Adresář apps/api/src/common/ obsahuje sdílené části používané napříč moduly:

AdresářObsah
guards/JwtAuthGuard, RolesGuard
decorators/@CurrentUser(), @Roles(), @Public()
filters/HttpExceptionFilter -- formátování chybových odpovědí
pipes/Validační pipes
dto/PaginationDto, PaginatedResponseDto, SortingDto
entities/BaseEntity (id, createdAt, updatedAt)
cache/CacheService -- Redis cache s mutex stampede protection
utils/h3.utils.ts -- H3 geospatial utility

Registrace modulů

Všechny moduly jsou registrované v apps/api/src/app.module.ts:

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRootAsync({ useFactory: databaseConfig }),
    BullModule.forRootAsync({ useFactory: redisConfig }),
    CacheModule,     // Globální -- dostupný všude bez importu
    AuthModule,
    UsersModule,
    CoursesModule,
    BookingsModule,
    InstructorsModule,
    CompaniesModule,
    SalesModule,
    RegionsModule,
    // ... a další
  ],
})
export class AppModule {}

BullMQ fronty (Jobs modul)

Asynchronní zpracování úloh přes Redis:

FrontaÚčel
emailOdesílání e-mailů přes Resend
notificationsIn-app notifikace
course-generationAutomatické generování kurzů
replacementHledání náhradních instruktorů
sms-remindersDenní SMS upomínky (9:00)