defmodule Sukaato.Vschemas do @moduledoc """ Provide validation schemas for tail parameters of `Validate.validate`. """ @doc """ Schema for validating updates to column `:affil` on table corresponding to `Sukaato.User`. """ @affil_vschema [ required: false, type: :list, list: [ required: true, type: :map, map: %{ affil_name: [required: false, type: :string], affil_uri: [required: true, type: :string], affil_icon: [required: true, type: :string], affil_target: [required: false, type: :string, in: [ "_blank", "_parent", "_self", "_top" ] ] } ] ] @doc """ Schema for validating updates to column `:perms` on table corresponding to `Sukaato.User`. """ @perms_vschema [ required: true, type: :list, list: [ required: true, type: :string, #@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 """ Schema for validating updates to column `:pub_keys` on table corresponding to `Sukaato.User`. """ @pubkeys_vschema %{ oauth: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ access_token: [required: true, type: :string], auth_code: [required: false, type: :string], refresh_token: [required: false, type: :string] } ] ], fido2: [ required: false, type: :map, map: %{ u2f: [ required: false, type: :list, list: [ required: true, type: :map, map: %{ name: [required: true, type: :string], credential: [required: true, type: :string] } ] ], } ], totp_secret: [required: false, type: :string] } @doc """ Schema for validating updates to column `:resume` on table corresponding to `Sukaato.Folio`. """ @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 """ Schema for validating updates to column `:showcase` on table corresponding to `Sukaato.Folio`. """ @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] } ] ] } end