# App Version Check Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Add an app-facing version check endpoint so the mobile app can compare its current version with the latest enabled app version record and prompt updates when they differ. **Architecture:** Store version records in the new `app_version` table. `AppController` validates the request, asks `IAppVersionService` for the latest enabled record by platform, and returns whether an update is available. **Tech Stack:** Spring Boot MVC, existing `R` response wrapper, MyBatis Plus `BaseMapperPlus`, JUnit 5, Mockito, AssertJ. ## Global Constraints - Keep the endpoint under `/app/v1`. - Use exact version equality: `currentVersion` differs from configured `latestVersion` means update is available. - Store version data in `app_version`; do not use `sys_config` for this feature. - Do not change unrelated schedule, MQTT, auth, or OSS upload behavior. --- ### Task 1: Version Check Contract **Files:** - Modify: `water-modules/water-app/src/test/java/org/dromara/app/controller/AppControllerTest.java` - Create: `water-modules/water-app/src/main/java/org/dromara/app/domain/AppVersion.java` - Create: `water-modules/water-app/src/main/java/org/dromara/app/domain/vo/AppVersionVo.java` - Create: `water-modules/water-app/src/main/java/org/dromara/app/mapper/AppVersionMapper.java` - Create: `water-modules/water-app/src/main/java/org/dromara/app/service/IAppVersionService.java` - Create: `water-modules/water-app/src/main/java/org/dromara/app/service/impl/AppVersionServiceImpl.java` - Modify: `water-modules/water-app/src/main/java/org/dromara/app/controller/AppController.java` - Create: `script/sql/update/add_app_version.sql` **Interfaces:** - Consumes: `IAppVersionService.queryLatestByPlatform(String platform)` - Produces: `AppController.checkVersion(String platform, String currentVersion): R` - Produces: `AppVersionVo` fields `platform`, `currentVersion`, `latestVersion`, `versionCode`, `updateAvailable`, `forceUpdate`, `downloadUrl`, `releaseNotes` - [ ] **Step 1: Write failing tests** Add `IAppVersionService` as a mocked dependency and add tests for update available, no update, unsupported platform, missing current version, and missing version record. - [ ] **Step 2: Run tests and verify RED** Run: ```bash mvn -pl water-modules/water-app -am "-DskipTests=false" "-Dmaven.test.skip=false" "-Dtest=AppControllerTest#checkVersion*" "-Dsurefire.failIfNoSpecifiedTests=false" test ``` Expected: compilation or test failure because `IAppVersionService` and table-backed implementation do not exist yet. - [ ] **Step 3: Implement minimal production code** Create `AppVersion`, `AppVersionVo`, `AppVersionMapper`, `IAppVersionService`, `AppVersionServiceImpl`, inject `IAppVersionService` into `AppController`, and keep `GET /checkVersion`. - [ ] **Step 4: Run targeted tests and verify GREEN** Run: ```bash mvn -pl water-modules/water-app -am "-DskipTests=false" "-Dmaven.test.skip=false" "-Dtest=AppControllerTest#checkVersion*" "-Dsurefire.failIfNoSpecifiedTests=false" test ``` Expected: targeted version check tests pass. - [ ] **Step 5: Run compile/package verification** Run: ```bash mvn -pl water-modules/water-app -am "-DskipTests" package ``` Expected: module and dependencies compile/package successfully.