-
Notifications
You must be signed in to change notification settings - Fork 8
Open
Description
We should decide how the schema in the framework should behave. In GRC-20 every field except for id
, Created at
, Updated At
, Created by
, Versions
are optional.
Here our options. For simplicity I would focus on createEntity
and useQuery
. With this example schema:
{
Todo: {
name: type.Text,
completed: type.Checkbox,
},
}
createEntity({ name: "Setup call", completed: true }); // valid call with all attributes
const result = useQuery({ types: ['Todo']});
/*
[
{ id: "abc", name: "Setup call", completed: true },
{ id: "abc", name: "Draft post", completed: false }
]
*/
Everything always optional
// would be valid and `completed` would just not be set
createEntity({ name: "Setup call" });
const result = useQuery({ types: ['Todo']});
/* returns all entities with the types regardless if they comply to the schema
[
{ id: "abc", name: "Setup call" },
{ id: "abc", completed: false }
]
*/
Everything always required
// valid
createEntity({ name: "Setup call", completed: true });
// would NOT be valid and fail to create the todo
createEntity({ name: "Draft post" });
const result = useQuery({ types: ['Todo']});
/* returns only entities where the entry complies to the schema. Entires like `{ id: "abc", completed: false }` are filtered out
[
{ id: "abc", name: "Setup call", completed: true },
]
*/
Developers can decided
Schema:
{
Todo: {
name: type.Text,
completed: type.Checkbox,
dueUntil: type.Date({ required: false }),
},
}
createEntity({ name: "Setup call", completed: false }); // valid
createEntity({ name: "Draft post", completed: false, dueUntil: "2025-02-10" }); // valid
createEntity({ name: "Do laundry" }); // would NOT be valid and fail to create the todo
const result = useQuery({ types: ['Todo']});
/* returns only entities where the entry complies to the schema. Entires like `{ id: "abc", completed: false }` are filtered out
[
{ id: "abc", name: "Setup call", completed: false },
{ id: "abc", name: "Draft post", completed: false, dueUntil: "2025-02-10" },
]
*/
Other suggestions
Feel free to add your options here …