From cf1f96bc3cca30f56c8e5978368954dfd4e3bcff Mon Sep 17 00:00:00 2001 From: Florent CHAMPIGNY Date: Thu, 31 Jul 2025 23:09:40 +0200 Subject: [PATCH] feat: graphql (#14) Co-authored-by: Florent Champigny --- .github/workflows/publish.yml | 2 +- FloconAndroid/.idea/gradle.xml | 1 + FloconAndroid/app/build.gradle.kts | 25 +- .../app/src/main/graphql/GetUserInfo.graphql | 11 + .../main/graphql/GetUserRepositories.graphql | 21 ++ .../app/src/main/graphql/schema.json | 1 + .../flocon/myapplication/MainActivity.kt | 113 ++++--- .../myapplication/graphql/GraphQlTester.kt | 54 ++++ .../io/github/openflocon/flocon/Protocol.kt | 8 + FloconAndroid/gradle.properties | 2 +- FloconAndroid/gradle/libs.versions.toml | 4 + FloconAndroid/graphql-interceptor/.gitignore | 1 + .../graphql-interceptor/build.gradle.kts | 92 ++++++ .../graphql-interceptor/consumer-rules.pro | 0 .../graphql-interceptor/proguard-rules.pro | 21 ++ .../src/main/AndroidManifest.xml | 3 + .../flocon/okhttp/FloconApolloInterceptor.kt | 91 ++++++ .../flocon/okhttp/model/FloconGrpcRequest.kt | 41 +++ FloconAndroid/publishLocal.sh | 4 +- FloconAndroid/settings.gradle.kts | 1 + .../17.json | 117 +++++++- .../composeResources/drawable/graphql.png | Bin 0 -> 21824 bytes .../flocondesktop/common/db/AppDatabase.kt | 6 +- .../flocondesktop/common/db/RoomModule.kt | 3 + .../flocondesktop/features/FeaturesModule.kt | 2 + .../graphql/data/GraphQlRepositoryImpl.kt | 110 +++++++ .../data/datasource/LocalGraphQlDataSource.kt | 22 ++ .../data/datasource/room/GraphQlDao.kt | 69 +++++ .../room/LocalGraphQlDataSourceImpl.kt | 50 +++ .../data/datasource/room/mapper/Mapper.kt | 56 ++++ .../room/model/GraphQlRequestEntity.kt | 37 +++ .../graphql/data/di/GRPCDataModule.kt | 22 ++ .../data/mapper/RemoteToDomainMapper.kt | 50 +++ .../model/FloconGraphQlRequestDataModel.kt | 21 ++ .../features/graphql/di/GraphQlModule.kt | 15 + .../domain/DeleteGraphQlRequestUseCase.kt | 15 + .../DeleteGraphQlRequestsBeforeUseCase.kt | 15 + .../ObserveGraphQlRequestsByIdUseCase.kt | 22 ++ .../domain/ObserveGraphQlRequestsUseCase.kt | 21 ++ ...esetCurrentDeviceGraphQlRequestsUseCase.kt | 14 + .../graphql/domain/di/GRPCDomainModule.kt | 18 ++ .../domain/model/FloconGraphQlRequestInfos.kt | 24 ++ .../domain/model/GraphQlHeaderDomainModel.kt | 6 + .../domain/model/GraphQlRequestDomainModel.kt | 6 + .../graphql/domain/model/GraphQlRequestId.kt | 3 + .../domain/repository/GraphQlRepository.kt | 15 + .../features/graphql/ui/GraphQlViewModel.kt | 116 +++++++ .../features/graphql/ui/di/GRPCUiModule.kt | 10 + .../ui/mapper/NetworkDetailUiMapper.kt | 37 +++ .../graphql/ui/mapper/NetworkUiMapper.kt | 33 ++ .../graphql/ui/model/GraphQlDetailHeaderUi.kt | 14 + .../ui/model/GraphQlDetailViewState.kt | 20 ++ .../graphql/ui/model/GraphQlItemViewState.kt | 26 ++ .../graphql/ui/model/GraphQlMethodUi.kt | 17 ++ .../graphql/ui/model/GraphQlStatusUi.kt | 9 + .../ui/model/OnGraphQlItemUserAction.kt | 19 ++ .../graphql/ui/view/GraphQlDetailView.kt | 284 ++++++++++++++++++ .../graphql/ui/view/GraphQlItemView.kt | 179 +++++++++++ .../features/graphql/ui/view/GraphQlScreen.kt | 154 ++++++++++ .../ui/view/components/DetailHeadersView.kt | 80 +++++ .../graphql/ui/view/components/MethodView.kt | 65 ++++ .../graphql/ui/view/components/StatusView.kt | 54 ++++ .../ui/view/header/GraphQlFilterBar.kt | 79 +++++ .../ui/view/header/NetworkItemHeaderView.kt | 61 ++++ .../features/grpc/data/GRPCRepositoryImpl.kt | 1 + .../images/data/ImagesRepositoryImpl.kt | 4 +- .../data/FloconHttpRequestGenerator.kt | 18 +- .../network/data/NetworkRepositoryImpl.kt | 34 +-- .../data/datasource/local/mapper/Mapper.kt | 41 ++- .../domain/GenerateCurlCommandUseCase.kt | 6 +- ...fos.kt => FloconHttpRequestDomainModel.kt} | 8 +- .../features/network/ui/NetworkViewModel.kt | 2 +- .../ui/mapper/NetworkDetailUiMapper.kt | 22 +- .../network/ui/mapper/NetworkUiMapper.kt | 17 +- .../network/ui/view/NetworkItemView.kt | 2 +- .../flocondesktop/main/ui/MainScreen.kt | 13 +- .../flocondesktop/main/ui/MainViewModel.kt | 7 +- .../flocondesktop/main/ui/model/SubScreen.kt | 2 +- .../main/ui/view/SubScreenSelectorItem.kt | 3 + .../main/ui/view/leftpannel/LeftPannelView.kt | 14 +- .../com/florent37/flocondesktop/Protocol.kt | 8 + 81 files changed, 2539 insertions(+), 155 deletions(-) create mode 100644 FloconAndroid/app/src/main/graphql/GetUserInfo.graphql create mode 100644 FloconAndroid/app/src/main/graphql/GetUserRepositories.graphql create mode 100644 FloconAndroid/app/src/main/graphql/schema.json create mode 100644 FloconAndroid/app/src/main/java/io/github/openflocon/flocon/myapplication/graphql/GraphQlTester.kt create mode 100644 FloconAndroid/graphql-interceptor/.gitignore create mode 100644 FloconAndroid/graphql-interceptor/build.gradle.kts create mode 100644 FloconAndroid/graphql-interceptor/consumer-rules.pro create mode 100644 FloconAndroid/graphql-interceptor/proguard-rules.pro create mode 100644 FloconAndroid/graphql-interceptor/src/main/AndroidManifest.xml create mode 100644 FloconAndroid/graphql-interceptor/src/main/java/io/github/openflocon/flocon/okhttp/FloconApolloInterceptor.kt create mode 100644 FloconAndroid/graphql-interceptor/src/main/java/io/github/openflocon/flocon/okhttp/model/FloconGrpcRequest.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/composeResources/drawable/graphql.png create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/GraphQlRepositoryImpl.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/datasource/LocalGraphQlDataSource.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/datasource/room/GraphQlDao.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/datasource/room/LocalGraphQlDataSourceImpl.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/datasource/room/mapper/Mapper.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/datasource/room/model/GraphQlRequestEntity.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/di/GRPCDataModule.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/mapper/RemoteToDomainMapper.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/data/model/FloconGraphQlRequestDataModel.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/di/GraphQlModule.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/DeleteGraphQlRequestUseCase.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/DeleteGraphQlRequestsBeforeUseCase.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/ObserveGraphQlRequestsByIdUseCase.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/ObserveGraphQlRequestsUseCase.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/ResetCurrentDeviceGraphQlRequestsUseCase.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/di/GRPCDomainModule.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/model/FloconGraphQlRequestInfos.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/model/GraphQlHeaderDomainModel.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/model/GraphQlRequestDomainModel.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/model/GraphQlRequestId.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/domain/repository/GraphQlRepository.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/GraphQlViewModel.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/di/GRPCUiModule.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/mapper/NetworkDetailUiMapper.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/mapper/NetworkUiMapper.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/GraphQlDetailHeaderUi.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/GraphQlDetailViewState.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/GraphQlItemViewState.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/GraphQlMethodUi.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/GraphQlStatusUi.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/model/OnGraphQlItemUserAction.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/GraphQlDetailView.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/GraphQlItemView.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/GraphQlScreen.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/components/DetailHeadersView.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/components/MethodView.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/components/StatusView.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/header/GraphQlFilterBar.kt create mode 100644 FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/graphql/ui/view/header/NetworkItemHeaderView.kt rename FloconDesktop/composeApp/src/commonMain/kotlin/com/florent37/flocondesktop/features/network/domain/model/{FloconHttpRequestInfos.kt => FloconHttpRequestDomainModel.kt} (82%) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 263107f0..d71b4342 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -19,7 +19,7 @@ jobs: distribution: 'zulu' java-version: 21 - name: Publish to MavenCentral - run: ./gradlew :core:publishToMavenCentral :okhttp-interceptor:publishToMavenCentral :grpc-interceptor:publishToMavenCentral --no-configuration-cache + run: ./gradlew :core:publishToMavenCentral :okhttp-interceptor:publishToMavenCentral :grpc-interceptor:publishToMavenCentral :graphql-interceptor:publishToMavenCentral --no-configuration-cache working-directory: FloconAndroid env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALUSERNAME }} diff --git a/FloconAndroid/.idea/gradle.xml b/FloconAndroid/.idea/gradle.xml index 4140775b..ac540f22 100644 --- a/FloconAndroid/.idea/gradle.xml +++ b/FloconAndroid/.idea/gradle.xml @@ -12,6 +12,7 @@