Files
sukaato-site/lib/sukaato/vschemas.ex
2025-09-02 20:20:07 -04:00

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