Current section
Files
Jump to
Current section
Files
src/kitazith/internal/validation/poll.gleam
import gleam/list
import gleam/option.{None, Some}
import kitazith/internal/validation/common
import kitazith/poll
import kitazith/validation
pub fn validate_poll(
path: String,
poll: poll.Poll,
) -> List(validation.ValidationError) {
let max_poll_duration_hours = 24 * 32
list.flatten([
common.validate_string_length(
common.join_path(path, "question.text"),
poll.question.text,
min: 1,
max: 300,
),
common.validate_list_max_length(
common.join_path(path, "answers"),
poll.answers,
max: 10,
noun: "answers",
),
case poll.duration {
Some(duration) ->
case duration > max_poll_duration_hours {
True -> [
common.error(
common.join_path(path, "duration"),
validation.NumericMaximumExceeded(
max: max_poll_duration_hours,
actual: duration,
unit: "hours",
),
),
]
False -> []
}
None -> []
},
poll.answers
|> list.index_map(fn(answer, index) {
validate_poll_answer(
common.indexed_path(common.join_path(path, "answers"), index),
answer,
)
})
|> list.flatten,
])
}
fn validate_poll_answer(
path: String,
answer: poll.PollAnswer,
) -> List(validation.ValidationError) {
case answer.poll_media.text {
Some(text) ->
common.validate_string_length(
common.join_path(path, "poll_media.text"),
text,
min: 1,
max: 55,
)
None -> []
}
}