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