Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Realtime update not working on Amplify.DataStore.observeQuery #3495

Closed
jaymeen-unadkat-differenz opened this issue Feb 5, 2024 · 23 comments
Closed
Labels
bug Something isn't working datastore Issues related to the DataStore category

Comments

@jaymeen-unadkat-differenz
Copy link

jaymeen-unadkat-differenz commented Feb 5, 2024

Amplify.DataStore.observeQuery real-time data not updating

I'm getting data in Amplify.DataStore.observeQuery,

But when I update the value in the model from Amplify studio's data console

I get this error:
I've been stuck for the past 15 days on this issue

onUpdateValueListener: data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.failure(GraphQLResponseError<MutationSync<AnyModel>>: GraphQL service returned a partially-successful response containing errors: [Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/createdAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("createdAt")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/updatedAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("updatedAt")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'Int\' within parent \'Drink\' (/onUpdateCampaign/drink/_version)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("_version")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSTimestamp\' within parent \'Drink\' (/onUpdateCampaign/drink/_lastChangedAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("_lastChangedAt")]), extensions: nil)]
Recovery suggestion: The list of `GraphQLError` contains service-specific messages.))
receive(_:): data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.failure(GraphQLResponseError<MutationSync<AnyModel>>: GraphQL service returned a partially-successful response containing errors: [Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/createdAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("createdAt")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/updatedAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("updatedAt")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'Int\' within parent \'Drink\' (/onUpdateCampaign/drink/_version)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("_version")]), extensions: nil), Amplify.GraphQLError(message: "Cannot return null for non-nullable type: \'AWSTimestamp\' within parent \'Drink\' (/onUpdateCampaign/drink/_lastChangedAt)", locations: nil, path: Optional([Amplify.JSONValue.string("onUpdateCampaign"), Amplify.JSONValue.string("drink"), Amplify.JSONValue.string("_lastChangedAt")]), extensions: nil)]
Recovery suggestion: The list of `GraphQLError` contains service-specific messages.))

Steps To Reproduce

Steps to reproduce the behavior:
1. Go to 'Amplify Console'
2. Click on 'Content -> Data Manager'
3. Update any value in the model
4. See the error in the XCode console

Expected behavior

Data should update in the array(variable)

Amplify Framework Version

2.25.6

Amplify Categories

DataStore

Dependency manager

Swift PM

Swift version

5.9

CLI version

12.10.1

Xcode version

XCode 15

Relevant log output

<details>
<summary>Log Messages</summary>


