meldestelle/docs/migration-plan.md
stefan a256622f37 refactor: Migrate from monolithic to modular architecture
- Restructure project into domain-specific modules (core, masterdata, members, horses, events, infrastructure)
- Create shared client components in common-ui module
- Implement CI/CD workflows with GitHub Actions
- Consolidate documentation in docs directory
- Remove deprecated modules and documentation files
- Add cleanup and migration scripts for transition
- Update README with new project structure and setup instructions
2025-07-22 18:44:18 +02:00

12 KiB

Migration Plan for Meldestelle Project Restructuring

This document outlines the plan for migrating code from the old module structure to the new module structure as described in the project restructuring requirements.

1. Shared-Kernel to Core Modules

Core-Domain

  • shared-kernel/src/commonMain/kotlin/at/mocode/dto/base/BaseDto.ktcore/core-domain/src/main/kotlin/at/mocode/core/domain/model/
  • shared-kernel/src/commonMain/kotlin/at/mocode/enums/Enums.ktcore/core-domain/src/main/kotlin/at/mocode/core/domain/model/

Core-Utils

  • shared-kernel/src/commonMain/kotlin/at/mocode/serializers/Serialization.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/serialization/
  • shared-kernel/src/commonMain/kotlin/at/mocode/validation/ApiValidationUtils.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/validation/
  • shared-kernel/src/commonMain/kotlin/at/mocode/validation/ValidationResult.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/validation/
  • shared-kernel/src/commonMain/kotlin/at/mocode/validation/ValidationUtils.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/validation/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/config/AppConfig.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/config/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/config/AppEnvironment.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/config/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/database/DatabaseConfig.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/database/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/database/DatabaseFactory.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/database/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/database/DatabaseMigrator.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/database/
  • shared-kernel/src/jvmMain/kotlin/at/mocode/shared/discovery/ServiceRegistration.ktcore/core-utils/src/main/kotlin/at/mocode/core/utils/discovery/

Tests

  • shared-kernel/src/jvmTest/kotlin/at/mocode/shared/database/test/SimpleDatabaseTest.ktcore/core-utils/src/test/kotlin/at/mocode/core/utils/database/
  • shared-kernel/src/jvmTest/kotlin/at/mocode/validation/test/ValidationTest.ktcore/core-utils/src/test/kotlin/at/mocode/core/utils/validation/

2. Master-Data to Masterdata Modules

Masterdata-Domain

  • master-data/src/commonMain/kotlin/at/mocode/masterdata/domain/model/AltersklasseDefinition.ktmasterdata/masterdata-domain/src/main/kotlin/at/mocode/masterdata/domain/model/
  • master-data/src/commonMain/kotlin/at/mocode/masterdata/domain/model/BundeslandDefinition.ktmasterdata/masterdata-domain/src/main/kotlin/at/mocode/masterdata/domain/model/
  • master-data/src/commonMain/kotlin/at/mocode/masterdata/domain/model/LandDefinition.ktmasterdata/masterdata-domain/src/main/kotlin/at/mocode/masterdata/domain/model/
  • master-data/src/commonMain/kotlin/at/mocode/masterdata/domain/model/Platz.ktmasterdata/masterdata-domain/src/main/kotlin/at/mocode/masterdata/domain/model/
  • master-data/src/commonMain/kotlin/at/mocode/masterdata/domain/repository/LandRepository.ktmasterdata/masterdata-domain/src/main/kotlin/at/mocode/masterdata/domain/repository/

Masterdata-Application

  • master-data/src/commonMain/kotlin/at/mocode/masterdata/application/usecase/CreateCountryUseCase.ktmasterdata/masterdata-application/src/main/kotlin/at/mocode/masterdata/application/usecase/
  • master-data/src/commonMain/kotlin/at/mocode/masterdata/application/usecase/GetCountryUseCase.ktmasterdata/masterdata-application/src/main/kotlin/at/mocode/masterdata/application/usecase/

