├── axonserver ├── data │ └── .gitkeep └── config │ └── axonserver.yaml ├── docker ├── .env └── docker_postgres_init.sql ├── backend ├── gradle.properties ├── clients │ ├── gradle.properties │ ├── grpc │ │ ├── src │ │ │ └── main │ │ │ │ ├── resources │ │ │ │ ├── certs │ │ │ │ │ └── server-truststore.jks │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── grpc │ │ │ │ └── client │ │ │ │ └── demo │ │ │ │ ├── GrpcDemoClient.kt │ │ │ │ └── commands │ │ │ │ └── UserCommands.kt │ │ └── build.gradle.kts │ ├── rsocket │ │ ├── src │ │ │ └── main │ │ │ │ ├── resources │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── rsocket │ │ │ │ └── client │ │ │ │ └── demo │ │ │ │ ├── RSocketDemoClient.kt │ │ │ │ └── commands │ │ │ │ └── ChatService.kt │ │ └── build.gradle.kts │ └── settings.gradle.kts ├── apis │ ├── grpc │ │ ├── gradle.properties │ │ ├── src │ │ │ └── main │ │ │ │ ├── resources │ │ │ │ ├── certs │ │ │ │ │ ├── server-keystore.p12 │ │ │ │ │ ├── server-truststore.jks │ │ │ │ │ ├── server-csr.conf │ │ │ │ │ ├── generate.sh │ │ │ │ │ └── server.csr │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ ├── project │ │ │ │ └── LocalDateExtension.kt │ │ │ │ └── GrpcApi.kt │ │ └── build.gradle.kts │ ├── gradle.properties │ ├── graphql │ │ ├── src │ │ │ └── main │ │ │ │ ├── resources │ │ │ │ ├── graphql │ │ │ │ │ ├── base.graphqls │ │ │ │ │ ├── user.graphqls │ │ │ │ │ └── company.graphqls │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ ├── GraphQlApi.kt │ │ │ │ ├── application │ │ │ │ └── config │ │ │ │ │ ├── WebMvcConfig.kt │ │ │ │ │ └── CorsConfig.kt │ │ │ │ ├── company │ │ │ │ └── company │ │ │ │ │ └── graphql │ │ │ │ │ └── CompanyMutationsController.kt │ │ │ │ └── project │ │ │ │ └── participant │ │ │ │ └── graphql │ │ │ │ └── ParticipantMutationsController.kt │ │ └── build.gradle.kts │ ├── rest │ │ ├── src │ │ │ ├── test │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ └── demo │ │ │ │ │ └── DemoApplicationTests.kt │ │ │ └── main │ │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── RestApi.kt │ │ │ │ │ ├── project │ │ │ │ │ ├── task │ │ │ │ │ │ └── web │ │ │ │ │ │ │ └── dto │ │ │ │ │ │ │ ├── UnassignTaskDto.kt │ │ │ │ │ │ │ ├── RenameTaskDto.kt │ │ │ │ │ │ │ ├── AssignTaskDto.kt │ │ │ │ │ │ │ ├── AddTodoDto.kt │ │ │ │ │ │ │ ├── RescheduleTaskDto.kt │ │ │ │ │ │ │ └── CreateTaskDto.kt │ │ │ │ │ ├── project │ │ │ │ │ │ └── web │ │ │ │ │ │ │ └── dto │ │ │ │ │ │ │ ├── RenameProjectDto.kt │ │ │ │ │ │ │ ├── RescheduleProjectDto.kt │ │ │ │ │ │ │ ├── UpdateProjectDto.kt │ │ │ │ │ │ │ └── CreateProjectDto.kt │ │ │ │ │ └── participant │ │ │ │ │ │ └── web │ │ │ │ │ │ └── dto │ │ │ │ │ │ └── CreateParticipantDto.kt │ │ │ │ │ ├── user │ │ │ │ │ └── user │ │ │ │ │ │ └── web │ │ │ │ │ │ └── dto │ │ │ │ │ │ ├── RenameUserDto.kt │ │ │ │ │ │ └── RegisterUserDto.kt │ │ │ │ │ ├── company │ │ │ │ │ ├── company │ │ │ │ │ │ └── web │ │ │ │ │ │ │ └── dto │ │ │ │ │ │ │ └── CreateCompanyDto.kt │ │ │ │ │ └── employee │ │ │ │ │ │ └── web │ │ │ │ │ │ └── dto │ │ │ │ │ │ └── CreateEmployeeDto.kt │ │ │ │ │ └── application │ │ │ │ │ └── config │ │ │ │ │ ├── WebMvcConfig.kt │ │ │ │ │ └── CorsConfig.kt │ │ │ │ └── resources │ │ │ │ └── application.yml │ │ └── build.gradle.kts │ ├── rsocket │ │ ├── src │ │ │ └── main │ │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── RsocketApi.kt │ │ │ │ │ ├── project │ │ │ │ │ ├── task │ │ │ │ │ │ └── rsocket │ │ │ │ │ │ │ └── dto │ │ │ │ │ │ │ ├── UnassignTaskDto.kt │ │ │ │ │ │ │ ├── RenameTaskDto.kt │ │ │ │ │ │ │ ├── RemoveTodoDto.kt │ │ │ │ │ │ │ ├── MarkTodoAsDoneDto.kt │ │ │ │ │ │ │ ├── AssignTaskDto.kt │ │ │ │ │ │ │ ├── AddTodoDto.kt │ │ │ │ │ │ │ ├── RescheduleTaskDto.kt │ │ │ │ │ │ │ └── CreateTaskDto.kt │ │ │ │ │ ├── project │ │ │ │ │ │ └── rsocket │ │ │ │ │ │ │ └── dto │ │ │ │ │ │ │ ├── RenameProjectDto.kt │ │ │ │ │ │ │ ├── RescheduleProjectDto.kt │ │ │ │ │ │ │ └── CreateProjectDto.kt │ │ │ │ │ └── participant │ │ │ │ │ │ └── rsocket │ │ │ │ │ │ └── dto │ │ │ │ │ │ └── CreateParticipantDto.kt │ │ │ │ │ ├── company │ │ │ │ │ ├── company │ │ │ │ │ │ └── rsocket │ │ │ │ │ │ │ └── dtos │ │ │ │ │ │ │ └── CreateCompanyDto.kt │ │ │ │ │ └── employee │ │ │ │ │ │ └── rsocket │ │ │ │ │ │ └── dtos │ │ │ │ │ │ └── CreateEmployeeDto.kt │ │ │ │ │ └── application │ │ │ │ │ └── config │ │ │ │ │ └── TemporaryWorkaroundConfig.kt │ │ │ │ └── resources │ │ │ │ └── application.yml │ │ └── rsc-collection │ │ │ └── authenticate.sh │ ├── grpc-lib │ │ ├── src │ │ │ └── main │ │ │ │ └── proto │ │ │ │ ├── userservice.proto │ │ │ │ └── projectservice.proto │ │ └── build.gradle.kts │ ├── common │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com │ │ │ └── novatecgmbh │ │ │ └── eventsourcing │ │ │ └── axon │ │ │ └── application │ │ │ └── security │ │ │ ├── CustomUserAuthenticationConverter.kt │ │ │ └── CustomUserDetailsService.kt │ └── settings.gradle.kts ├── services │ ├── company │ │ ├── application │ │ │ └── src │ │ │ │ ├── main │ │ │ │ ├── resources │ │ │ │ │ ├── db │ │ │ │ │ │ └── migration │ │ │ │ │ │ │ ├── h2 │ │ │ │ │ │ │ └── V1__INITIAL_SCHEMA.sql │ │ │ │ │ │ │ └── postgres │ │ │ │ │ │ │ ├── V4__ID_MAPPING_TABLE.sql │ │ │ │ │ │ │ ├── V2__COMMAND_MODEL_TABLES.sql │ │ │ │ │ │ │ ├── V3__QUERY_MODEL_TABLE.sql │ │ │ │ │ │ │ └── V1__AXON_TABLES.sql │ │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── CompanyApplication.kt │ │ │ │ │ └── company │ │ │ │ │ ├── company │ │ │ │ │ └── query │ │ │ │ │ │ ├── CompanyProjectionRepository.kt │ │ │ │ │ │ ├── CompanyProjection.kt │ │ │ │ │ │ └── CompanyQueryHandler.kt │ │ │ │ │ ├── references │ │ │ │ │ ├── ReferenceCheckerService.kt │ │ │ │ │ └── RootContextIdMappingRepository.kt │ │ │ │ │ └── employee │ │ │ │ │ ├── command │ │ │ │ │ └── view │ │ │ │ │ │ ├── EmployeeUniqueKeyRepository.kt │ │ │ │ │ │ ├── EmployeeUniqueKeyProjector.kt │ │ │ │ │ │ └── EmployeeUniqueKeyProjection.kt │ │ │ │ │ └── query │ │ │ │ │ ├── EmployeeProjectionRepository.kt │ │ │ │ │ └── EmployeeQueryHandler.kt │ │ │ │ └── test │ │ │ │ ├── resources │ │ │ │ └── application.yml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ └── CompanyApplicationTests.kt │ │ ├── gradle.properties │ │ ├── api │ │ │ ├── src │ │ │ │ └── main │ │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ └── company │ │ │ │ │ ├── company │ │ │ │ │ └── api │ │ │ │ │ │ ├── Events.kt │ │ │ │ │ │ ├── Queries.kt │ │ │ │ │ │ ├── ValueObjects.kt │ │ │ │ │ │ └── Commands.kt │ │ │ │ │ └── employee │ │ │ │ │ └── api │ │ │ │ │ ├── ValueObjects.kt │ │ │ │ │ ├── Queries.kt │ │ │ │ │ └── Events.kt │ │ │ └── build.gradle.kts │ │ └── settings.gradle.kts │ ├── project │ │ ├── application │ │ │ └── src │ │ │ │ ├── main │ │ │ │ ├── resources │ │ │ │ │ ├── db │ │ │ │ │ │ └── migration │ │ │ │ │ │ │ ├── h2 │ │ │ │ │ │ │ └── V1__INITIAL_SCHEMA.sql │ │ │ │ │ │ │ └── postgres │ │ │ │ │ │ │ ├── V7__ADD_TASK_ASSIGNEE.sql │ │ │ │ │ │ │ ├── V8__ADD_EMAIL_AND_PHONE.sql │ │ │ │ │ │ │ ├── V9__ADD_NAME_AND_COMPANY_TO_TASK.sql │ │ │ │ │ │ │ ├── V5__ID_MAPPING_TABLE.sql │ │ │ │ │ │ │ ├── V4__ACCESS_CONTROL_LIST_TABLE.sql │ │ │ │ │ │ │ ├── V6__ADD_TASK_TODOS.sql │ │ │ │ │ │ │ ├── V2__COMMAND_MODEL_TABLES.sql │ │ │ │ │ │ │ └── V1__AXON_TABLES.sql │ │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── ProjectApplication.kt │ │ │ │ │ └── project │ │ │ │ │ ├── project │ │ │ │ │ ├── query │ │ │ │ │ │ └── ProjectProjectionRepository.kt │ │ │ │ │ └── command │ │ │ │ │ │ └── InternalCommands.kt │ │ │ │ │ ├── participant │ │ │ │ │ ├── query │ │ │ │ │ │ └── ParticipantProjectionRepository.kt │ │ │ │ │ └── command │ │ │ │ │ │ └── views │ │ │ │ │ │ ├── ParticipantUniqueKeyRepository.kt │ │ │ │ │ │ ├── ParticipantUniqueKeyProjector.kt │ │ │ │ │ │ └── ParticipantUniqueKeyProjection.kt │ │ │ │ │ ├── references │ │ │ │ │ └── ReferenceCheckerService.kt │ │ │ │ │ └── authorization │ │ │ │ │ └── ProjectAuthorizationService.kt │ │ │ │ └── test │ │ │ │ ├── kotlin │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ └── ProjectApplicationTests.kt │ │ │ │ └── resources │ │ │ │ └── application.yml │ │ ├── gradle.properties │ │ ├── api │ │ │ ├── src │ │ │ │ └── main │ │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ └── project │ │ │ │ │ ├── participant │ │ │ │ │ └── api │ │ │ │ │ │ ├── ValueObjects.kt │ │ │ │ │ │ ├── Events.kt │ │ │ │ │ │ ├── Commands.kt │ │ │ │ │ │ └── Queries.kt │ │ │ │ │ ├── project │ │ │ │ │ └── api │ │ │ │ │ │ ├── ValueObjects.kt │ │ │ │ │ │ └── Queries.kt │ │ │ │ │ └── task │ │ │ │ │ └── api │ │ │ │ │ ├── ValueObjects.kt │ │ │ │ │ └── Queries.kt │ │ │ └── build.gradle.kts │ │ └── settings.gradle.kts │ ├── user │ │ ├── application │ │ │ └── src │ │ │ │ ├── main │ │ │ │ ├── resources │ │ │ │ │ ├── db │ │ │ │ │ │ └── migration │ │ │ │ │ │ │ ├── h2 │ │ │ │ │ │ │ └── V1__INITIAL_SCHEMA.sql │ │ │ │ │ │ │ └── postgres │ │ │ │ │ │ │ ├── V4__ID_MAPPING_TABLE.sql │ │ │ │ │ │ │ ├── V3__QUERY_MODEL_TABLE.sql │ │ │ │ │ │ │ ├── V2__COMMAND_MODEL_TABLES.sql │ │ │ │ │ │ │ └── V1__AXON_TABLES.sql │ │ │ │ │ └── application.yaml │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ └── user │ │ │ │ │ ├── UserApplication.kt │ │ │ │ │ └── user │ │ │ │ │ ├── query │ │ │ │ │ ├── UserProjectionRepository.kt │ │ │ │ │ └── UserProjection.kt │ │ │ │ │ └── command │ │ │ │ │ └── view │ │ │ │ │ ├── UserUniqueKeyRepository.kt │ │ │ │ │ ├── UserUniqueKeyProjection.kt │ │ │ │ │ └── UserUniqueKeyProjector.kt │ │ │ │ └── test │ │ │ │ ├── resources │ │ │ │ └── application.yml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ └── user │ │ │ │ └── UserApplicationTest.kt │ │ ├── gradle.properties │ │ ├── api │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ └── user │ │ │ │ └── api │ │ │ │ ├── ValueObjects.kt │ │ │ │ ├── Queries.kt │ │ │ │ ├── Events.kt │ │ │ │ └── Commands.kt │ │ └── settings.gradle.kts │ ├── common │ │ ├── gradle.properties │ │ ├── application │ │ │ ├── src │ │ │ │ └── main │ │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── common │ │ │ │ │ ├── command │ │ │ │ │ │ ├── Exceptions.kt │ │ │ │ │ │ └── BaseAggregate.kt │ │ │ │ │ └── references │ │ │ │ │ │ └── RootContextIdMapping.kt │ │ │ │ │ └── application │ │ │ │ │ └── sequencing │ │ │ │ │ ├── RootContextId.kt │ │ │ │ │ └── RootContextIdentifierSequencingPolicy.kt │ │ │ └── build.gradle.kts │ │ ├── api │ │ │ ├── src │ │ │ │ └── main │ │ │ │ │ └── kotlin │ │ │ │ │ └── com │ │ │ │ │ └── novatecgmbh │ │ │ │ │ └── eventsourcing │ │ │ │ │ └── axon │ │ │ │ │ ├── common │ │ │ │ │ └── api │ │ │ │ │ │ ├── AggregateReference.kt │ │ │ │ │ │ └── ExceptionStatusCode.kt │ │ │ │ │ ├── user │ │ │ │ │ └── api │ │ │ │ │ │ └── UserId.kt │ │ │ │ │ └── application │ │ │ │ │ └── security │ │ │ │ │ ├── UserProfile.kt │ │ │ │ │ ├── UnregisteredUserPrincipal.kt │ │ │ │ │ ├── RegisteredUserPrincipal.kt │ │ │ │ │ └── SecurityContextHelper.kt │ │ │ └── build.gradle.kts │ │ ├── auditing │ │ │ ├── build.gradle.kts │ │ │ └── src │ │ │ │ └── main │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ └── application │ │ │ │ └── auditing │ │ │ │ └── AuditUserId.kt │ │ └── settings.gradle.kts │ └── settings.gradle.kts ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── data-import │ ├── gradle.properties │ ├── initial │ │ ├── src │ │ │ └── main │ │ │ │ ├── resources │ │ │ │ └── application.yml │ │ │ │ └── kotlin │ │ │ │ └── com │ │ │ │ └── novatecgmbh │ │ │ │ └── eventsourcing │ │ │ │ └── axon │ │ │ │ └── DataImporterApplication.kt │ │ └── build.gradle.kts │ └── settings.gradle.kts ├── build-logic │ ├── commons-kotlin │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── kotlin │ │ │ └── com.novatecgmbh.commons-kotlin.gradle.kts │ └── settings.gradle.kts ├── settings.gradle.kts ├── platforms │ ├── test-platform │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ ├── plugins-platform │ │ └── build.gradle.kts │ └── product-platform │ │ └── build.gradle.kts └── build.sh ├── frontend ├── src │ ├── react-app-env.d.ts │ ├── images │ │ └── keycloak-bg.png │ ├── keycloak.ts │ ├── setupTests.ts │ ├── app │ │ ├── utils.ts │ │ ├── can-ndjson-stream.d.ts │ │ ├── store.ts │ │ └── hooks.ts │ ├── theme.ts │ ├── components │ │ ├── Home.tsx │ │ ├── HighlightingAnimation.ts │ │ ├── scaffold │ │ │ └── scaffoldSlice.ts │ │ ├── PrivateRoute.tsx │ │ └── TableToolbar.tsx │ ├── features │ │ ├── api │ │ │ └── apiSlice.ts │ │ └── tasks │ │ │ └── taskDrawerSlice.ts │ ├── index.tsx │ └── index.css ├── public │ ├── robots.txt │ ├── favicon.ico │ ├── logo192.png │ ├── logo512.png │ ├── silent-check-sso.html │ └── manifest.json ├── frontend.iml ├── .idea │ └── frontend.iml ├── tsconfig.json └── .gitignore └── .idea ├── modules ├── cli │ └── cli.test.iml ├── user │ ├── web │ │ └── user.web.test.iml │ ├── api │ │ └── com.novatecgmbh.eventsourcing.axon.user.user.api.test.iml │ ├── application-without-web │ │ └── user.application-without-web.test.iml │ ├── application │ │ └── com.novatecgmbh.eventsourcing.axon.user.user.application.test.iml │ └── command-query │ │ └── com.novatecgmbh.eventsourcing.axon.user.user.command-query.test.iml ├── common │ ├── web │ │ └── common.web.test.iml │ ├── command-query │ │ └── common.command-query.test.iml │ ├── api │ │ └── com.novatecgmbh.eventsourcing.axon.common.common.api.test.iml │ └── auditing │ │ └── com.novatecgmbh.eventsourcing.axon.common.common.auditing.test.iml ├── company │ ├── web │ │ └── company.web.test.iml │ ├── rsocket │ │ └── company.rsocket.test.iml │ ├── command-query │ │ └── company.command-query.test.iml │ ├── api │ │ └── com.novatecgmbh.eventsourcing.axon.company.company.api.test.iml │ ├── application-without-web │ │ └── company.application-without-web.test.iml │ └── application │ │ └── com.novatecgmbh.eventsourcing.axon.company.company.application.test.iml ├── project │ ├── web │ │ └── project.web.test.iml │ ├── rsocket │ │ └── project.rsocket.test.iml │ ├── command-query │ │ └── project.command-query.test.iml │ ├── api │ │ └── com.novatecgmbh.eventsourcing.axon.project.project.api.test.iml │ ├── application-without-web │ │ └── project.application-without-web.test.iml │ └── application │ │ └── com.novatecgmbh.eventsourcing.axon.project.project.application.test.iml ├── graph-ql │ └── backend.graph-ql.test.iml ├── api-gateway │ ├── axon │ │ └── api-gateway.axon.test.iml │ ├── rest │ │ └── api-gateway.rest.test.iml │ ├── common │ │ └── api-gateway.common.test.iml │ ├── graphql │ │ ├── api-gateway.graphql.test.iml │ │ ├── com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.iml │ │ ├── com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.main.iml │ │ └── com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.test.iml │ ├── spring-cloud │ │ └── api-gateway.spring-cloud.test.iml │ ├── apis.iml │ ├── websocket-stomp │ │ └── api-gateway.websocket-stomp.test.iml │ ├── websocket-rsocket │ │ └── api-gateway.websocket-rsocket.test.iml │ ├── common-spring-security │ │ └── api-gateway.common-spring-security.test.iml │ └── graph-ql │ │ ├── api-gateway.graphql.main.iml │ │ └── api-gateway.graphql.test.iml ├── apis │ ├── api-common │ │ ├── apis.api-common.test.iml │ │ └── apis.common.iml │ ├── websocket-stomp │ │ └── apis.websocket-stomp.test.iml │ ├── graphql-websocket │ │ └── apis.graphql-websocket.test.iml │ ├── websocket-rsocket │ │ └── apis.websocket-rsocket.test.iml │ ├── apis.iml │ ├── grpc │ │ ├── apis.grpc.iml │ │ ├── apis.grpc.main.iml │ │ └── apis.grpc.test.iml │ ├── rest │ │ ├── apis.rest.iml │ │ └── apis.rest.main.iml │ ├── graphql │ │ └── apis.graphql.iml │ ├── grpc-lib │ │ ├── apis.grpc-lib.iml │ │ └── apis.grpc-lib.main.iml │ └── rsocket │ │ └── apis.rsocket.iml ├── common-webmvc │ └── backend.common-webmvc.test.iml ├── backend.iml ├── services │ ├── common │ │ ├── command-query │ │ │ └── common.command-query.test.iml │ │ ├── common.iml │ │ ├── api │ │ │ └── common.api.iml │ │ ├── auditing │ │ │ └── common.auditing.iml │ │ └── application │ │ │ └── common.application.iml │ ├── company │ │ ├── command-query │ │ │ └── company.command-query.test.iml │ │ ├── company.iml │ │ ├── api │ │ │ └── company.api.iml │ │ └── application │ │ │ └── company.application.iml │ ├── project │ │ ├── command-query │ │ │ ├── project.command-query.test.iml │ │ │ └── project.command-query.iml │ │ ├── project.iml │ │ ├── api │ │ │ └── project.api.iml │ │ └── application │ │ │ └── project.application.iml │ ├── user │ │ ├── user.iml │ │ ├── api │ │ │ ├── user.api.iml │ │ │ ├── user.api.main.iml │ │ │ └── user.api.test.iml │ │ ├── application │ │ │ ├── user.application.iml │ │ │ └── user.application.test.iml │ │ └── command-query │ │ │ ├── user.command-query.main.iml │ │ │ └── user.command-query.test.iml │ └── backend.services.iml ├── clients │ ├── clients.iml │ ├── grpc │ │ ├── clients.grpc.iml │ │ ├── clients.grpc.main.iml │ │ └── clients.grpc.test.iml │ └── rsocket │ │ ├── clients.rsocket.iml │ │ ├── clients.rsocket.main.iml │ │ └── clients.rsocket.test.iml ├── common-spring-webmvc │ └── backend.common-spring-webmvc.test.iml ├── platforms │ ├── platforms.iml │ ├── test-platform │ │ └── platforms.test-platform.iml │ ├── plugins-platform │ │ └── platforms.plugins-platform.iml │ └── product-platform │ │ └── platforms.product-platform.iml ├── build-logic │ ├── build-logic.iml │ └── commons-kotlin │ │ └── build-logic.commons-kotlin.iml └── data-import │ ├── data-import.iml │ └── initial │ └── data-import.initial.iml ├── codeStyles ├── codeStyleConfig.xml └── Project.xml ├── ktfmt.xml ├── vcs.xml ├── google-java-format.xml ├── jpa-buddy.xml ├── kotlinScripting.xml ├── runConfigurations ├── Frontend.xml ├── Docker_Container_for_YATT.xml ├── UserApplication.xml ├── CompanyApplication.xml ├── ProjectApplication.xml ├── gRPC_API.xml ├── GraphQL_API.xml ├── RSocket_API.xml └── Data_Importer.xml ├── event-sourcing-with-axon.iml ├── modules.xml ├── misc.xml ├── checkstyle-idea.xml └── jarRepositories.xml /axonserver/data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docker/.env: -------------------------------------------------------------------------------- 1 | COMPOSE_PROJECT_NAME=yatt -------------------------------------------------------------------------------- /backend/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx2048m -------------------------------------------------------------------------------- /frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /backend/clients/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 -------------------------------------------------------------------------------- /axonserver/config/axonserver.yaml: -------------------------------------------------------------------------------- 1 | axoniq: 2 | axonserver: 3 | hostname: axonserver -------------------------------------------------------------------------------- /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /backend/apis/grpc/gradle.properties: -------------------------------------------------------------------------------- 1 | protobufVersion=3.19.1 2 | protobufPluginVersion=0.8.18 3 | grpcVersion=1.42.1 -------------------------------------------------------------------------------- /backend/services/company/application/src/main/resources/db/migration/h2/V1__INITIAL_SCHEMA.sql: -------------------------------------------------------------------------------- 1 | ../../schema-h2.sql -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/h2/V1__INITIAL_SCHEMA.sql: -------------------------------------------------------------------------------- 1 | ../../schema-h2.sql -------------------------------------------------------------------------------- /backend/services/user/application/src/main/resources/db/migration/h2/V1__INITIAL_SCHEMA.sql: -------------------------------------------------------------------------------- 1 | ../../schema-h2.sql -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/frontend/public/logo192.png -------------------------------------------------------------------------------- /frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/frontend/public/logo512.png -------------------------------------------------------------------------------- /frontend/src/images/keycloak-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/frontend/src/images/keycloak-bg.png -------------------------------------------------------------------------------- /backend/apis/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/backend/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /backend/data-import/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/services/common/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/services/user/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/services/company/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/services/project/gradle.properties: -------------------------------------------------------------------------------- 1 | springBootVersion=2.7.0 2 | kotlinVersion=1.6.21 3 | springDependencyManagementPluginVersion=1.0.11.RELEASE -------------------------------------------------------------------------------- /backend/apis/graphql/src/main/resources/graphql/base.graphqls: -------------------------------------------------------------------------------- 1 | type AggregateReference { 2 | identifier: String 3 | displayName: String 4 | } 5 | 6 | scalar Date -------------------------------------------------------------------------------- /backend/apis/grpc/src/main/resources/certs/server-keystore.p12: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/backend/apis/grpc/src/main/resources/certs/server-keystore.p12 -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/postgres/V7__ADD_TASK_ASSIGNEE.sql: -------------------------------------------------------------------------------- 1 | alter table if exists tasks 2 | add column participant_id varchar (255); -------------------------------------------------------------------------------- /backend/services/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "services" 2 | 3 | includeBuild("common") 4 | includeBuild("company") 5 | includeBuild("project") 6 | includeBuild("user") 7 | -------------------------------------------------------------------------------- /.idea/modules/cli/cli.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /backend/apis/grpc/src/main/resources/certs/server-truststore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/backend/apis/grpc/src/main/resources/certs/server-truststore.jks -------------------------------------------------------------------------------- /backend/clients/grpc/src/main/resources/certs/server-truststore.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NovatecConsulting/YATT/HEAD/backend/clients/grpc/src/main/resources/certs/server-truststore.jks -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /frontend/public/silent-check-sso.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/ktfmt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules/user/web/user.web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/common/web/common.web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/company/web/company.web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/project/web/project.web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules/graph-ql/backend.graph-ql.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/google-java-format.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/axon/api-gateway.axon.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/rest/api-gateway.rest.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/api-common/apis.api-common.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/company/rsocket/company.rsocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/project/rsocket/project.rsocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/jpa-buddy.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/common/api-gateway.common.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/graphql/api-gateway.graphql.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/common-webmvc/backend.common-webmvc.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/kotlinScripting.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/modules/apis/websocket-stomp/apis.websocket-stomp.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/common/command-query/common.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/company/command-query/company.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/project/command-query/project.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/graphql-websocket/apis.graphql-websocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/websocket-rsocket/apis.websocket-rsocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/backend.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/user/api/com.novatecgmbh.eventsourcing.axon.user.user.api.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/spring-cloud/api-gateway.spring-cloud.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/apis.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/common/api/com.novatecgmbh.eventsourcing.axon.common.common.api.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/services/common/command-query/common.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/services/company/command-query/company.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/services/project/command-query/project.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/apis.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/clients.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/common-spring-webmvc/backend.common-spring-webmvc.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/company/api/com.novatecgmbh.eventsourcing.axon.company.company.api.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/project/api/com.novatecgmbh.eventsourcing.axon.project.project.api.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/src/keycloak.ts: -------------------------------------------------------------------------------- 1 | import Keycloak from "keycloak-js"; 2 | 3 | const keycloak = Keycloak({ 4 | url: 'http://localhost:8999', 5 | realm: 'eventsourcing-with-axon', 6 | clientId: 'my-backend' 7 | }); 8 | 9 | export default keycloak; -------------------------------------------------------------------------------- /.idea/modules/api-gateway/websocket-stomp/api-gateway.websocket-stomp.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/grpc/apis.grpc.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/rest/apis.rest.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/platforms/platforms.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/common/common.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/user.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/websocket-rsocket/api-gateway.websocket-rsocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/api-common/apis.common.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/graphql/apis.graphql.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/grpc-lib/apis.grpc-lib.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/grpc/apis.grpc.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/grpc/apis.grpc.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/rest/apis.rest.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/apis/rsocket/apis.rsocket.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/build-logic/build-logic.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/grpc/clients.grpc.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/common/auditing/com.novatecgmbh.eventsourcing.axon.common.common.auditing.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/data-import/data-import.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/backend.services.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/company/company.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/project/project.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/api/user.api.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/user/application-without-web/user.application-without-web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/user/application/com.novatecgmbh.eventsourcing.axon.user.user.application.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/apis/grpc-lib/apis.grpc-lib.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/grpc/clients.grpc.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/grpc/clients.grpc.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/rsocket/clients.rsocket.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/company/application-without-web/company.application-without-web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/project/application-without-web/project.application-without-web.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/services/common/api/common.api.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/company/api/company.api.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/project/api/project.api.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/api/user.api.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/api/user.api.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/rsocket/clients.rsocket.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/clients/rsocket/clients.rsocket.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/user/command-query/com.novatecgmbh.eventsourcing.axon.user.user.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /backend/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/common-spring-security/api-gateway.common-spring-security.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/company/application/com.novatecgmbh.eventsourcing.axon.company.company.application.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/data-import/initial/data-import.initial.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/project/application/com.novatecgmbh.eventsourcing.axon.project.project.application.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules/services/common/auditing/common.auditing.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/application/user.application.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/postgres/V8__ADD_EMAIL_AND_PHONE.sql: -------------------------------------------------------------------------------- 1 | alter table if exists participant 2 | add column user_email varchar (255); 3 | 4 | alter table if exists participant 5 | add column user_telephone varchar (255); -------------------------------------------------------------------------------- /.idea/modules/platforms/test-platform/platforms.test-platform.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/common/application/common.application.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/application/user.application.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/company/application/company.application.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/project/application/project.application.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/project/command-query/project.command-query.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/services/user/command-query/user.command-query.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/build-logic/commons-kotlin/build-logic.commons-kotlin.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/platforms/plugins-platform/platforms.plugins-platform.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/modules/platforms/product-platform/platforms.product-platform.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /backend/build-logic/commons-kotlin/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | dependencies { 6 | implementation(platform("com.novatecgmbh.platform:plugins-platform")) 7 | 8 | implementation("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin") 9 | } -------------------------------------------------------------------------------- /backend/build-logic/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | dependencyResolutionManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | } 6 | } 7 | 8 | includeBuild("../platforms") 9 | 10 | rootProject.name = "build-logic" 11 | include("commons-kotlin") 12 | -------------------------------------------------------------------------------- /backend/data-import/initial/src/main/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | application: 3 | name: data-importer 4 | jackson: 5 | serialization: 6 | fail-on-empty-beans: false 7 | 8 | logging: 9 | level: 10 | ROOT: warn 11 | org: 12 | springframework.boot: info -------------------------------------------------------------------------------- /frontend/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom/extend-expect'; 6 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/graphql/com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/src/app/utils.ts: -------------------------------------------------------------------------------- 1 | export function parseDate(isoDate: string): Date { 2 | const splitDate = isoDate.split("-"); 3 | const year = parseInt(splitDate[0]); 4 | const month = parseInt(splitDate[1])-1; 5 | const day = parseInt(splitDate[2]); 6 | 7 | return new Date(year, month, day); 8 | } -------------------------------------------------------------------------------- /.idea/modules/api-gateway/graphql/com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /backend/services/company/application/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url: jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 4 | username: sa 5 | password: sa 6 | flyway: 7 | locations: classpath:db/migration/h2 8 | axon: 9 | axonserver: 10 | enabled: false -------------------------------------------------------------------------------- /backend/services/user/application/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url: jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 4 | username: sa 5 | password: sa 6 | flyway: 7 | locations: classpath:db/migration/h2 8 | axon: 9 | axonserver: 10 | enabled: false -------------------------------------------------------------------------------- /backend/services/common/application/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/common/command/Exceptions.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.common.command 2 | 3 | import java.lang.RuntimeException 4 | 5 | class AlreadyExistsException : RuntimeException() 6 | 7 | class PreconditionFailedException(message: String) : RuntimeException(message) 8 | -------------------------------------------------------------------------------- /backend/apis/rest/src/test/kotlin/com/novatecgmbh/eventsourcing/axon/demo/DemoApplicationTests.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.demo 2 | 3 | import org.junit.jupiter.api.Test 4 | import org.springframework.boot.test.context.SpringBootTest 5 | 6 | @SpringBootTest 7 | class DemoApplicationTests { 8 | 9 | @Test fun contextLoads() {} 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/common/api/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/common/api/AggregateReference.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.common.api 2 | 3 | import javax.persistence.Embeddable 4 | import javax.persistence.Embedded 5 | 6 | @Embeddable 7 | data class AggregateReference(@Embedded val identifier: T, val displayName: String? = null) 8 | -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/postgres/V9__ADD_NAME_AND_COMPANY_TO_TASK.sql: -------------------------------------------------------------------------------- 1 | alter table if exists tasks 2 | add column assignee_company_name varchar (255); 3 | 4 | alter table if exists tasks 5 | add column assignee_first_name varchar (255); 6 | 7 | alter table if exists tasks 8 | add column assignee_last_name varchar (255); -------------------------------------------------------------------------------- /.idea/modules/services/user/command-query/user.command-query.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/services/company/application/src/main/resources/db/migration/postgres/V4__ID_MAPPING_TABLE.sql: -------------------------------------------------------------------------------- 1 | create table root_context_id_mapping 2 | ( 3 | aggregate_identifier varchar(255) not null, 4 | aggregate_type varchar(255) not null, 5 | root_context_id varchar(255) not null, 6 | primary key (aggregate_identifier, aggregate_type, root_context_id) 7 | ); -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/postgres/V5__ID_MAPPING_TABLE.sql: -------------------------------------------------------------------------------- 1 | create table root_context_id_mapping 2 | ( 3 | aggregate_identifier varchar(255) not null, 4 | aggregate_type varchar(255) not null, 5 | root_context_id varchar(255) not null, 6 | primary key (aggregate_identifier, aggregate_type, root_context_id) 7 | ); -------------------------------------------------------------------------------- /backend/services/user/application/src/main/resources/db/migration/postgres/V4__ID_MAPPING_TABLE.sql: -------------------------------------------------------------------------------- 1 | create table root_context_id_mapping 2 | ( 3 | aggregate_identifier varchar(255) not null, 4 | aggregate_type varchar(255) not null, 5 | root_context_id varchar(255) not null, 6 | primary key (aggregate_identifier, aggregate_type, root_context_id) 7 | ); -------------------------------------------------------------------------------- /frontend/frontend.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/clients/rsocket/src/main/resources/application.yaml: -------------------------------------------------------------------------------- 1 | custom: 2 | auth: 3 | url: http://localhost:8999/realms/eventsourcing-with-axon/protocol/openid-connect/token 4 | username: test1 5 | password: test 6 | rsocket: 7 | server: 8 | uri: ws://localhost:8086/rsocket 9 | 10 | logging: 11 | level: 12 | root: info 13 | #io.rsocket.FrameLogger: debug -------------------------------------------------------------------------------- /frontend/.idea/frontend.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/apis/rest/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/RestApi.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class ApiGateway 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/common/auditing/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("com.novatecgmbh.commons-kotlin") 3 | } 4 | 5 | group = "${group}.common" 6 | 7 | dependencies { 8 | implementation("com.novatecgmbh.eventsourcing.axon.common:api") 9 | 10 | implementation("org.axonframework:axon-modelling") 11 | implementation("org.springframework.boot:spring-boot-starter-security") 12 | } -------------------------------------------------------------------------------- /backend/services/company/api/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/company/company/api/Events.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.company.company.api 2 | 3 | abstract class CompanyEvent(open val aggregateIdentifier: CompanyId) 4 | 5 | data class CompanyCreatedEvent(override val aggregateIdentifier: CompanyId, val name: String) : 6 | CompanyEvent(aggregateIdentifier) 7 | -------------------------------------------------------------------------------- /backend/services/company/application/src/test/kotlin/com/novatecgmbh/eventsourcing/axon/CompanyApplicationTests.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.junit.jupiter.api.Test 4 | import org.springframework.boot.test.context.SpringBootTest 5 | 6 | @SpringBootTest 7 | class CompanyApplicationTests { 8 | 9 | @Test 10 | fun contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /backend/services/project/application/src/test/kotlin/com/novatecgmbh/eventsourcing/axon/ProjectApplicationTests.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.junit.jupiter.api.Test 4 | import org.springframework.boot.test.context.SpringBootTest 5 | 6 | @SpringBootTest 7 | class ProjectApplicationTests { 8 | 9 | @Test 10 | fun contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /backend/services/user/application/src/test/kotlin/com/novatecgmbh/eventsourcing/axon/user/UserApplicationTest.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.user 2 | 3 | import org.junit.jupiter.api.Test 4 | import org.springframework.boot.test.context.SpringBootTest 5 | 6 | @SpringBootTest 7 | class UserApplicationTest { 8 | 9 | @Test 10 | fun contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /.idea/modules/api-gateway/graphql/com.novatecgmbh.eventsourcing.axon.api-gateway.graphql.test.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/apis/graphql/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/GraphQlApi.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class GraphQlApi 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/apis/rsocket/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/RsocketApi.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class RsocketApi 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/common/api/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/common/api/ExceptionStatusCode.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.common.api 2 | 3 | enum class ExceptionStatusCode { 4 | ALREADY_EXISTS, 5 | CONCURRENT_MODIFICATION, 6 | ILLEGAL_ARGUMENT, 7 | ILLEGAL_STATE, 8 | NOT_FOUND, 9 | UNKNOWN, 10 | ACCESS_DENIED, 11 | PRECONDITION_FAILED 12 | } 13 | -------------------------------------------------------------------------------- /frontend/src/theme.ts: -------------------------------------------------------------------------------- 1 | import {createTheme} from "@mui/material"; 2 | import {deDE} from "@mui/material/locale"; 3 | 4 | export const theme = createTheme({ 5 | shape: { 6 | borderRadius: 10, 7 | }, 8 | components: { 9 | MuiTextField: { 10 | defaultProps: { 11 | margin: 'normal' 12 | }, 13 | }, 14 | }, 15 | }, deDE); -------------------------------------------------------------------------------- /backend/settings.gradle.kts: -------------------------------------------------------------------------------- 1 | // This is an empty umbrella build including all the component builds. 2 | // This build is not necessarily needed. The component builds work independently. 3 | rootProject.name = "backend" 4 | 5 | includeBuild("platforms") 6 | includeBuild("build-logic") 7 | 8 | includeBuild("data-import") 9 | 10 | includeBuild("apis") 11 | includeBuild("services") 12 | 13 | includeBuild("clients") 14 | -------------------------------------------------------------------------------- /backend/services/project/application/src/main/resources/db/migration/postgres/V4__ACCESS_CONTROL_LIST_TABLE.sql: -------------------------------------------------------------------------------- 1 | create table project_acls 2 | ( 3 | aggregate_identifier varchar(255) not null, 4 | aggregate_type varchar(255) not null, 5 | permission varchar(255) not null, 6 | identifier varchar(255) not null, 7 | primary key (aggregate_identifier, aggregate_type, permission, identifier) 8 | ); -------------------------------------------------------------------------------- /backend/services/company/application/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/CompanyApplication.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class CompanyApplication 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/project/application/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/ProjectApplication.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class ProjectApplication 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/user/application/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/user/UserApplication.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.user 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class UserApplication 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/apis/rest/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/project/task/web/dto/UnassignTaskDto.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon.project.task.web.dto 2 | 3 | import com.novatecgmbh.eventsourcing.axon.project.task.api.TaskId 4 | import com.novatecgmbh.eventsourcing.axon.project.task.api.UnassignTaskCommand 5 | 6 | class UnassignTaskDto { 7 | fun toCommand(taskId: TaskId) = UnassignTaskCommand(identifier = taskId) 8 | } 9 | -------------------------------------------------------------------------------- /backend/data-import/initial/src/main/kotlin/com/novatecgmbh/eventsourcing/axon/DataImporterApplication.kt: -------------------------------------------------------------------------------- 1 | package com.novatecgmbh.eventsourcing.axon 2 | 3 | import org.springframework.boot.autoconfigure.SpringBootApplication 4 | import org.springframework.boot.runApplication 5 | 6 | @SpringBootApplication class DataImporterApplication 7 | 8 | fun main(args: Array) { 9 | runApplication(*args) 10 | } 11 | -------------------------------------------------------------------------------- /backend/services/company/application/src/main/resources/db/migration/postgres/V2__COMMAND_MODEL_TABLES.sql: -------------------------------------------------------------------------------- 1 | create table employee_unique_key 2 | ( 3 | identifier varchar(255) not null, 4 | company_id varchar(255) not null, 5 | user_id varchar(255) not null, 6 | primary key (identifier) 7 | ); 8 | 9 | alter table if exists employee_unique_key 10 | add constraint UKikkx651fvk6yi9iymk7620mgp unique (company_id, user_id); -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | -------------------------------------------------------------------------------- /backend/services/user/application/src/main/resources/db/migration/postgres/V3__QUERY_MODEL_TABLE.sql: -------------------------------------------------------------------------------- 1 | create table users 2 | ( 3 | identifier varchar(255) not null, 4 | email varchar(255) not null, 5 | external_user_id varchar(255) not null, 6 | firstname varchar(255) not null, 7 | lastname varchar(255) not null, 8 | telephone varchar(255) not null, 9 | primary key (identifier) 10 | ); -------------------------------------------------------------------------------- /backend/services/project/application/src/test/resources/application.yml: -------------------------------------------------------------------------------- 1 | spring: 2 | datasource: 3 | url: jdbc:h2:mem:db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE 4 | username: sa 5 | password: sa 6 | jpa: 7 | hibernate: 8 | ddl-auto: create-drop 9 | properties: 10 | hibernate: 11 | dialect: org.hibernate.dialect.H2Dialect 12 | flyway: 13 | enabled: false 14 | axon: 15 | axonserver: 16 | enabled: false -------------------------------------------------------------------------------- /.idea/modules/api-gateway/graph-ql/api-gateway.graphql.main.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/runConfigurations/Frontend.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |