defmodule Sukaato.Vschemas do @moduledoc """ Provides validation schemas for tail parameters of `Validate.validate/2`. """ @affil_vschema [ required: false, type: :list, list: [ required: true, type: :map, map: %{ name: [required: false, type: :string], icon_uri: [required: true, type: :string], icon_name: [required: true, type: :string], protocol: [required: true, type: :string], address: [required: true, type: :string], scheme_postfix: [required: true, type: :string] } ] ] @doc """ Outputs schema for validating updates to column `:affil` on table corresponding to `Sukaato.User`. """ def affil, do: @affil_vschema @perms_vschema [ required: true, type: :list, list: [ required: true, type: :integer, #@TODO create function generating these numbers from first 4 numbers in: [1, 2, 4, 8, 9, 10, 12, 5, 7, 3, 6, 11, 13, 14, 15] ] ] @doc """ Outputs schema for validating updates to column `:perms` on table corresponding to `Sukaato.User`. """ def perms, do: @perms_vschema @pubkeys_vschema [ required: true, type: :map ] @doc """ Outputs schema for validating updates to column `:pub_keys` on table corresponding to `Sukaato.User`. """ def pub_keys, do: @pubkeys_vschema # @TODO change below map string keys to atoms @resume_vschema %{ "basics" => [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "label" => [required: true, type: :string], "image" => [required: false, type: :string], "email" => [required: true, type: :string], "phone" => [required: false, type: :string], "url" => [required: false, type: :string], "summary" => [required: true, type: :string], "location" => [ required: false, type: :map, map: %{ "address" => [required: true, type: :string], "postalCode" => [required: true, type: :string], "city" => [required: true, type: :string], "countryCode" => [required: true, type: :string], "region" => [required: true, type: :string] } ], "profiles" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "network" => [required: true, type: :string], "username" => [required: false, type: :string], "url" => [required: true, type: :string] } ] ] } ], "work" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "position" => [required: true, type: :string], "url" => [required: false, type: :string], "startDate" => [required: true, type: :string], "endDate" => [required: false, type: :string], "summary" => [required: true, type: :string], "highlights" => [ required: false, type: :list, list: [ required: true, type: :string ] ] } ] ], "volunteer" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "organization" => [required: true, type: :string], "position" => [required: true, type: :string], "url" => [required: false, type: :string], "startDate" => [required: true, type: :string], "endDate" => [required: false, type: :string], "summary" => [required: true, type: :string], "highlights" => [ required: false, type: :list, list: [ required: true, type: :string ] ] } ] ], "education" => [ required: true, type: :list, list: [ required: true, type: :map, map: %{ "institution" => [required: true, type: :string], "url" => [required: false, type: :string], "area" => [required: true, type: :string], "studyType" => [required: true, type: :string], "startDate" => [required: true, type: :string], "endDate" => [required: false, type: :string], "score" => [required: false, type: :number], "courses" => [ required: false, type: :list, list: [ required: true, type: :string ] ] } ] ], "awards" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "title" => [required: true, type: :string], "date" => [required: false, type: :string], "awarder" => [required: false, type: :string], "summary" => [required: true, type: :string] } ] ], "certificates" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "date" => [required: false, type: :string], "issuer" => [required: true, type: :string], "url" => [required: false, type: :string] } ] ], "publications" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "publisher" => [required: true, type: :string], "releaseDate" => [required: true, type: :string], "url" => [required: false, type: :string], "summary" => [required: false, type: :string] } ] ], "skills" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "level" => [required: true, type: :string], "keywords" => [ required: true, type: :list, list: [ required: true, type: :string ] ] } ] ], "languages" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "language" => [required: true, type: :string], "fluency" => [required: false, type: :string] } ] ], "interests" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "keywords" => [ required: false, type: :list, list: [ required: true, type: :string ] ] } ] ], "references" => [ required: true, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "reference" => [required: true, type: :string] } ] ], "projects" => [ required: false, type: :list, list: [ required: true, type: :map, map: %{ "name" => [required: true, type: :string], "startDate" => [required: true, type: :string], "endDate" => [required: false, type: :string], "description" => [required: true, type: :string], "highlights" => [ required: false, type: :list, list: [ required: true, type: :string ] ], "url" => [required: false, type: :string] } ] ] } @doc """ Outputs schema for validating updates to column `:resume` on table corresponding to `Sukaato.Folio`. """ def resume, do: @resume_vschema @showcase_vschema %{ audio: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ uri_scheme: [required: false, type: :string], uri: [required: true, type: :string], query: [required: false, type: :string] } ] ], video: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ uri_scheme: [required: false, type: :string], uri: [required: true, type: :string], query: [required: false, type: :string] } ] ], text: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ uri_scheme: [required: false, type: :string], uri: [required: true, type: :string], query: [required: false, type: :string] } ] ], intrct: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ uri_scheme: [required: false, type: :string], uri: [required: true, type: :string], query: [required: false, type: :string] } ] ], dev: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ uri_scheme: [required: false, type: :string], uri: [required: true, type: :string], query: [required: false, type: :string] } ] ] } @doc """ Outputs schema for validating updates to column `:showcase` on table corresponding to `Sukaato.Folio`. """ def showcase, do: @showcase_vschema end