Skip to content

Commit dc7a88d

Browse files
committed
Merge codegen-kotlin Phase H — snapshot fixtures for new features
Adds 4 fixture-driven snapshot regression-locks covering Phases A-G: - entity-with-fk: relationship.composition + FK column with onDelete CASCADE - payload-with-origins: passthrough + aggregate count → typed payload props - entity-with-enum: typed Kotlin enum class + Exposed enumerationByName column - entity-with-storage: field.object @storage flattened (prefixed cols) + jsonb 53 module tests green (49 unit + 4 new snapshot fixtures = 6 total snapshot cases). Snapshot inspection confirmed: - FK references use proper ReferenceOption.CASCADE - Enum: separate <Entity><Field>.kt with @serializable, table uses enumerationByName - Flattened storage: snake_case columns (address_street/city/zip) with right lengths - JSONB: jsonb(name, Json.encodeToString, Json.decodeFromString) - Payload origins: passthrough resolves source type; count aggregate → Long
2 parents 39e5be9 + a707984 commit dc7a88d

20 files changed

Lines changed: 263 additions & 0 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "generators": ["entity", "table"] }
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::game",
4+
"children": [
5+
{ "object.entity": { "name": "Player", "children": [
6+
{ "field.long": { "name": "id" } },
7+
{ "field.string": { "name": "username", "@maxLength": 50 } },
8+
{ "field.enum": { "name": "status", "@values": ["ACTIVE", "INACTIVE", "BANNED"] } },
9+
{ "source.rdb": { "@table": "players" } },
10+
{ "identity.primary": { "@fields": "id", "@generation": "increment" } }
11+
] } }
12+
]
13+
}
14+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "generators": ["entity", "table"] }
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::blog",
4+
"children": [
5+
{ "object.entity": { "name": "Author", "children": [
6+
{ "field.long": { "name": "id" } },
7+
{ "field.string": { "name": "name", "@maxLength": 100 } },
8+
{ "source.rdb": { "@table": "authors" } },
9+
{ "identity.primary": { "@fields": "id", "@generation": "increment" } }
10+
] } },
11+
{ "object.entity": { "name": "Post", "children": [
12+
{ "field.long": { "name": "id" } },
13+
{ "field.string": { "name": "title", "@maxLength": 255 } },
14+
{ "relationship.composition": { "name": "author",
15+
"@objectRef": "Author",
16+
"@onDelete": "cascade" } },
17+
{ "source.rdb": { "@table": "posts" } },
18+
{ "identity.primary": { "@fields": "id", "@generation": "increment" } }
19+
] } }
20+
]
21+
}
22+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "generators": ["entity", "table"] }
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::commerce",
4+
"children": [
5+
{ "object.value": { "name": "Address", "children": [
6+
{ "field.string": { "name": "street", "@maxLength": 200 } },
7+
{ "field.string": { "name": "city", "@maxLength": 100 } },
8+
{ "field.string": { "name": "zip", "@maxLength": 20 } }
9+
] } },
10+
{ "object.value": { "name": "UserMetadata", "children": [
11+
{ "field.string": { "name": "locale" } },
12+
{ "field.string": { "name": "timezone" } }
13+
] } },
14+
{ "object.entity": { "name": "User", "children": [
15+
{ "field.long": { "name": "id" } },
16+
{ "field.string": { "name": "email", "@maxLength": 255 } },
17+
{ "field.object": { "name": "address",
18+
"@objectRef": "Address",
19+
"@storage": "flattened" } },
20+
{ "field.object": { "name": "preferences",
21+
"@objectRef": "UserMetadata",
22+
"@storage": "jsonb" } },
23+
{ "source.rdb": { "@table": "users" } },
24+
{ "identity.primary": { "@fields": "id", "@generation": "increment" } }
25+
] } }
26+
]
27+
}
28+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "generators": ["payload"] }
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"metadata.root": {
3+
"package": "acme::ai",
4+
"children": [
5+
{ "object.entity": { "name": "Author", "children": [
6+
{ "field.long": { "name": "id" } },
7+
{ "field.string": { "name": "name" } },
8+
{ "field.string": { "name": "bio" } },
9+
{ "relationship.association": { "name": "posts", "@objectRef": "Post" } }
10+
] } },
11+
{ "object.entity": { "name": "Post", "children": [
12+
{ "field.long": { "name": "id" } },
13+
{ "field.string": { "name": "title" } },
14+
{ "relationship.composition": { "name": "author", "@objectRef": "Author" } }
15+
] } },
16+
{ "object.value": { "name": "AuthorReport", "children": [
17+
{ "field.string": { "name": "name", "children": [
18+
{ "origin.passthrough": { "@from": "Author.name" } }
19+
] } },
20+
{ "field.long": { "name": "postCount", "children": [
21+
{ "origin.aggregate": { "@agg": "count", "@of": "Post.id", "@via": "Author.posts" } }
22+
] } }
23+
] } },
24+
{ "template.prompt": { "name": "AuthorBio",
25+
"@payloadRef": "AuthorReport",
26+
"@textRef": "ai/bio" } }
27+
]
28+
}
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package acme.game
2+
3+
import kotlin.Long
4+
import kotlin.String
5+
import kotlinx.serialization.Serializable
6+
7+
/**
8+
* GENERATED — do not hand-edit. Regenerated from metadata.
9+
*/
10+
@Serializable
11+
public data class Player(
12+
public val id: Long? = null,
13+
public val username: String? = null,
14+
public val status: PlayerStatus? = null,
15+
)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package acme.game
2+
3+
import kotlinx.serialization.Serializable
4+
5+
/**
6+
* GENERATED — do not hand-edit. Regenerated from metadata.
7+
*/
8+
@Serializable
9+
public enum class PlayerStatus {
10+
ACTIVE,
11+
INACTIVE,
12+
BANNED,
13+
}

0 commit comments

Comments
 (0)