INSERT LOG MESSAGES HERE
```

Is this a regression?

Yes

Regression additional context

No response

Platforms

iOS

OS Version

14.0

Device

Simulator iPhone 11

Specific to simulators

No - Not working anywhere

Additional context

No response

@thisisabhash
Copy link
Member

Hello,
Thank you for posting this. Can you share your model schema, verbose logs(without sensitive information) and code snippets you're using? This will help us understand the issue better and reproduce it locally.

@thisisabhash thisisabhash added bug Something isn't working datastore Issues related to the DataStore category labels Feb 5, 2024
@jaymeen-unadkat-differenz
Copy link
Author

Schema:

enum WholesalerType {
  CLASSA
  CLASSB
}

type Wholesaler @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String
  ordersEmail: String
  type: WholesalerType
}

enum ProductCategory {
  WHISKEY
  GIN
  LAGER
  PILSNER
  CABERNET
  CHARDONNAY
}

enum ProductType {
  SPIRITS
  WINE
  BEER
  NONALCOHOLIC
}

type Product @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String
  description: String
  imageUrl: String
  type: ProductType
  cost: Int
  category: ProductCategory
  campaignProduct: [CampaignProduct] @hasMany
  productLogoUrl: String
  wholesaler: Wholesaler @hasOne
}

type CampaignProduct @model @auth(rules: [{allow: public}]) {
  id: ID!
  quantity: Int
  campaignID: ID! @index(name: "byCampaign")
  product: Product @belongsTo
  primaryProduct: Boolean
}

enum DrinkType {
  BEER
  WINE
  COCKTAIL
  NONALCOHOLIC
}

type Drink @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String
  type: DrinkType
  description: String
  imageURL: String
  numberOfDrinks: Int
  campaigns: [Campaign] @hasMany
}

enum RetailerType {
  ONPREMISE
  OFFPREMISE
}

enum CampaignStatus {
  PENDING
  LIVE
  FINISHED
}

type RetailManager @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String
  cognitoID: String
  retailerID: ID! @index(name: "byRetailer")
  test: String
  campaignParticipation: [CampaignParticipation] @hasMany
}

type CampaignParticipation @model @auth(rules: [{allow: public}]) {
  id: ID!
  retailer: Retailer @belongsTo(fields: ["retailerID"])
  retailerID: ID! @index(name: "byRetailer")
  campaign: Campaign @belongsTo(fields: ["campaignID"])
  campaignID: ID! @index(name: "byCampaign")
  startingNumberOfOffers: Int
  remainingNumberOfOffers: Int
  retailManagerID: ID
  retailManager: RetailManager @belongsTo
  campaignStatus: CampaignStatus
}

type Retailer @model @auth(rules: [{allow: public}]) {
  id: ID!
  Name: String
  campaignParticipations: [CampaignParticipation] @hasMany(indexName: "byRetailer", fields: ["id"])
  retailManagers: [RetailManager] @hasMany(indexName: "byRetailer", fields: ["id"])
  street: String
  city: String
  state: String
  zipcode: String
  lat: String
  lng: String
  description: String
  imageURL: String
  type: RetailerType
  operatingHours: AWSJSON
  wholesaler: Wholesaler @hasOne
}

type Campaign @model @auth(rules: [{allow: public}]) {
  id: ID!
  Name: String
  numberOfCampaigns: Int
  numberOfOffers: Int
  campaignParticipations: [CampaignParticipation] @hasMany(indexName: "byCampaign", fields: ["id"])
  description: String
  publishDate: AWSDateTime
  expirationDate: AWSDateTime
  status: CampaignStatus
  eligibleZipCodes: [String]
  imageURL: String
  drink: Drink @belongsTo
  campaignProducts: [CampaignProduct] @hasMany(indexName: "byCampaign", fields: ["id"])
  numberOfCampaignsRemaining: String
}
 

@jaymeen-unadkat-differenz
Copy link
Author

Sometimes Errors are like this

Creating not loaded list of CampaignProduct with Metadata(appSyncAssociatedIdentifiers: ["xxxxxx"], appSyncAssociatedFields: ["campaign"], apiName: nil)
Creating not loaded list of AcceptedCampaigns with Metadata(appSyncAssociatedIdentifiers: ["xxxxx"], appSyncAssociatedFields: ["campaign"], apiName: nil)

@jaymeen-unadkat-differenz
Copy link
Author

Anyone?

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

Hi @jaymeen-unadkat-differenz, taking a look. Here's the formatted error you are seeing is an error from AppSync on the subscription event.

onUpdateValueListener: data(
    Swift.Result<
        AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>,
        Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>
    >.failure(
        GraphQLResponseError<MutationSync<AnyModel>>: GraphQL service returned a partially-successful response containing errors: [
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/createdAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("createdAt")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/updatedAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("updatedAt")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'Int\' within parent \'Drink\' (/onUpdateCampaign/drink/_version)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("_version")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSTimestamp\' within parent \'Drink\' (/onUpdateCampaign/drink/_lastChangedAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("_lastChangedAt")
                ]),
                extensions: nil
            )
        ]
    )
    Recovery suggestion: The list of `GraphQLError` contains service-specific messages.
)

receive(_:): data(
    Swift.Result<
        AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>,
        Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>
    >.failure(
        GraphQLResponseError<MutationSync<AnyModel>>: GraphQL service returned a partially-successful response containing errors: [
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/createdAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("createdAt")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSDateTime\' within parent \'Drink\' (/onUpdateCampaign/drink/updatedAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("updatedAt")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'Int\' within parent \'Drink\' (/onUpdateCampaign/drink/_version)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("_version")
                ]),
                extensions: nil
            ),
            Amplify.GraphQLError(
                message: "Cannot return null for non-nullable type: \'AWSTimestamp\' within parent \'Drink\' (/onUpdateCampaign/drink/_lastChangedAt)",
                locations: nil,
                path: Optional([
                    Amplify.JSONValue.string("onUpdateCampaign"),
                    Amplify.JSONValue.string("drink"),
                    Amplify.JSONValue.string("_lastChangedAt")
                ]),
                extensions: nil
            )
        ]
    )
    Recovery suggestion: The list of `GraphQLError` contains service-specific messages.
)

The message Cannot return null for non-nullable type: 'AWSDateTime' within parent 'Drink' (/onUpdateCampaign/drink/createdAt).

The relevant schema is the Campaign model, with a parent Drink model

type Campaign @model @auth(rules: [{allow: public}]) {
  id: ID!
  Name: String
  numberOfCampaigns: Int
  numberOfOffers: Int
  campaignParticipations: [CampaignParticipation] @hasMany(indexName: "byCampaign", fields: ["id"])
  description: String
  publishDate: AWSDateTime
  expirationDate: AWSDateTime
  status: CampaignStatus
  eligibleZipCodes: [String]
  imageURL: String
  drink: Drink @belongsTo
  campaignProducts: [CampaignProduct] @hasMany(indexName: "byCampaign", fields: ["id"])
  numberOfCampaignsRemaining: String
}
 type Drink @model @auth(rules: [{allow: public}]) {
  id: ID!
  name: String
  type: DrinkType
  description: String
  imageURL: String
  numberOfDrinks: Int
  campaigns: [Campaign] @hasMany
}

Can you clarify if you have the lazy loading feature enabled? This feature is required to decode data from Amplify Studio.

In cli.json do you have the feature flag generateModelsForLazyLoadAndCustomSelectionSet set to true? If you are setting it to true now, please make sure to re-run amplify codegen models to re-generate the proper files

@lawmicha lawmicha added the pending-community-response Issue is pending response from the issue requestor label Feb 7, 2024
@jaymeen-unadkat-differenz
Copy link
Author

jaymeen-unadkat-differenz commented Feb 7, 2024

@lawmicha this is set to false
Whole schema

{
"features": {
"graphqltransformer": {
"addmissingownerfields": true,
"improvepluralization": false,
"validatetypenamereservedwords": true,
"useexperimentalpipelinedtransformer": true,
"enableiterativegsiupdates": true,
"secondarykeyasgsi": true,
"skipoverridemutationinputtypes": true,
"transformerversion": 2,
"suppressschemamigrationprompt": true,
"securityenhancementnotification": false,
"showfieldauthnotification": false,
"usesubusernamefordefaultidentityclaim": true,
"usefieldnameforprimarykeyconnectionfield": false,
"enableautoindexquerynames": true,
"respectprimarykeyattributesonconnectionfield": true,
"shoulddeepmergedirectiveconfigdefaults": false,
"populateownerfieldforstaticgroupauth": true
},
"frontend-ios": {
"enablexcodeintegration": true
},
"auth": {
"enablecaseinsensitivity": true,
"useinclusiveterminology": true,
"breakcirculardependency": true,
"forcealiasattributes": false,
"useenabledmfas": true
},
"codegen": {
"useappsyncmodelgenplugin": true,
"usedocsgeneratorplugin": true,
"usetypesgeneratorplugin": true,
"cleangeneratedmodelsdirectory": true,
"retaincasestyle": true,
"addtimestampfields": true,
"handlelistnullabilitytransparently": true,
"emitauthprovider": true,
"generateindexrules": true,
"enabledartnullsafety": true,
"generatemodelsforlazyloadandcustomselectionset": false
},
"appsync": {
"generategraphqlpermissions": true
},
"latestregionsupport": {
"pinpoint": 1,
"translate": 1,
"transcribe": 1,
"rekognition": 1,
"textract": 1,
"comprehend": 1
},
"project": {
"overrides": true
}
},
"debug": {
"shareProjectConfig": true
}
}

@github-actions github-actions bot removed the pending-community-response Issue is pending response from the issue requestor label Feb 7, 2024
@jaymeen-unadkat-differenz
Copy link
Author

jaymeen-unadkat-differenz commented Feb 7, 2024

@lawmicha We can even have a google meet if it is possible from your end

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

Please set it to true and re-run amplify codegen models and re-run the app, then try again with Amplify Studio sourced mutations.

Ref: https://docs.amplify.aws/swift/tools/cli/migration/lazy-load-custom-selection-set/#cross-platform-app-development-with-datastore-swift

The reason why "lazy loading" is required is because so Swift models support decoding data sourced from Amplify Studio.

@jaymeen-unadkat-differenz
Copy link
Author

Okay after enabling the lazy load
the error got even bigger

resolve(reconciling([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""RET#1"#"RET#1"", instance: ImbybeTestDemo.Imbybe(pk: "RET#1", sk: "RET#1", gsi1: Optional("master"), gsisk1: Optional("RET#1"), name: Optional("Chris"), description: Optional("retailer desc"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: Optional("ONPREMISE"), street: Optional("Nanpura"), city: Optional("Surat"), state: Optional("Gujarat"), zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: Optional(21.21121766939695), lng: Optional(72.8298565952018), operatingHours: Optional("[{"closetime":"20:00","day":"Sun","opentime":"09:00"},{"closetime":"20:00","day":"Mon","opentime":"09:00"},{"closetime":"20:00","day":"Tue","opentime":"09:00"},{"closetime":"20:00","day":"Wed","opentime":"09:00"},{"closetime":"20:00","day":"Thu","opentime":"09:00"},{"closetime":"20:00","day":"Fri","opentime":"09:00"},{"closetime":"20:00","day":"Sat","opentime":"09:00"}]"), cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:34:36 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 12:50:56 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"RET#1"#"RET#1"", deleted: false, lastChangedAt: 1707310256640, version: 22)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""BRD#1"#"BRD#1"", instance: ImbybeTestDemo.Imbybe(pk: "BRD#1", sk: "BRD#1", gsi1: Optional("master"), gsisk1: Optional("BRD#1"), name: Optional("Brand 2"), description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 1:35:36 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:07:57 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"BRD#1"#"BRD#1"", deleted: false, lastChangedAt: 1707304077148, version: 14)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""BRD#1"#"SUP#1"", instance: ImbybeTestDemo.Imbybe(pk: "BRD#1", sk: "SUP#1", gsi1: Optional("brandSupplier"), gsisk1: Optional("BRD#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 1:37:50 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 1:37:50 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"BRD#1"#"SUP#1"", deleted: false, lastChangedAt: 1707226670770, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""SUP#3"#"SUP#3"", instance: ImbybeTestDemo.Imbybe(pk: "SUP#3", sk: "SUP#3", gsi1: Optional("master"), gsisk1: Optional("SUP#3"), name: Optional("Supplier 3"), description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: nil, numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: nil, lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:18:34 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:18:34 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"SUP#3"#"SUP#3"", deleted: false, lastChangedAt: 1707311914794, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""PRO#2"#"BRD#2"", instance: ImbybeTestDemo.Imbybe(pk: "PRO#2", sk: "BRD#2", gsi1: Optional("productBrand"), gsisk1: Optional("PRO#2"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:58:48 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 12:46:00 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"PRO#2"#"BRD#2"", deleted: false, lastChangedAt: 1707309960888, version: 3)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""PRO#2"#"PRO#2"", instance: ImbybeTestDemo.Imbybe(pk: "PRO#2", sk: "PRO#2", gsi1: Optional("master"), gsisk1: Optional("PRO#2"), name: Optional("Prouct 3"), description: Optional("product desc 2"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: Optional("WINE"), street: nil, city: nil, state: nil, zipCode: nil, productCost: Optional(20), productCategory: Optional("CHARDONNAY"), numberOfDrinks: Optional(50), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: Optional(20), primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:47:57 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:05:08 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"PRO#2"#"PRO#2"", deleted: false, lastChangedAt: 1707314708581, version: 24)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""BRD#2"#"BRD#2"", instance: ImbybeTestDemo.Imbybe(pk: "BRD#2", sk: "BRD#2", gsi1: Optional("master"), gsisk1: Optional("BRD#2"), name: Optional("Brand 2"), description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 6:21:47 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 6:21:47 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"BRD#2"#"BRD#2"", deleted: false, lastChangedAt: 1707286907966, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""BRD#2"#"SUP#2"", instance: ImbybeTestDemo.Imbybe(pk: "BRD#2", sk: "SUP#2", gsi1: Optional("brandSupplier"), gsisk1: Optional("BRD#2"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:03:23 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:03:23 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"BRD#2"#"SUP#2"", deleted: false, lastChangedAt: 1707303803028, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#1"#"CAM#1"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#1", sk: "CAM#1", gsi1: Optional("master"), gsisk1: Optional("CAM#1"), name: Optional("Ultimate Tequilla Sunrise 11"), description: Optional("campaign desc"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-08 12:26:00 PM +0000, timeZone: Optional(GMT (fixed)))), expirationDate: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-10 12:26:00 PM +0000, timeZone: Optional(GMT (fixed)))), eligibleZipCodes: Optional([]), numberOfCampaigns: Optional(50), numberOfOffers: Optional(10), remainingNumberOfCampaigns: Optional(50), productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: Optional("New"), rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:27:05 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:32:42 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#1"#"CAM#1"", deleted: false, lastChangedAt: 1707312762827, version: 9)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#1", sk: "DRI#1", gsi1: Optional("campaignDrink"), gsisk1: Optional("CAM#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:44:29 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:00:30 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#1"#"DRI#1"", deleted: false, lastChangedAt: 1707303630415, version: 25)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#1"#"PRO#1"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#1", sk: "PRO#1", gsi1: Optional("campaignProduct"), gsisk1: Optional("CAM#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: Optional(50), primaryProduct: Optional(true), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:49:46 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:05:30 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#1"#"PRO#1"", deleted: false, lastChangedAt: 1707311130694, version: 12)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#1"#"PRO#2"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#1", sk: "PRO#2", gsi1: Optional("campaignProduct"), gsisk1: Optional("CAM#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: Optional(50), primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:50:18 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:05:36 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#1"#"PRO#2"", deleted: false, lastChangedAt: 1707311136207, version: 14)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#1"#"RET#1"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#1", sk: "RET#1", gsi1: Optional("campaignParticipation"), gsisk1: Optional("CAM#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: Optional(50), remainingNumberOfOffers: Optional(50), campaignStatus: Optional("PENDING"), rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:41:14 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 9:09:01 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#1"#"RET#1"", deleted: false, lastChangedAt: 1707296941200, version: 11)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 7"), description: Optional("drink desc"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(202), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:36:14 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707316574530, version: 41)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""SUP#2"#"SUP#2"", instance: ImbybeTestDemo.Imbybe(pk: "SUP#2", sk: "SUP#2", gsi1: Optional("master"), gsisk1: Optional("SUP#2"), name: Optional("Supplier 2"), description: nil, imageURL: Optional("https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"), ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:02:38 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:02:38 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"SUP#2"#"SUP#2"", deleted: false, lastChangedAt: 1707303758062, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""PRO#1"#"BRD#1"", instance: ImbybeTestDemo.Imbybe(pk: "PRO#1", sk: "BRD#1", gsi1: Optional("productBrand"), gsisk1: Optional("PRO#1"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(true), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 1:37:19 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:20:31 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"PRO#1"#"BRD#1"", deleted: false, lastChangedAt: 1707301231853, version: 2)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""PRO#1"#"PRO#1"", instance: ImbybeTestDemo.Imbybe(pk: "PRO#1", sk: "PRO#1", gsi1: Optional("master"), gsisk1: Optional("PRO#1"), name: Optional("Product 1"), description: Optional("product desc 1"), imageURL: Optional("https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"), ordersEmail: nil, type: Optional("SPIRITS"), street: nil, city: nil, state: nil, zipCode: nil, productCost: Optional(10), productCategory: Optional("WINE"), numberOfDrinks: Optional(10), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: Optional(10), primaryProduct: Optional(true), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:46:42 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:36:06 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"PRO#1"#"PRO#1"", deleted: false, lastChangedAt: 1707312966236, version: 23)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""SUP#4"#"SUP#4"", instance: ImbybeTestDemo.Imbybe(pk: "SUP#4", sk: "SUP#4", gsi1: Optional("master"), gsisk1: Optional("SUP#4"), name: Optional("Supplier 4"), description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: nil, numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: nil, lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:24:59 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 1:24:59 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"SUP#4"#"SUP#4"", deleted: false, lastChangedAt: 1707312299918, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""SUP#1"#"SUP#1"", instance: ImbybeTestDemo.Imbybe(pk: "SUP#1", sk: "SUP#1", gsi1: Optional("master"), gsisk1: Optional("SUP#1"), name: Optional("Supplier 1"), description: nil, imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 1:34:52 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 11:02:31 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"SUP#1"#"SUP#1"", deleted: false, lastChangedAt: 1707303752015, version: 6)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#2"#"CAM#2"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#2", sk: "CAM#2", gsi1: Optional("master"), gsisk1: Optional("CAM#2"), name: Optional("Campaign 2"), description: Optional("campaign desc 2"), imageURL: Optional("https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"), ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-11 10:46:00 AM +0000, timeZone: Optional(GMT (fixed)))), expirationDate: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-10 10:46:00 AM +0000, timeZone: Optional(GMT (fixed)))), eligibleZipCodes: Optional([]), numberOfCampaigns: Optional(20), numberOfOffers: Optional(25), remainingNumberOfCampaigns: Optional(50), productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: Optional("New"), rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:47:06 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:06:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#2"#"CAM#2"", deleted: false, lastChangedAt: 1707314806438, version: 3)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#2"#"DRI#2"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#2", sk: "DRI#2", gsi1: Optional("campaignDrink"), gsisk1: Optional("CAM#2"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:57:25 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:57:25 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#2"#"DRI#2"", deleted: false, lastChangedAt: 1707303445114, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#2"#"PRO#2"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#2", sk: "PRO#2", gsi1: Optional("campaignProduct"), gsisk1: Optional("CAM#2"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: Optional(10), primaryProduct: Optional(true), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:52:03 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:52:03 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#2"#"PRO#2"", deleted: false, lastChangedAt: 1707303123365, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""CAM#2"#"RET#1"", instance: ImbybeTestDemo.Imbybe(pk: "CAM#2", sk: "RET#1", gsi1: Optional("campaignParticipation"), gsisk1: Optional("CAM#2"), name: nil, description: nil, imageURL: nil, ordersEmail: nil, type: nil, street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: nil, publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: Optional(30), remainingNumberOfOffers: Optional(30), campaignStatus: Optional("LIVE"), rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:49:31 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:49:31 AM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"CAM#2"#"RET#1"", deleted: false, lastChangedAt: 1707302971698, version: 1)), AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#2"#"DRI#2"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#2", sk: "DRI#2", gsi1: Optional("master"), gsisk1: Optional("DRI#2"), name: Optional("Drink 698"), description: Optional("drink desc 2"), imageURL: Optional("https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?q=80&w=1374&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"), ordersEmail: nil, type: Optional("COCKTAIL"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(60), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 10:41:15 AM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:04:03 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#2"#"DRI#2"", deleted: false, lastChangedAt: 1707314643458, version: 20))]), reconciled) -> finished

@jaymeen-unadkat-differenz
Copy link
Author

jaymeen-unadkat-differenz commented Feb 7, 2024

onUpdateValueListener: data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 8"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(202), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cog
receive(_:): data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 8"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(202), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:39:35 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707316775541, version: 42))))
dispose(of subscriptionEvent): data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 8"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(202), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 2:39:35 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707316775541, version: 42))))

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

That doesn't look like an error log, it looks like the model Imbybe received on the subscription. Are you experiencing any specific issues with the app?

  1. For real-time updates, try Amplify.DataStore.observe to see updates from the local database. When you send updates from Amplify Studio, the DataStore client will receive the corresponding subscription event and save it to the local database. The save to the local database will emit an event to the observe API (similar to the observeQuery API as well). The log you posted appears to be the decoded data from the subscription event. Can confirm if that data is updated locally?

  2. The logs correspond to the data received with identifiers:

"model": {
      "id": "RET#1#RET#1",
      "instance": {
        "pk": "RET#1",
        "sk": "RET#1",

You can also view the SQLite database directly using something like https://sqlitebrowser.org/ . The DB path can be seen in the logs as

Initializing database connection: /Users/xxxx/Library/Developer/CoreSimulator/Devices/3C444803-AED8-4D45-9222-278A3F6FD089/data/Containers/Data/Application/E2DF561C-6992-46A9-A1D0-13FFFDEC7768/Documents/xxxx.db

if you have verbose logging enabled: Amplify.Logging.logLevel = .verbose (set this before adding the plugin and Amplify.configure()

@jaymeen-unadkat-differenz
Copy link
Author

jaymeen-unadkat-differenz commented Feb 7, 2024

Hi @lawmicha
I can see that, any updated data that is updated from studio which is being updating in local database "ImbybeTestDemo.db"
but it is not updating in my ios application

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

Can you try this?

For real-time updates, try Amplify.DataStore.observe to see updates from the local database. When you send updates from Amplify Studio, the DataStore client will receive the corresponding subscription event and save it to the local database. The save to the local database will emit an event to the observe API (similar to the observeQuery API as well). The log you posted appears to be the decoded data from the subscription event. Can confirm if that data is updated locally?

Amplify.DataStore.observeQuery actually uses Amplify.DataStore.observe under the hood, so if observe is not working, then observeQuery won't work as well.

Amplify.DataStore.observe documentation https://docs.amplify.aws/swift/build-a-backend/more-features/datastore/real-time/

@jaymeen-unadkat-differenz
Copy link
Author

I have used both none of them are working

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

Can you provide us with the verbose logs (Amplify.Logging.logLevel = .verbose enabled) for the iOS app when it receives the subscription event?

  1. Launch app, start DataStore, I usually code a button to kick off Amplify.DataStore.start()
  2. Ensure the ready event can be seen in the logs [Lifecycle event 6]: ready
  3. Clear the logs
  4. On Amplify Studio, perform the mutation
  5. See the logs in the iOS app's console related to just the event from Amplify Studio. This will include the subscription event decoded to the model, reconciliing it to the local store, and emitting it. If something's not working there, we may be able to find the error in this set of logs

@jaymeen-unadkat-differenz
Copy link
Author

jaymeen-unadkat-differenz commented Feb 7, 2024

After Performing mutation
this are the logs that I'm getting

Logs

onUpdateValueListener: data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))))
receive(_:): data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))))
dispose(of subscriptionEvent): data(Swift.Result<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>, Amplify.GraphQLResponseError<AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>>>.success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))))
dispose(of graphQLResponse): success(AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47)))
New state: waiting
respond(to:): waiting
main()
Notifying: started([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))])
resolve(waiting, started([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))])) -> reconciling([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))])
New state: reconciling([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))])
respond(to:): reconciling([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional(""), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))])
BEGIN DEFERRED TRANSACTION
select
"root"."id" as "id", "root"."deleted" as "deleted", "root"."lastChangedAt" as "lastChangedAt",
"root"."version" as "version"
from "MutationSyncMetadata" as "root"
where 1 = 1
and (
"root"."id" = 'Imbybe|"DRI#1"#"DRI#1"'
)
select
"root"."id" as "id", "root"."deleted" as "deleted", "root"."lastChangedAt" as "lastChangedAt",
"root"."version" as "version"
from "MutationSyncMetadata" as "root"
where 1 = 1
and (
"root"."id" = 'Imbybe|"DRI#1"#"DRI#1"'
)
COMMIT TRANSACTION
select
"root"."id" as "id", "root"."createdAt" as "createdAt", "root"."graphQLFilterJSON" as "graphQLFilterJSON",
"root"."inProcess" as "inProcess", "root"."json" as "json", "root"."modelId" as "modelId",
"root"."modelName" as "modelName", "root"."mutationType" as "mutationType", "root"."version" as "version"
from "MutationEvent" as "root"
where 1 = 1
and (
(
(
"root"."modelId" = '"DRI#1"#"DRI#1"'
and "root"."modelName" = 'Imbybe'
)
)
and (
"root"."inProcess" = 0
or "root"."inProcess" is null
)
)
order by "root"."createdAt" asc
select
"root"."id" as "id", "root"."createdAt" as "createdAt", "root"."graphQLFilterJSON" as "graphQLFilterJSON",
"root"."inProcess" as "inProcess", "root"."json" as "json", "root"."modelId" as "modelId",
"root"."modelName" as "modelName", "root"."mutationType" as "mutationType", "root"."version" as "version"
from "MutationEvent" as "root"
where 1 = 1
and (
(
(
"root"."modelId" = '"DRI#1"#"DRI#1"'
and "root"."modelName" = 'Imbybe'
)
)
and (
"root"."inProcess" = 0
or "root"."inProcess" is null
)
)
order by "root"."createdAt" asc
select count("@@PrimaryKey") from "Imbybe" where "@@PrimaryKey" = '"DRI#1"#"DRI#1"'
update "Imbybe"
set
"pk" = 'DRI#1',
"sk" = 'DRI#1',
"campaignStatus" = NULL,
"city" = NULL,
"cognitoID" = NULL,
"comment" = NULL,
"createdAt" = '2024-02-06T12:43:37.772Z',
"description" = 'drink desc',
"eligibleZipCodes" = '[]',
"expirationDate" = NULL,
"gsi1" = 'master',
"gsisk1" = 'DRI#1',
"imageURL" = '',
"lat" = NULL,
"lng" = NULL,
"name" = 'Ginger Mint 10',
"numberOfCampaigns" = NULL,
"numberOfDrinks" = 201,
"numberOfOffers" = NULL,
"operatingHours" = NULL,
"ordersEmail" = NULL,
"primaryProduct" = 0,
"productCategory" = NULL,
"productCost" = NULL,
"productQuantity" = NULL,
"publishDate" = NULL,
"rating" = NULL,
"remainingNumberOfCampaigns" = NULL,
"remainingNumberOfOffers" = NULL,
"startingNumberOfOffers" = NULL,
"state" = NULL,
"street" = NULL,
"type" = 'BEER',
"updatedAt" = '2024-02-07T15:20:46.371Z',
"zipCode" = NULL
where "@@PrimaryKey" = '"DRI#1"#"DRI#1"'
select
"root"."@@PrimaryKey" as "@@PrimaryKey", "root"."pk" as "pk", "root"."sk" as "sk",
"root"."campaignStatus" as "campaignStatus", "root"."city" as "city", "root"."cognitoID" as "cognitoID",
"root"."comment" as "comment", "root"."createdAt" as "createdAt", "root"."description" as "description",
"root"."eligibleZipCodes" as "eligibleZipCodes", "root"."expirationDate" as "expirationDate", "root"."gsi1" as "gsi1",
"root"."gsisk1" as "gsisk1", "root"."imageURL" as "imageURL", "root"."lat" as "lat",
"root"."lng" as "lng", "root"."name" as "name", "root"."numberOfCampaigns" as "numberOfCampaigns",
"root"."numberOfDrinks" as "numberOfDrinks", "root"."numberOfOffers" as "numberOfOffers", "root"."operatingHours" as "operatingHours",
"root"."ordersEmail" as "ordersEmail", "root"."primaryProduct" as "primaryProduct", "root"."productCategory" as "productCategory",
"root"."productCost" as "productCost", "root"."productQuantity" as "productQuantity", "root"."publishDate" as "publishDate",
"root"."rating" as "rating", "root"."remainingNumberOfCampaigns" as "remainingNumberOfCampaigns", "root"."remainingNumberOfOffers" as "remainingNumberOfOffers",
"root"."startingNumberOfOffers" as "startingNumberOfOffers", "root"."state" as "state", "root"."street" as "street",
"root"."type" as "type", "root"."updatedAt" as "updatedAt", "root"."zipCode" as "zipCode"
from "Imbybe" as "root"
where 1 = 1
and (
"root"."sk" = 'DRI#1'
and "root"."pk" = 'DRI#1'
)
select
"root"."@@PrimaryKey" as "@@PrimaryKey", "root"."pk" as "pk", "root"."sk" as "sk",
"root"."campaignStatus" as "campaignStatus", "root"."city" as "city", "root"."cognitoID" as "cognitoID",
"root"."comment" as "comment", "root"."createdAt" as "createdAt", "root"."description" as "description",
"root"."eligibleZipCodes" as "eligibleZipCodes", "root"."expirationDate" as "expirationDate", "root"."gsi1" as "gsi1",
"root"."gsisk1" as "gsisk1", "root"."imageURL" as "imageURL", "root"."lat" as "lat",
"root"."lng" as "lng", "root"."name" as "name", "root"."numberOfCampaigns" as "numberOfCampaigns",
"root"."numberOfDrinks" as "numberOfDrinks", "root"."numberOfOffers" as "numberOfOffers", "root"."operatingHours" as "operatingHours",
"root"."ordersEmail" as "ordersEmail", "root"."primaryProduct" as "primaryProduct", "root"."productCategory" as "productCategory",
"root"."productCost" as "productCost", "root"."productQuantity" as "productQuantity", "root"."publishDate" as "publishDate",
"root"."rating" as "rating", "root"."remainingNumberOfCampaigns" as "remainingNumberOfCampaigns", "root"."remainingNumberOfOffers" as "remainingNumberOfOffers",
"root"."startingNumberOfOffers" as "startingNumberOfOffers", "root"."state" as "state", "root"."street" as "street",
"root"."type" as "type", "root"."updatedAt" as "updatedAt", "root"."zipCode" as "zipCode"
from "Imbybe" as "root"
where 1 = 1
and (
"root"."sk" = 'DRI#1'
and "root"."pk" = 'DRI#1'
)
select count("id") from "MutationSyncMetadata" where "id" = 'Imbybe|"DRI#1"#"DRI#1"'
update "MutationSyncMetadata"
set
"deleted" = 0,
"lastChangedAt" = 1707319246415,
"version" = 47
where "id" = 'Imbybe|"DRI#1"#"DRI#1"'
select
"root"."id" as "id", "root"."deleted" as "deleted", "root"."lastChangedAt" as "lastChangedAt",
"root"."version" as "version"
from "MutationSyncMetadata" as "root"
where 1 = 1
and "root"."id" = 'Imbybe|"DRI#1"#"DRI#1"'
select
"root"."id" as "id", "root"."deleted" as "deleted", "root"."lastChangedAt" as "lastChangedAt",
"root"."version" as "version"
from "MutationSyncMetadata" as "root"
where 1 = 1
and "root"."id" = 'Imbybe|"DRI#1"#"DRI#1"'
Notifying: reconciled
resolve(reconciling([AWSPluginsCore.MutationSync<AWSPluginsCore.AnyModel>(model: AWSPluginsCore.AnyModel(id: ""DRI#1"#"DRI#1"", instance: ImbybeTestDemo.Imbybe(pk: "DRI#1", sk: "DRI#1", gsi1: Optional("master"), gsisk1: Optional("DRI#1"), name: Optional("Ginger Mint 10"), description: Optional("drink desc"), imageURL: Optional("https://images.pexels.com/photos/338713/pexels-photo-338713.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1"), ordersEmail: nil, type: Optional("BEER"), street: nil, city: nil, state: nil, zipCode: nil, productCost: nil, productCategory: nil, numberOfDrinks: Optional(201), publishDate: nil, expirationDate: nil, eligibleZipCodes: Optional([]), numberOfCampaigns: nil, numberOfOffers: nil, remainingNumberOfCampaigns: nil, productQuantity: nil, primaryProduct: Optional(false), lat: nil, lng: nil, operatingHours: nil, cognitoID: nil, startingNumberOfOffers: nil, remainingNumberOfOffers: nil, campaignStatus: nil, rating: nil, comment: nil, createdAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-06 12:43:37 PM +0000, timeZone: Optional(GMT (fixed)))), updatedAt: Optional(Amplify.Temporal.DateTime(foundationDate: 2024-02-07 3:20:46 PM +0000, timeZone: Optional(GMT (fixed))))), modelName: "Imbybe"), syncMetadata: AWSPluginsCore.MutationSyncMetadata(id: "Imbybe|"DRI#1"#"DRI#1"", deleted: false, lastChangedAt: 1707319246415, version: 47))]), reconciled) -> finished
New state: finished
respond(to:): finished

@jaymeen-unadkat-differenz
Copy link
Author

@lawmicha have you checked?

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

The logs look good to me and the item appears to be reconciled.

  1. Amplify.DataStore.observeQuery performs a query to generate the first snapshot, if you perform an Amplify.Datastore.query(Imbybe.self), do you get a list of items back including the model that was reconciled? model identifier pk = DRI#1 and sk = DRI#1 ?
  2. Are you holding onto the subscription correctly? For example, if you have a view model object:
actor ViewModel {
   // You must hold a reference to your subscription.
    var imbybeSubscription: AmplifyAsyncThrowingSequence<DataStoreQuerySnapshot<Imbybe>>?

    func subscribeToImbybe() async throws  {
        let imbybeSubscription = Amplify.DataStore.observeQuery(
            for: Imbybe.self
        )

        // hold onto your subscription
        self.imbybeSubscription = imbybeSubscription
        // observe new snapshots
        for try await snapshot in imbybeSubscription {
            print("Snapshot: \(snapshot)")
        }
    }
}
  1. To narrow this down even further, instead of sourcing the mutation from Amplify Studio, can you create it from the iOS app? To fully test a mutation sourced from a different client, you can launch your app on one simulator and then launch the app again on a different simulator. When you have second simulator running, go back to the first and launch the app from the home screen. This way you can see the logs on the second simulator receive the subscription event. Doing this on separate clients is a better test than using one simulator since a locally sourced mutation will also emit an event on the observe/observeQuery APIs. Subscribe to the model from the second simulator before saving the model from the first simulator

@jaymeen-unadkat-differenz
Copy link
Author

Now the real-time is working in Observe(Model.self) but not working on ObserveQuery

@lawmicha
Copy link
Contributor

lawmicha commented Feb 7, 2024

Great to hear Observe API is working as expected. Can you provide more details as to what's not working with ObserveQuery?

  1. Do you have any code snippets to share or can you confirm you are holding onto AmplifyAsyncThrowingSequence ?
  2. Do you see the first snapshot?
  3. Locally sourced mutation vs other device. Do you see new snapshots due to locally sourced saves? Use one simulator and perform observeQuery then save. For other device see point (3) from Realtime update not working on Amplify.DataStore.observeQuery #3495 (comment) about using two simulators.
  4. Do you have any logs indicating that an error that occurred?

@jaymeen-unadkat-differenz
Copy link
Author

I'm changing the approach actually,
I'll keep you updated

@lawmicha
Copy link
Contributor

lawmicha commented Feb 8, 2024

thanks for letting us know, feel free to open a new issue once you have more details, refer back to this issue if relevant. You can also reach out to us on Discord https://discord.gg/jWVbPfC in swift-help topic

@lawmicha lawmicha closed this as completed Feb 8, 2024
Copy link
Contributor

github-actions bot commented Feb 8, 2024

⚠️COMMENT VISIBILITY WARNING⚠️

Comments on closed issues are hard for our team to see.
If you need more assistance, please open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working datastore Issues related to the DataStore category
Projects
None yet
Development

No branches or pull requests

3 participants