404 lines
10 KiB
Elixir
404 lines
10 KiB
Elixir
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
|