56 lines
2.2 KiB
Clojure
56 lines
2.2 KiB
Clojure
(ns beherbergung.model.offer
|
|
(:require [clojure.spec.alpha :as s]
|
|
[specialist-server.type :as t]
|
|
[clojure.spec.gen.alpha :as gen]
|
|
[beherbergung.db.export :refer [write-edn]]))
|
|
|
|
(t/defscalar int_string
|
|
{:name "Int" :description "Integer or String"}
|
|
;; TODO: Here we should be able to use s/with-gen
|
|
(fn [v]
|
|
(cond
|
|
(number? v)
|
|
(int v)
|
|
(string? v)
|
|
(try
|
|
(Integer/parseInt v)
|
|
(catch NumberFormatException _e v))
|
|
:else
|
|
::s/invalid)))
|
|
|
|
(s/def ::t_boolean t/boolean #_ (s/with-gen t/boolean #(s/gen boolean?)))
|
|
(s/def ::t_string t/string #_ (s/with-gen t/string #(s/gen string?)))
|
|
(s/def ::t_int_string int_string #_ (s/with-gen t/int #(s/gen int?)))
|
|
(s/def ::t_float t/float)
|
|
|
|
(s/def :xtdb.api/id (s/nilable ::t_string)) ;; TODO: in future not nilable
|
|
(s/def ::time_from_str (s/nilable ::t_string))
|
|
(s/def ::time_duration_str (s/nilable ::t_string))
|
|
(s/def ::beds (s/nilable ::t_int_string))
|
|
(s/def ::languages (s/nilable (s/* ::t_string)))
|
|
(s/def ::place_country (s/nilable ::t_string))
|
|
(s/def ::place_city (s/nilable ::t_string))
|
|
(s/def ::place_zip (s/nilable ::t_string))
|
|
(s/def ::place_street (s/nilable ::t_string))
|
|
(s/def ::place_street_number (s/nilable ::t_string))
|
|
(s/def ::place_lon (s/nilable ::t_float))
|
|
(s/def ::place_lat (s/nilable ::t_float))
|
|
(s/def ::accessible (s/nilable ::t_boolean))
|
|
(s/def ::animals_allowed (s/nilable ::t_boolean))
|
|
(s/def ::animals_present (s/nilable ::t_boolean))
|
|
(s/def ::contact_name_full (s/nilable ::t_string))
|
|
(s/def ::contact_phone (s/nilable ::t_string))
|
|
(s/def ::contact_email (s/nilable ::t_string))
|
|
(s/def ::note (s/nilable ::t_string))
|
|
(s/def ::offer (s/keys :req-un [:xtdb.api/id
|
|
::time_from_str ::time_duration_str ::beds ::languages
|
|
::place_country ::place_city ::place_zip ::place_street ::place_street_number
|
|
::place_lon ::place_lat
|
|
::accessible ::animals_allowed ::animals_present
|
|
::contact_name_full ::contact_phone ::contact_email
|
|
::note]))
|
|
|
|
(comment
|
|
(write-edn "./data/sample-data/example.edn"
|
|
(gen/sample (s/gen ::offer))))
|