Current section
Files
Jump to
Current section
Files
src/example/handlers.gleam
import bliss.{WebRequest, WebResponse}
import example/codecs
import example/context.{ContextAuthenticated, InitialContext}
import example/store
import gleam/bit_builder
import gleam/http/response
import gleam/json
import gleam/list
import gleam/map
import gleam/result
pub fn public_home(_req: WebRequest, _ctx: InitialContext) -> WebResponse {
let body = bit_builder.from_string("Home")
let resp =
response.new(200)
|> response.set_body(body)
Ok(resp)
}
pub fn public_version(_req: WebRequest, _ctx: InitialContext) -> WebResponse {
let body = bit_builder.from_string("1.0.0")
let resp =
response.new(200)
|> response.set_body(body)
Ok(resp)
}
pub fn public_status(_req: WebRequest, _ctx: InitialContext) -> WebResponse {
let data =
json.object([
#("message", json.string("Operational")),
#("incidents", json.array([], of: json.string)),
])
Ok(bliss.json_response(data))
}
pub fn country_list(_req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
let data =
store.countries()
|> json.array(of: codecs.json_of_country)
Ok(bliss.json_response(data))
}
pub fn country_show(code: String) {
fn(req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
try country =
store.countries()
|> list.find(fn(country) { country.code == code })
|> result.replace_error(bliss.NotFound)
let data = codecs.json_of_country(country)
Ok(bliss.json_response(data))
}
}
pub fn country_city_list(code: String) {
fn(req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
try country =
store.countries()
|> list.find(fn(country) { country.code == code })
|> result.replace_error(bliss.NotFound)
let data = json.array(country.cities, of: codecs.json_of_city)
Ok(bliss.json_response(data))
}
}
pub fn city_list(_req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
let cities = store.cities()
let data = json.array(cities, of: codecs.json_of_city)
Ok(bliss.json_response(data))
}
pub fn city_show(id: String) {
fn(_req: WebRequest, _ctx: ContextAuthenticated) {
let cities = store.cities()
try city =
list.find(cities, fn(c) { c.name == id })
|> result.replace_error(bliss.NotFound)
let data = codecs.json_of_city(city)
Ok(bliss.json_response(data))
}
}
pub fn city_create(_req: WebRequest, _ctx: ContextAuthenticated) {
let body = bit_builder.from_string("Created")
let resp =
response.new(201)
|> response.set_body(body)
Ok(resp)
}
pub fn city_delete(_id: String) {
fn(_req: WebRequest, _ctx: ContextAuthenticated) {
let body = bit_builder.from_string("Deleted")
let resp =
response.new(200)
|> response.set_body(body)
Ok(resp)
}
}
pub fn language_list(
_req: WebRequest,
_ctx: ContextAuthenticated,
) -> WebResponse {
let data =
store.languages()
|> json.array(of: codecs.json_of_language)
Ok(bliss.json_response(data))
}
pub fn language_show(code: String) {
fn(_req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
try language =
store.languages()
|> list.find(fn(lang) { lang.code == code })
|> result.replace_error(bliss.NotFound)
let data = codecs.json_of_language(language)
Ok(bliss.json_response(data))
}
}
pub fn country_delete(_id) {
fn(_req: WebRequest, _ctx: ContextAuthenticated) -> WebResponse {
let body = bit_builder.from_string("Deleted")
let resp =
response.new(200)
|> response.set_body(body)
Ok(resp)
}
}
pub fn language_countries(language_code: String) {
fn(_req, _ctx) {
let data =
store.countries()
|> list.filter(fn(country) {
list.contains(country.language_codes, language_code)
})
|> list.map(fn(country) { country.code })
|> json.array(of: json.string)
Ok(bliss.json_response(data))
}
}