Skip to content

Commit 90e1d91

Browse files
committed
Add custom suffix to generated types
Add a new configuration option `typeSuffix` to the `CodeGenConfig` class and update the code generation methods to append the `typeSuffix` to the generated type names. * **CodeGenConfig**: Add a new configuration option `typeSuffix` to the `CodeGenConfig` class. * **Java DataTypeGenerator**: Update the `generate` method to append the `typeSuffix` to the generated type names. * **Kotlin DataTypeGenerator**: Update the `generate` method to append the `typeSuffix` to the generated type names.
1 parent 2603477 commit 90e1d91

File tree

27 files changed

+623
-72
lines changed

27 files changed

+623
-72
lines changed

graphql-dgs-codegen-core/src/integTest/kotlin/com/netflix/graphql/dgs/codegen/Kotlin2CodeGenTest.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,17 @@ class Kotlin2CodeGenTest {
6363
"Decimal" to "java.math.BigDecimal"
6464
)
6565
else -> emptyMap()
66-
}
66+
},
67+
typePrefix = when (testName) {
68+
"dataClassWithPrefix" -> "Dgs"
69+
"inputWithPrefix" -> "Dgs"
70+
else -> ""
71+
},
72+
typeSuffix = when (testName) {
73+
"dataClassWithSuffix" -> "Type"
74+
"inputWithSuffix" -> "Type"
75+
else -> ""
76+
},
6777
)
6878
).generate()
6979

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected
2+
3+
import com.netflix.graphql.dgs.client.codegen.InputValueSerializerInterface
4+
import com.netflix.graphql.dgs.codegen.GraphQLProjection
5+
import com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.client.QueryProjection
6+
import graphql.language.OperationDefinition
7+
import kotlin.String
8+
9+
public object DgsClient {
10+
public fun buildQuery(inputValueSerializer: InputValueSerializerInterface? = null,
11+
_projection: QueryProjection.() -> QueryProjection
12+
): String =
13+
GraphQLProjection.asQuery(OperationDefinition.Operation.QUERY,
14+
QueryProjection(inputValueSerializer), _projection)
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected
2+
3+
import kotlin.String
4+
5+
public object DgsConstants {
6+
public const val QUERY_TYPE: String = "Query"
7+
8+
public object QUERY {
9+
public const val TYPE_NAME: String = "Query"
10+
11+
public const val Search: String = "search"
12+
13+
public object SEARCH_INPUT_ARGUMENT {
14+
public const val MovieFilter: String = "movieFilter"
15+
}
16+
}
17+
18+
public object MOVIE {
19+
public const val TYPE_NAME: String = "Movie"
20+
21+
public const val Title: String = "title"
22+
}
23+
24+
public object MOVIEFILTER {
25+
public const val TYPE_NAME: String = "MovieFilter"
26+
27+
public const val TitleFilter: String = "titleFilter"
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.client
2+
3+
import com.netflix.graphql.dgs.client.codegen.InputValueSerializerInterface
4+
import com.netflix.graphql.dgs.codegen.GraphQLProjection
5+
6+
public class MovieProjection(
7+
inputValueSerializer: InputValueSerializerInterface? = null,
8+
) : GraphQLProjection(inputValueSerializer) {
9+
public val title: MovieProjection
10+
get() {
11+
field("title")
12+
return this
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.client
2+
3+
import com.netflix.graphql.dgs.client.codegen.InputValueSerializerInterface
4+
import com.netflix.graphql.dgs.codegen.GraphQLProjection
5+
import com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.types.DgsMovieFilter
6+
import kotlin.String
7+
8+
public class QueryProjection(
9+
inputValueSerializer: InputValueSerializerInterface? = null,
10+
) : GraphQLProjection(inputValueSerializer) {
11+
public fun search(
12+
movieFilter: DgsMovieFilter,
13+
_alias: String? = null,
14+
_projection: MovieProjection.() -> MovieProjection,
15+
): QueryProjection {
16+
field(_alias, "search", MovieProjection(inputValueSerializer), _projection, "movieFilter" to
17+
movieFilter)
18+
return this
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.types
2+
3+
import com.fasterxml.jackson.`annotation`.JsonIgnoreProperties
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
5+
import com.fasterxml.jackson.`annotation`.JsonTypeInfo
6+
import com.fasterxml.jackson.databind.`annotation`.JsonDeserialize
7+
import com.fasterxml.jackson.databind.`annotation`.JsonPOJOBuilder
8+
import com.netflix.graphql.dgs.codegen.cases.dataClassDocs.expected.types.Movie
9+
import java.lang.IllegalStateException
10+
import kotlin.String
11+
import kotlin.jvm.JvmName
12+
13+
/**
14+
* Movies are fun to watch.
15+
* They also work well as examples in GraphQL.
16+
*/
17+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
18+
@JsonDeserialize(builder = DgsMovie.Builder::class)
19+
public class DgsMovie(
20+
title: () -> String? = titleDefault,
21+
) {
22+
private val __title: () -> String? = title
23+
24+
@get:JvmName("getTitle")
25+
public val title: String?
26+
get() = __title.invoke()
27+
28+
public companion object {
29+
private val titleDefault: () -> String? =
30+
{ throw IllegalStateException("Field `title` was not requested") }
31+
}
32+
33+
@JsonPOJOBuilder
34+
@JsonIgnoreProperties("__typename")
35+
public class Builder {
36+
private var title: () -> String? = titleDefault
37+
38+
@JsonProperty("title")
39+
public fun withTitle(title: String?): Builder = this.apply {
40+
this.title = { title }
41+
}
42+
43+
public fun build(): Movie = Movie(
44+
title = title,
45+
)
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.types
2+
3+
import com.fasterxml.jackson.`annotation`.JsonCreator
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
5+
import com.netflix.graphql.dgs.codegen.GraphQLInput
6+
import kotlin.Any
7+
import kotlin.Pair
8+
import kotlin.String
9+
import kotlin.collections.List
10+
11+
/**
12+
* Example filter for Movies.
13+
*
14+
* It takes a title and such.
15+
*/
16+
public class DgsMovieFilter @JsonCreator constructor(
17+
@JsonProperty("titleFilter")
18+
public val titleFilter: String? = default<DgsMovieFilter, String?>("titleFilter", null),
19+
) : GraphQLInput() {
20+
override fun fields(): List<Pair<String, Any?>> = listOf("titleFilter" to titleFilter)
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.netflix.graphql.dgs.codegen.cases.dataClassWithPrefix.expected.types
2+
3+
import com.fasterxml.jackson.`annotation`.JsonIgnoreProperties
4+
import com.fasterxml.jackson.`annotation`.JsonProperty
5+
import com.fasterxml.jackson.`annotation`.JsonTypeInfo
6+
import com.fasterxml.jackson.databind.`annotation`.JsonDeserialize
7+
import com.fasterxml.jackson.databind.`annotation`.JsonPOJOBuilder
8+
import java.lang.IllegalStateException
9+
import kotlin.jvm.JvmName
10+
11+
@JsonTypeInfo(use = JsonTypeInfo.Id.NONE)
12+
@JsonDeserialize(builder = DgsQuery.Builder::class)
13+
public class DgsQuery(
14+
search: () -> DgsMovie? = searchDefault,
15+
) {
16+
private val __search: () -> DgsMovie? = search
17+
18+
@get:JvmName("getSearch")
19+
public val search: DgsMovie?
20+
get() = __search.invoke()
21+
22+
public companion object {
23+
private val searchDefault: () -> DgsMovie? =
24+
{ throw IllegalStateException("Field `search` was not requested") }
25+
}
26+
27+
@JsonPOJOBuilder
28+
@JsonIgnoreProperties("__typename")
29+
public class Builder {
30+
private var search: () -> DgsMovie? = searchDefault
31+
32+
@JsonProperty("search")
33+
public fun withSearch(search: DgsMovie?): Builder = this.apply {
34+
this.search = { search }
35+
}
36+
37+
public fun build(): DgsQuery = DgsQuery(
38+
search = search,
39+
)
40+
}
41+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
type Query {
2+
search(movieFilter: MovieFilter!): Movie
3+
}
4+
5+
"""
6+
Movies are fun to watch.
7+
They also work well as examples in GraphQL.
8+
"""
9+
type Movie {
10+
title: String
11+
}
12+
13+
"""
14+
Example filter for Movies.
15+
16+
It takes a title and such.
17+
"""
18+
input MovieFilter {
19+
titleFilter: String
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.netflix.graphql.dgs.codegen.cases.inputWithPrefix.expected
2+
3+
import com.netflix.graphql.dgs.client.codegen.InputValueSerializerInterface
4+
import com.netflix.graphql.dgs.codegen.GraphQLProjection
5+
import com.netflix.graphql.dgs.codegen.cases.inputWithPrefix.expected.client.QueryProjection
6+
import graphql.language.OperationDefinition
7+
import kotlin.String
8+
9+
public object DgsClient {
10+
public fun buildQuery(inputValueSerializer: InputValueSerializerInterface? = null,
11+
_projection: QueryProjection.() -> QueryProjection): String =
12+
GraphQLProjection.asQuery(OperationDefinition.Operation.QUERY,
13+
QueryProjection(inputValueSerializer), _projection)
14+
}

0 commit comments

Comments
 (0)