370 lines
9.6 KiB
Elixir
370 lines
9.6 KiB
Elixir
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
|