Skip to content

Commit 039f618

Browse files
Fix Nested DTO's
1 parent cdf963e commit 039f618

6 files changed

Lines changed: 46 additions & 3 deletions

File tree

convertible-core/src/main/kotlin/pro/vlprojects/convertible/core/processor/ConvertibleProcessor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class ConvertibleProcessor(
4343
.forEach { definition ->
4444
check(strategy.supports(definition)) { "The strategy does not support the definition: $definition" }
4545

46-
val targetPackage = "${definition.objectClassName.packageName}.${definition.scope.lowercase()}"
46+
val targetPackage = definition.objectClassName.packageName
4747
val specification = strategy.build(definition)
4848

4949
specification.writeWith(generator, targetPackage, definition.source)

convertible-jpa/src/main/kotlin/pro/vlprojects/convertible/jpa/JpaAttributeConverter.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ class JpaAttributeConverter : ConvertibleStrategy {
7171
val nullable = definition.nullable
7272
val safeAccess = if (definition.nullable) "?." else "."
7373
val isConstructor = definition.factoryAccessor.isConstructor
74-
val factoryCall = if (isConstructor) "::${definition.objectClassName.simpleName}" else "${definition.objectClassName.simpleName}::${definition.factoryAccessor.name}"
74+
val method = definition.objectClassName.simpleNames.joinToString(".")
75+
val factoryCall = if (isConstructor) "::$method" else "$method::${definition.factoryAccessor.name}"
7576
val expression = "source${safeAccess}let($factoryCall)"
7677

7778
return FunSpec

convertible-jpa/src/test/kotlin/pro/vlprojects/convertible/jpa/JpaAttributeConverterTests.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ class JpaAttributeConverterTests {
128128
TestCase("Prefix.kt", "SomePrefixJpaConverter.kt"),
129129
)
130130
),
131+
Arguments.of(
132+
Named.of(
133+
"Nested. Factory declared. Value declared",
134+
TestCase("Base.kt", "NestedJpaConverter.kt"),
135+
)
136+
),
131137
)
132138
}
133139

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.vo
2+
3+
import jakarta.persistence.AttributeConverter
4+
import jakarta.persistence.Converter
5+
import kotlin.String
6+
import org.springframework.stereotype.Component
7+
8+
@Component
9+
@Converter(autoApply = true)
10+
public class NestedJpaConverter : AttributeConverter<Base.Nested, String> {
11+
override fun convertToDatabaseColumn(attribute: Base.Nested): String = attribute.value
12+
13+
override fun convertToEntityAttribute(source: String): Base.Nested = source.let(Base.Nested::from)
14+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.vo
2+
3+
import pro.vlprojects.convertible.core.annotation.Convertible
4+
import pro.vlprojects.convertible.core.annotation.ConvertibleFactory
5+
import pro.vlprojects.convertible.core.annotation.ConvertibleValue
6+
import pro.vlprojects.convertible.core.annotation.Scope
7+
8+
data class Base(
9+
val nested: Nested,
10+
) {
11+
@Convertible(scopes = [Scope.JPA])
12+
data class Nested(val raw: String) {
13+
14+
@ConvertibleValue(scopes = [Scope.JPA])
15+
val value = raw
16+
17+
companion object Factory {
18+
@ConvertibleFactory(scopes = [Scope.JPA])
19+
fun from(input: String) = Nested(input)
20+
}
21+
}
22+
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
group=pro.vlprojects
2-
version=0.1.1
2+
version=0.1.2
33
kotlin.version=2.1.21
44
kotlin.code.style=official

0 commit comments

Comments
 (0)