Masterdata-Infrastructure

  • master-data/src/jvmMain/kotlin/at/mocode/masterdata/infrastructure/repository/LandRepositoryImpl.ktmasterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/
  • master-data/src/jvmMain/kotlin/at/mocode/masterdata/infrastructure/repository/LandTable.ktmasterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/
  • master-data/src/jvmMain/kotlin/at/mocode/masterdata/infrastructure/table/LandTable.ktmasterdata/masterdata-infrastructure/src/main/kotlin/at/mocode/masterdata/infrastructure/persistence/

Masterdata-API

  • master-data/src/jvmMain/kotlin/at/mocode/masterdata/infrastructure/api/CountryController.ktmasterdata/masterdata-api/src/main/kotlin/at/mocode/masterdata/api/rest/

Client UI

  • master-data/src/jsMain/kotlin/at/mocode/masterdata/ui/components/StammdatenListe.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/components/masterdata/

3. Member-Management to Members Modules

Members-Domain

  • member-management/src/commonMain/kotlin/at/mocode/members/domain/model/*.ktmembers/members-domain/src/main/kotlin/at/mocode/members/domain/model/
  • member-management/src/commonMain/kotlin/at/mocode/members/domain/repository/*.ktmembers/members-domain/src/main/kotlin/at/mocode/members/domain/repository/
  • member-management/src/commonMain/kotlin/at/mocode/members/domain/service/*.ktmembers/members-domain/src/main/kotlin/at/mocode/members/domain/service/
  • member-management/src/jvmMain/kotlin/at/mocode/members/domain/service/*.ktmembers/members-domain/src/main/kotlin/at/mocode/members/domain/service/

Members-Application

  • member-management/src/commonMain/kotlin/at/mocode/members/application/usecase/*.ktmembers/members-application/src/main/kotlin/at/mocode/members/application/usecase/

Members-Infrastructure

  • member-management/src/jvmMain/kotlin/at/mocode/members/infrastructure/repository/*.ktmembers/members-infrastructure/src/main/kotlin/at/mocode/members/infrastructure/persistence/
  • member-management/src/jvmMain/kotlin/at/mocode/members/infrastructure/table/*.ktmembers/members-infrastructure/src/main/kotlin/at/mocode/members/infrastructure/persistence/

Client UI

  • member-management/src/jsMain/kotlin/at/mocode/members/ui/components/*.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/components/members/

4. Horse-Registry to Horses Modules

Horses-Domain

  • horse-registry/src/commonMain/kotlin/at/mocode/horses/domain/model/DomPferd.kthorses/horses-domain/src/main/kotlin/at/mocode/horses/domain/model/
  • horse-registry/src/commonMain/kotlin/at/mocode/horses/domain/repository/HorseRepository.kthorses/horses-domain/src/main/kotlin/at/mocode/horses/domain/repository/

Horses-Application

  • horse-registry/src/commonMain/kotlin/at/mocode/horses/application/usecase/*.kthorses/horses-application/src/main/kotlin/at/mocode/horses/application/usecase/

Horses-Infrastructure

  • horse-registry/src/jvmMain/kotlin/at/mocode/horses/infrastructure/repository/HorseRepositoryImpl.kthorses/horses-infrastructure/src/main/kotlin/at/mocode/horses/infrastructure/persistence/
  • horse-registry/src/jvmMain/kotlin/at/mocode/horses/infrastructure/repository/HorseTable.kthorses/horses-infrastructure/src/main/kotlin/at/mocode/horses/infrastructure/persistence/

Horses-API

  • horse-registry/src/jvmMain/kotlin/at/mocode/horses/infrastructure/api/HorseController.kthorses/horses-api/src/main/kotlin/at/mocode/horses/api/rest/

Client UI

  • horse-registry/src/jsMain/kotlin/at/mocode/horses/ui/components/PferdeListe.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/components/horses/

5. Event-Management to Events Modules

Events-Domain

  • event-management/src/commonMain/kotlin/at/mocode/events/domain/model/Veranstaltung.ktevents/events-domain/src/main/kotlin/at/mocode/events/domain/model/
  • event-management/src/commonMain/kotlin/at/mocode/events/domain/repository/VeranstaltungRepository.ktevents/events-domain/src/main/kotlin/at/mocode/events/domain/repository/
  • event-management/src/commonMain/kotlin/at/mocode/events/EventManagement.ktevents/events-domain/src/main/kotlin/at/mocode/events/

Events-Application

  • event-management/src/commonMain/kotlin/at/mocode/events/application/usecase/*.ktevents/events-application/src/main/kotlin/at/mocode/events/application/usecase/

Events-Infrastructure

  • event-management/src/jvmMain/kotlin/at/mocode/events/infrastructure/repository/VeranstaltungRepositoryImpl.ktevents/events-infrastructure/src/main/kotlin/at/mocode/events/infrastructure/persistence/
  • event-management/src/jvmMain/kotlin/at/mocode/events/infrastructure/repository/VeranstaltungTable.ktevents/events-infrastructure/src/main/kotlin/at/mocode/events/infrastructure/persistence/

Events-API

  • event-management/src/jvmMain/kotlin/at/mocode/events/infrastructure/api/VeranstaltungController.ktevents/events-api/src/main/kotlin/at/mocode/events/api/rest/

Client UI

  • event-management/src/jsMain/kotlin/at/mocode/events/ui/components/VeranstaltungsListe.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/components/events/
  • event-management/src/jsMain/kotlin/at/mocode/events/ui/utils/EventComponent.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/components/events/

6. API-Gateway to Infrastructure/Gateway

Infrastructure/Gateway

  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/Application.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/auth/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/auth/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/config/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/config/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/discovery/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/discovery/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/migrations/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/migrations/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/plugins/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/plugins/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/routing/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/routing/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/validation/*.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/validation/
  • api-gateway/src/jvmMain/kotlin/at/mocode/gateway/module.ktinfrastructure/gateway/src/main/kotlin/at/mocode/infrastructure/gateway/
  • api-gateway/src/jvmMain/resources/openapi/documentation.yamlinfrastructure/gateway/src/main/resources/openapi/
  • api-gateway/src/jvmMain/resources/static/docs/*infrastructure/gateway/src/main/resources/static/docs/
  • api-gateway/src/test/kotlin/at/mocode/gateway/ApiIntegrationTest.ktinfrastructure/gateway/src/test/kotlin/at/mocode/infrastructure/gateway/

7. ComposeApp to Client Modules

Client/Common-UI

  • composeApp/src/commonMain/kotlin/at/mocode/ui/theme/Theme.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/theme/
  • composeApp/src/commonMain/kotlin/at/mocode/di/AppDependencies.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/di/
  • composeApp/src/commonMain/kotlin/App.ktclient/common-ui/src/main/kotlin/at/mocode/client/common/

Client/Web-App

  • composeApp/src/commonMain/kotlin/at/mocode/ui/screens/*.ktclient/web-app/src/main/kotlin/at/mocode/client/web/screens/
  • composeApp/src/commonMain/kotlin/at/mocode/ui/viewmodel/*.ktclient/web-app/src/main/kotlin/at/mocode/client/web/viewmodel/
  • composeApp/src/jsMain/kotlin/main.ktclient/web-app/src/main/kotlin/at/mocode/client/web/
  • composeApp/src/commonTest/kotlin/at/mocode/ui/viewmodel/*.ktclient/web-app/src/test/kotlin/at/mocode/client/web/viewmodel/

Client/Desktop-App

  • composeApp/src/desktopMain/kotlin/main.ktclient/desktop-app/src/main/kotlin/at/mocode/client/desktop/

Migration Process

For each file to be migrated:

  1. Create the target directory if it doesn't exist
  2. Copy the file to the target location
  3. Update the package declaration in the file to match the new package structure
  4. Update imports to reflect the new package structure
  5. Update any references to old module names in the code

Verification

After migration:

  1. Run a build to ensure all modules compile correctly
  2. Run tests to verify functionality
  3. Document any remaining migration tasks