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
 |