Skip to content

feat: integrate filc Chronos backend via OpenAPI-generated Kotlin Multiplatform client#8

Merged
merenyimiklos merged 2 commits intomainfrom
copilot/integrate-backend-with-app
Mar 13, 2026
Merged

feat: integrate filc Chronos backend via OpenAPI-generated Kotlin Multiplatform client#8
merenyimiklos merged 2 commits intomainfrom
copilot/integrate-backend-with-app

Conversation

Copy link
Contributor

Copilot AI commented Mar 11, 2026

The mergen KMP app had no networking layer and no connection to the filcdev/filc Chronos backend. This adds a Flutter-style OpenAPI code generation workflow for KMP — update the spec, run a task, get a typed client.

OpenAPI spec

  • openapi/filc-openapi.json — OpenAPI 3.0 spec covering all public Chronos endpoints: ping, timetable (lessons, substitutions, moved lessons, teachers, classrooms, cohorts), cohort, news (announcements, system messages, blogs), users

Build system

  • Ktor 3.1.3 added as multiplatform HTTP client (okhttp for Android, darwin for iOS)
  • kotlinx.serialization 1.7.3 + kotlinx.coroutines 1.9.0 added to commonMain
  • OpenAPI Generator 7.12.0 Gradle plugin registered; generateFilcApiClient task configured with kotlin / multiplatform generator pointing at the spec file

To regenerate after a spec change:

./gradlew generateFilcApiClient

Generated client (committed to source)

composeApp/src/commonMain/kotlin/hu/petrik/filcapp/api/ contains the generated output, immediately compilable without running the generator:

Package Contents
client/ PingApi, TimetableApi, CohortApi, NewsApi, UsersApi
model/ Timetable, Lesson, Substitution, MovedLesson, Cohort, Teacher, Classroom, Announcement, Blog, SystemMessage, User, …
infrastructure/ ApiClient, RequestConfig, HttpResponse, …
auth/ ApiKeyAuth, HttpBearerAuth, HttpBasicAuth, OAuth

Bug fixes on generated code

  • Cookie auth: openapi-generator 7.12.0 incorrectly emits ApiKeyAuth("query", …) for cookie-scheme security. Fixed to ApiKeyAuth("cookie", …) and added cookie handling to ApiKeyAuth.apply() — without this, every authenticated request would silently fail.
  • Duplicate @Serializable: generator bug with serializationLibrary=kotlinx_serialization double-annotates data classes. Cleaned up across all model files.

Misc

  • composeApp/.openapi-generator-ignore — prevents the generator from overwriting build.gradle.kts, settings.gradle.kts, and platform source sets on regeneration
  • .gitignore — excludes .openapi-generator/ metadata directory

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • dl.google.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED -Xmx4096M -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.14.3-bin/cv11ve7ro1n3o1j4so8xd9n66/gradle-8.14.3/lib/gradle-daemon-main-8.14.3.jar (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

…rm client

Co-authored-by: merenyimiklos <89610165+merenyimiklos@users.noreply.github.com>
Copilot AI changed the title [WIP] Integrate backend service with mobile application feat: integrate filc Chronos backend via OpenAPI-generated Kotlin Multiplatform client Mar 11, 2026
Copilot stopped work on behalf of merenyimiklos due to an error March 12, 2026 06:25
@busyLambda busyLambda self-requested a review March 13, 2026 12:38
@busyLambda busyLambda marked this pull request as ready for review March 13, 2026 12:38
@merenyimiklos merenyimiklos self-requested a review March 13, 2026 12:50
@merenyimiklos merenyimiklos requested review from merenyimiklos and removed request for busyLambda March 13, 2026 12:51
Copy link
Contributor

@busyLambda busyLambda left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, ship it!

@merenyimiklos merenyimiklos merged commit 35c0685 into main Mar 13, 2026
3 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants