Skip to content

Commit e1aed6c

Browse files
committed
Updated template bugs
1 parent f10847d commit e1aed6c

2 files changed

Lines changed: 16 additions & 16 deletions

File tree

flowforge.g8/src/main/g8/src/main/scala/$organization$/ContractDemos.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,18 @@ object ContractDemos {
4040
_ => F.pure(User(1, "Alice", "alice@example.com", 25))
4141
)
4242

43-
// 2. Backward compatibility - reader produces more fields than contract expects
43+
// 2. Backward compatibility - source has MORE fields than contract expects
4444
val backwardCompatPipeline = PipelineBuilder[F]("backward-compat")
4545
.addTypedSource[UserWithCountry, User, SchemaPolicy.Backward](
46-
TypedSource[User](DataSource.local("basic-users.csv", DataFormat.CSV)),
47-
_ => F.pure(UserWithCountry(1, "Bob", "bob@example.com", 30, "USA"))
46+
TypedSource[UserWithCountry](DataSource.local("extended-users.csv", DataFormat.CSV)),
47+
userWithCountry => F.pure(User(userWithCountry.id, userWithCountry.name, userWithCountry.email, userWithCountry.age))
4848
)
4949

50-
// 3. Forward compatibility - contract has more fields than reader produces
50+
// 3. Forward compatibility - contract expects MORE fields than source provides
5151
val forwardCompatPipeline = PipelineBuilder[F]("forward-compat")
5252
.addTypedSource[User, UserWithCountry, SchemaPolicy.Forward](
53-
TypedSource[UserWithCountry](DataSource.local("extended-users.csv", DataFormat.CSV)),
54-
_ => F.pure(User(1, "Charlie", "charlie@example.com", 35))
53+
TypedSource[User](DataSource.local("basic-users.csv", DataFormat.CSV)),
54+
user => F.pure(UserWithCountry(user.id, user.name, user.email, user.age, "Unknown"))
5555
)
5656

5757
// Note: Full policy requires compatible types - simplified example

flowforge.g8/src/main/g8/src/main/scala/$organization$/Pipeline.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ object ContractDriftDemo {
289289
}
290290
*/
291291

292-
// Example 3: Extra field (will compile with Forward policy, fail with Exact)
292+
// Example 3: Extra field (will compile with Backward policy, fail with Exact)
293293
/*
294294
case class ExtraFieldUser(
295295
id: Long, name: String, email: String, age: Option[Int],
@@ -300,9 +300,9 @@ object ContractDriftDemo {
300300
def partiallyValidPipeline[F[_]: EffectSystem](): F[Unit] = {
301301
val source = TypedSource[ExtraFieldUser](DataSource.local("input.csv", DataFormat.CSV))
302302

303-
// This will compile (Forward allows extra fields in source)
303+
// This will compile (Backward allows source to have extra fields that contract doesn't need)
304304
val workingPipeline = PipelineBuilder[F]("working")
305-
.addTypedSource[ExtraFieldUser, RawUser, SchemaPolicy.Forward](source, _ => ???)
305+
.addTypedSource[ExtraFieldUser, RawUser, SchemaPolicy.Backward](source, _ => ???)
306306

307307
// This will NOT compile (Exact requires perfect match)
308308
val failingPipeline = PipelineBuilder[F]("failing")
@@ -334,23 +334,23 @@ object SchemaEvolutionPolicies {
334334
val baseSource = TypedSource[BaseUser](DataSource.local("base.csv", DataFormat.CSV))
335335
val extendedSource = TypedSource[ExtendedUser](DataSource.local("extended.csv", DataFormat.CSV))
336336

337-
// 1. EXACT: Perfect match required
337+
// 1. EXACT: Perfect match required - source and contract must be identical
338338
val exactPipeline = PipelineBuilder[F]("exact")
339339
.addTypedSource[BaseUser, BaseUser, SchemaPolicy.Exact](baseSource, _ => F.pure(BaseUser(1, "Alice", "alice@example.com")))
340340

341-
// 2. BACKWARD: Reader produces more, contract expects less
341+
// 2. BACKWARD: Source has MORE fields than contract needs (contract is backward compatible)
342342
val backwardPipeline = PipelineBuilder[F]("backward")
343-
.addTypedSource[ExtendedUser, BaseUser, SchemaPolicy.Backward](baseSource, _ => F.pure(ExtendedUser(1, "Bob", "bob@example.com", Some(30), Some("USA"))))
343+
.addTypedSource[ExtendedUser, BaseUser, SchemaPolicy.Backward](extendedSource, extUser => F.pure(BaseUser(extUser.id, extUser.name, extUser.email)))
344344

345-
// 3. FORWARD: Contract expects more, reader produces less
345+
// 3. FORWARD: Contract expects MORE fields than source provides (contract is forward compatible)
346346
val forwardPipeline = PipelineBuilder[F]("forward")
347-
.addTypedSource[BaseUser, ExtendedUser, SchemaPolicy.Forward](extendedSource, _ => F.pure(BaseUser(1, "Charlie", "charlie@example.com")))
347+
.addTypedSource[BaseUser, ExtendedUser, SchemaPolicy.Forward](baseSource, baseUser => F.pure(ExtendedUser(baseUser.id, baseUser.name, baseUser.email, None, None)))
348348

349-
// 4. EXACT_UNORDERED: Same fields, any order
349+
// 4. EXACT_UNORDERED: Same fields, any order (field order doesn't matter)
350350
val exactUnorderedPipeline = PipelineBuilder[F]("exact-unordered")
351351
.addTypedSource[BaseUser, BaseUser, SchemaPolicy.ExactUnordered](baseSource, _ => F.pure(BaseUser(1, "Diana", "diana@example.com")))
352352

353-
// 5. FULL: Allow anything (escape hatch)
353+
// 5. FULL: Allow anything (escape hatch - no validation)
354354
val fullPipeline = PipelineBuilder[F]("full")
355355
.addTypedSource[BaseUser, BaseUser, SchemaPolicy.Full](baseSource, _ => F.pure(BaseUser(1, "Eve", "eve@example.com")))
356356

0 commit comments

Comments
 (0)