Skip to content

Commit 2c3e831

Browse files
marc0derclaude
andcommitted
refactor: implement dependency injection for HealthRepository
Co-Authored-By: Claude <[email protected]>
1 parent 98fbaf4 commit 2c3e831

File tree

5 files changed

+11
-12
lines changed

5 files changed

+11
-12
lines changed

prompts/03-health_check_endpoint-todo.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Consider the following rules during execution of the tasks:
66

77
### Task 1: Implement Dependency Injection for HealthRepository
88

9-
- [ ] Refactor dependency injection to properly inject HealthRepository interface
9+
- [X] Refactor dependency injection to properly inject HealthRepository interface
1010

1111
**Prompt**: Refactor the dependency injection pattern for HealthRepository to follow the same pattern as VersionsRepository. Address the TODO comments in `src/main/kotlin/io/sdkman/Application.kt` at line 20, `src/main/kotlin/io/sdkman/plugins/Routing.kt` at line 32, and line 34. The changes should: (1) Instantiate the HealthRepository in the Application.kt file and pass it to configureRouting function, (2) Update the configureRouting function signature to accept HealthRepository by interface rather than instantiating HealthRepositoryImpl directly, and (3) Remove the direct instantiation of HealthRepositoryImpl from the routing configuration. Follow the existing dependency injection pattern used for VersionsRepository.
1212

@@ -35,4 +35,4 @@ The following workflow applies when executing this TODO list:
3535
- **Ask me to review the task once you have completed and then WAIT FOR ME**
3636
- Mark the TODO item as complete with [X]
3737
- Commit the change to Git when I've approved and/or amended the code
38-
- Move on to the next task
38+
- Move on to the next task

src/main/kotlin/io/sdkman/Application.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import io.ktor.server.application.*
44
import io.sdkman.config.configureAppConfig
55
import io.sdkman.plugins.*
66
import io.sdkman.repos.VersionsRepository
7+
import io.sdkman.repos.HealthRepositoryImpl
78

89
fun main(args: Array<String>) = io.ktor.server.netty.EngineMain.main(args)
910

@@ -17,6 +18,5 @@ fun Application.module() {
1718
configureSerialization()
1819
configureBasicAuthentication(appConfig.apiAuthenticationConfig)
1920

20-
//TODO: Instantiate the HealthRepository here and inject
21-
configureRouting(VersionsRepository())
21+
configureRouting(VersionsRepository(), HealthRepositoryImpl())
2222
}

src/main/kotlin/io/sdkman/plugins/Routing.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import io.sdkman.domain.HealthStatus
1212
import io.sdkman.domain.Platform
1313
import io.sdkman.domain.UniqueVersion
1414
import io.sdkman.domain.Version
15-
import io.sdkman.repos.HealthRepositoryImpl
15+
import io.sdkman.domain.HealthRepository
1616
import io.sdkman.repos.VersionsRepository
1717
import io.sdkman.validation.VersionValidator
1818
import kotlinx.serialization.Serializable
@@ -29,10 +29,7 @@ data class HealthCheckResponse(
2929
val message: String? = null
3030
)
3131

32-
//TODO: Inject HealthRepository by interface
33-
fun Application.configureRouting(repo: VersionsRepository) {
34-
//TODO: use dependency injection like VersionRepository
35-
val healthRepo = HealthRepositoryImpl()
32+
fun Application.configureRouting(repo: VersionsRepository, healthRepo: HealthRepository) {
3633

3734
fun ApplicationRequest.visibleQueryParam(): Option<Boolean> =
3835
when (this.queryParameters["visible"].toOption()) {

src/test/kotlin/io/sdkman/HealthCheckApiSpec.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import io.sdkman.plugins.HealthCheckResponse
1616
import io.sdkman.plugins.configureDatabase
1717
import io.sdkman.plugins.configureRouting
1818
import io.sdkman.repos.VersionsRepository
19+
import io.sdkman.repos.HealthRepositoryImpl
1920
import io.sdkman.support.withCleanDatabase
2021
import kotlinx.serialization.json.Json
2122
import org.junit.jupiter.api.fail
@@ -28,7 +29,7 @@ class HealthCheckApiSpec : ShouldSpec({
2829
application {
2930
val dbConfig = configureAppConfig(environment).databaseConfig
3031
configureDatabase(dbConfig)
31-
configureRouting(VersionsRepository())
32+
configureRouting(VersionsRepository(), HealthRepositoryImpl())
3233
}
3334

3435
client.get("/meta/health").apply {
@@ -50,7 +51,7 @@ class HealthCheckApiSpec : ShouldSpec({
5051
val dbConfig = configureAppConfig(environment).databaseConfig
5152
val badDbConfig = dbConfig.copy(port = 9999)
5253
configureDatabase(badDbConfig)
53-
configureRouting(VersionsRepository())
54+
configureRouting(VersionsRepository(), HealthRepositoryImpl())
5455
}
5556

5657
client.get("/meta/health").apply {

src/test/kotlin/io/sdkman/support/Application.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@ import io.sdkman.config.configureAppConfig
55
import io.sdkman.plugins.configureDatabase
66
import io.sdkman.plugins.configureRouting
77
import io.sdkman.repos.VersionsRepository
8+
import io.sdkman.repos.HealthRepositoryImpl
89

910
fun withTestApplication(fn: suspend (ApplicationTestBuilder.() -> Unit)) {
1011
testApplication {
1112
application {
1213
val dbConfig = configureAppConfig(environment).databaseConfig
1314
configureDatabase(dbConfig)
14-
configureRouting(VersionsRepository())
15+
configureRouting(VersionsRepository(), HealthRepositoryImpl())
1516
}
1617
fn(this)
1718
}

0 commit comments

Comments
 (0)