Closed mhyassin closed 6 months ago
Hi @mhyassin thanks for raising this issue. The error The variables input contains a field that is not defined for input object type 'ModelSubscriptionScoreFilterInput'
suggests that the query variables do not match the fields on the filter input type.
Can you check your amplify/backend/api/<apiName>/build/schema.graphql
file, search for the ModelSubscriptionScoreFilterInput
type and confirm that it includes a field called user_name
? Or share the current shape of the type here?
It's possible that you may have some changes to your schema that need to be pushed or the datastore schema needs to be regenerated so that it constructs the queries correctly at runtime. Trying running amplify codegen models
and let us know if that helps.
Hello @chrisbonifacio, thanks for the response,
The user_name
indeed isn't in the ModelSubscriptionScoreFilterInput
type, but I'm actually not sure why it is not there, Running amplify codegen models
doesn't help, amplify status
returns that everything is up to date.
This is the ModelSubscriptionScoreFilterInput
type
input ModelSubscriptionScoreFilterInput {
date: ModelSubscriptionStringInput
metric: ModelSubscriptionStringInput
data_numbers: ModelSubscriptionFloatInput
data_datetimes: ModelSubscriptionStringInput
data_sources: ModelSubscriptionStringInput
and: [ModelSubscriptionScoreFilterInput]
or: [ModelSubscriptionScoreFilterInput]
_deleted: ModelBooleanInput
}
Also this is the Score
model:
type Score
@model
@auth(
rules: [
{
allow: owner
operations: [read, update, create]
identityClaim: "username" # explicit use of username
ownerField: "user_name"
}
]
) {
user_name: String! @primaryKey(sortKeyFields: ["date", "metric"])
date: AWSDate!
metric: MetricName!
data_numbers: [Float!]
data_datetimes: [AWSDateTime!]
data_sources: [DataSource!]
}
Did you run amplify push
after you added that field? If you run amplify status
is the result "No Change" for Api?
@iartemiev exactly, the field is in DDB, it is the primary key of the table so..
Just to mention, the user_name
field exists on ModelScoreFilterInput
but not ModelSubscriptionScoreFilterInput
input ModelScoreFilterInput {
user_name: ModelStringInput
date: ModelStringInput
metric: ModelMetricNameInput
data_numbers: ModelFloatInput
data_datetimes: ModelStringInput
data_sources: ModelDataSourceListInput
and: [ModelScoreFilterInput]
or: [ModelScoreFilterInput]
not: ModelScoreFilterInput
_deleted: ModelBooleanInput
}
input ModelSubscriptionScoreFilterInput {
date: ModelSubscriptionStringInput
metric: ModelSubscriptionStringInput
data_numbers: ModelSubscriptionFloatInput
data_datetimes: ModelSubscriptionStringInput
data_sources: ModelSubscriptionStringInput
and: [ModelSubscriptionScoreFilterInput]
or: [ModelSubscriptionScoreFilterInput]
_deleted: ModelBooleanInput
}
Got it, thanks. This appears to be an issue with the Amplify GraphQL Transformer. I'll transfer it over to that repo.
I'm facing the same issue and came across this comment:
"it is not possible to filter on fields used for auth rules." https://github.com/aws-amplify/amplify-category-api/issues/567#issuecomment-1381084406
This issue was resolved with https://github.com/aws-amplify/amplify-category-api/pull/2236. The fix is available in the latest version of the CLI.
@dpilch Thanks alot for fixing this, while the types are correct now, I'm still getting this while trying to use syncExpressions
, should I create a new ticket in the amplify-js repo?
[WARN] 48:37.685 DataStore - Backend subscriptions filtering error.
Subscriptions filtering will be applied clientside.
Connection failed: {"errors":[{"message":"subscription filter uses same fieldName multiple time in single filter object.","errorCode":400}]}
Your selective sync expression for User contains multiple entries for null in the same AND group.
This looks like the issue is something client side. It appears that the subscription filter is being constructed incorrectly. Please create a new ticket in the amplify-js repo.
having the same filter 2wice should be OK, consider:
SELECT * FROM people WHERE age > 17 AND age < 50
SELECT * FROM events WHERE createdAt > START_DATE AND createdAt < END_DATE
That case would be accomplished with between
.
{ age: { between: [17, 50] } }
Before opening, please confirm:
JavaScript Framework
React Native
Amplify APIs
Authentication, Analytics, GraphQL API, DataStore, Storage
Amplify Categories
No response
Environment information
Describe the bug
I'm getting this issue when adding
syncExpressions
to the datastore cofigurationExpected behavior
The filtering should happen on backend
Reproduction steps
Code Snippet
Log output
aws-exports.js
Manual configuration
No response
Additional configuration
No response
Mobile Device
No response
Mobile Operating System
No response
Mobile Browser
No response
Mobile Browser Version
No response
Additional information and screenshots
No response