Skip to content
Snippets Groups Projects
schema.ts 1.09 KiB
Newer Older
import {
  EntitiesSchemas,
  RelationDefinition,
  Schema,
} from "ra-cubicweb/dist/Schema";
Frank Bessou's avatar
Frank Bessou committed

function makeSchema<
  ESchemas extends EntitiesSchemas<string>,
  EntityTypes extends Extract<keyof ESchemas, string>,
  RDefs extends RelationDefinition<EntityTypes>[]
>(schema: {
  entities: ESchemas;
  relationsDefinitions: RDefs;
}): [Schema<EntityTypes, ESchemas, RDefs>, EntityTypes] {
  return [schema, "" as EntityTypes];
Frank Bessou's avatar
Frank Bessou committed
}

export const [schema, types] = makeSchema({
  entities: {
Frank Bessou's avatar
Frank Bessou committed
    Museum: {
      name: { type: "String", required: true },
      latitude: { type: "Float" },
      longitude: { type: "Float" },
      postal_address: { type: "String" },
Frank Bessou's avatar
Frank Bessou committed
    },
    City: {
      name: { type: "String", required: true },
      zip_code: { type: "Int" },
Frank Bessou's avatar
Frank Bessou committed
    },
    Person: {
      name: { type: "String" },
      email: { type: "String" },
Frank Bessou's avatar
Frank Bessou committed
    },
  },
  relationsDefinitions: [
    {
      name: "is_in",
      subject: "Museum",
      object: "City",
Frank Bessou's avatar
Frank Bessou committed
      cardinality: "1*",
    },
    {
      name: "director",
      subject: "Museum",
      object: "Person",
Frank Bessou's avatar
Frank Bessou committed
      cardinality: "**",
    },