99 lines
1.9 KiB
CUE
99 lines
1.9 KiB
CUE
package schema
|
|
|
|
#resource: #_base & {
|
|
// copy field values from #_base
|
|
handle: handle, ident: ident, expIdent: expIdent
|
|
|
|
component: #baseHandle | *"component"
|
|
platform: #baseHandle | *"corteza"
|
|
|
|
// Fully qualified resource name
|
|
fqrn: string | *(platform + "::" + component + ":" + handle)
|
|
|
|
// fields: #Fields
|
|
// operations: #Operations
|
|
|
|
// All parent resources
|
|
parents: [... #_base & {
|
|
// copy field values from #_base
|
|
handle: handle, ident: ident, expIdent: expIdent
|
|
|
|
refField: #expIdent | *(expIdent + "ID")
|
|
param: #ident | *(ident + "ID")
|
|
}]
|
|
|
|
// All known RBAC operations for this resource
|
|
rbac: #rbacResource & {
|
|
resourceExpIdent: expIdent
|
|
}
|
|
|
|
locale?: #locale & {
|
|
resourceExpIdent: expIdent
|
|
resource: {
|
|
// @todo can we merge this with RBAC type (FQRN?)
|
|
type: component + ":" + handle
|
|
}
|
|
}
|
|
|
|
// List of known keys for resource translation
|
|
// locale?: {
|
|
// [Name=_]: {
|
|
// name: Name & #Handle
|
|
// path: string
|
|
// custom: bool | *false
|
|
// }
|
|
// }
|
|
}
|
|
|
|
//#fields: {
|
|
// // Each field can be
|
|
// [key=_]: #fields | *({name: key} & #field)
|
|
//}
|
|
//
|
|
//#field: {
|
|
// name: #expIdent
|
|
// unique: bool | *false
|
|
//
|
|
// // Golang type (built-in or other)
|
|
// type: string | *"string"
|
|
//
|
|
// // System fields,
|
|
// system: bool | *false
|
|
//
|
|
// if name =~ "At$" {
|
|
// type: string | *"*time.Time"
|
|
// }
|
|
//}
|
|
|
|
//#Operations: {
|
|
// [Operation=_]: {operation: Operation} & #Operation
|
|
//}
|
|
|
|
//#Operation: {
|
|
// name: #ExpIdent
|
|
// description: string
|
|
// can: string | false | *"\(name)"
|
|
//}
|
|
|
|
//idField: {
|
|
// // Expecting ID field to allways have name ID
|
|
// name: "ID"
|
|
// unique: true
|
|
//
|
|
// // Service fields,
|
|
// // @todo We might want to have a better name for this
|
|
// // service: true
|
|
//
|
|
// // @todo someday we'll replace this with the "ID" type
|
|
// type: "uint64"
|
|
//}
|
|
//
|
|
//handleField: {
|
|
// // Expecting ID field to allways have name ID
|
|
// name: "handle"
|
|
// unique: true
|
|
//
|
|
// // @todo someday we'll replace this with the "ID" type
|
|
// type: "string" & #handle
|
|
//}
|