Created validation schema maps and keyword lists for database insertions
This commit is contained in:
381
lib/sukaato/vschemas.ex
Normal file
381
lib/sukaato/vschemas.ex
Normal file
@@ -0,0 +1,381 @@
|
||||
defmodule Sukaato.Vschemas do
|
||||
# import Validate
|
||||
|
||||
@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"
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@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]
|
||||
]
|
||||
]
|
||||
|
||||
@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]
|
||||
}
|
||||
|
||||
@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]
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
#@TODO finish 'showcase' 'folio' database field validation schema
|
||||
@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
|
Reference in New Issue
Block a user