diff --git a/packages/appsync-modelgen-plugin/src/__tests__/visitors/__snapshots__/appsync-dart-visitor.test.ts.snap b/packages/appsync-modelgen-plugin/src/__tests__/visitors/__snapshots__/appsync-dart-visitor.test.ts.snap index 542a3a4b8..68dfb40a5 100644 --- a/packages/appsync-modelgen-plugin/src/__tests__/visitors/__snapshots__/appsync-dart-visitor.test.ts.snap +++ b/packages/appsync-modelgen-plugin/src/__tests__/visitors/__snapshots__/appsync-dart-visitor.test.ts.snap @@ -11759,14 +11759,14 @@ class Foo extends amplify_core.Model { key: Foo.BAR1, isRequired: false, ofModelName: 'Bar', - associatedKey: Bar.BAR1ID + associatedKeys: [Bar.BAR1ID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.hasOne( key: Foo.BAR2, isRequired: false, ofModelName: 'Bar', - associatedKey: Bar.BAR2ID + associatedKeys: [Bar.BAR2ID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( @@ -12386,7 +12386,7 @@ class Primary extends amplify_core.Model { key: Primary.RELATED, isRequired: true, ofModelName: 'Related', - associatedKey: Related.PRIMARYTENANTID + associatedKeys: [Related.PRIMARYTENANTID, Related.PRIMARYINSTANCEID, Related.PRIMARYRECORDID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( @@ -13057,7 +13057,7 @@ class Primary extends amplify_core.Model { key: Primary.RELATED, isRequired: false, ofModelName: 'Related', - associatedKey: Related.PRIMARYTENANTID + associatedKeys: [Related.PRIMARYTENANTID, Related.PRIMARYINSTANCEID, Related.PRIMARYRECORDID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( @@ -13648,7 +13648,7 @@ class SqlPrimary extends amplify_core.Model { key: SqlPrimary.RELATED, isRequired: true, ofModelName: 'SqlRelated', - associatedKey: SqlRelated.PRIMARYID + associatedKeys: [SqlRelated.PRIMARYID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( @@ -14170,14 +14170,14 @@ class Primary extends amplify_core.Model { key: Primary.RELATEDMANY, isRequired: false, ofModelName: 'RelatedMany', - associatedKey: RelatedMany.PRIMARYID + associatedKeys: [RelatedMany.PRIMARYID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.hasOne( key: Primary.RELATEDONE, isRequired: false, ofModelName: 'RelatedOne', - associatedKey: RelatedOne.PRIMARYID + associatedKeys: [RelatedOne.PRIMARYID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( @@ -14932,7 +14932,7 @@ class SqlPrimary extends amplify_core.Model { key: SqlPrimary.RELATED, isRequired: false, ofModelName: 'SqlRelated', - associatedKey: SqlRelated.PRIMARYID + associatedKeys: [SqlRelated.PRIMARYID] )); modelSchemaDefinition.addField(amplify_core.ModelFieldDefinition.nonQueryField( diff --git a/packages/appsync-modelgen-plugin/src/visitors/appsync-dart-visitor.ts b/packages/appsync-modelgen-plugin/src/visitors/appsync-dart-visitor.ts index d584fe524..b2c20d1f6 100644 --- a/packages/appsync-modelgen-plugin/src/visitors/appsync-dart-visitor.ts +++ b/packages/appsync-modelgen-plugin/src/visitors/appsync-dart-visitor.ts @@ -1006,24 +1006,36 @@ export class AppSyncModelDartVisitor< else if (field.connectionInfo) { const connectedModelName = this.getNativeType({ ...field, isList: false }); switch (field.connectionInfo.kind) { - case CodeGenConnectionType.HAS_ONE: + case CodeGenConnectionType.HAS_ONE: { + let associatedString = `associatedKey: ${connectedModelName}.${this.getQueryFieldName(field.connectionInfo.associatedWith)}`; + if (field.connectionInfo.isUsingReferences) { + const associatedFieldsString = field.connectionInfo.associatedWithFields.map(field => `${connectedModelName}.${this.getQueryFieldName(field)}`).join(', ') + associatedString = `associatedKeys: [${associatedFieldsString}]` + } fieldParam = [ `key: ${modelName}.${queryFieldName}`, `isRequired: ${!field.isNullable}`, `ofModelName: '${connectedModelName}'`, - `associatedKey: ${connectedModelName}.${this.getQueryFieldName(field.connectionInfo.associatedWith)}`, + associatedString, ].join(',\n'); fieldsToAdd.push([`${DART_AMPLIFY_CORE_TYPES.ModelFieldDefinition}.hasOne(`, indentMultiline(fieldParam), ')'].join('\n')); break; - case CodeGenConnectionType.HAS_MANY: + } + case CodeGenConnectionType.HAS_MANY: { + let associatedString = `associatedKey: ${connectedModelName}.${this.getQueryFieldName(field.connectionInfo.associatedWith)}`; + if (field.connectionInfo.isUsingReferences) { + const associatedFieldsString = field.connectionInfo.associatedWithFields.map(field => `${connectedModelName}.${this.getQueryFieldName(field)}`).join(', ') + associatedString = `associatedKeys: [${associatedFieldsString}]` + } fieldParam = [ `key: ${modelName}.${queryFieldName}`, `isRequired: ${!field.isNullable}`, `ofModelName: '${connectedModelName}'`, - `associatedKey: ${connectedModelName}.${this.getQueryFieldName(field.connectionInfo.associatedWith)}`, + associatedString, ].join(',\n'); fieldsToAdd.push([`${DART_AMPLIFY_CORE_TYPES.ModelFieldDefinition}.hasMany(`, indentMultiline(fieldParam), ')'].join('\n')); break; + } case CodeGenConnectionType.BELONGS_TO: fieldParam = [ `key: ${modelName}.${queryFieldName}`,