Skip to content
Snippets Groups Projects
schema.ts 1.02 KiB
Newer Older
import {
  EntitiesSchemas,
  RelationDefinition,
  Schema,
  yams,
} 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: yams.String(),
      latitude: yams.Float(),
      longitude: yams.Float(),
      postal_address: yams.String(),
    },
    City: {
      name: yams.String(),
      zip_code: yams.Int(),
    },
    Person: {
      name: yams.String(),
      email: yams.String(),
    },
  },
  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: "**",
    },