Skip to content

Instantly share code, notes, and snippets.

@JaniKibichi
Created June 19, 2021 18:34
Show Gist options
  • Save JaniKibichi/040167fa843e3df0f167aa8ecaed9b4a to your computer and use it in GitHub Desktop.
Save JaniKibichi/040167fa843e3df0f167aa8ecaed9b4a to your computer and use it in GitHub Desktop.
package com.janikibichi.routes
import akka.http.scaladsl.model._
import akka.http.scaladsl.server.Directives._
import net.liftweb.json._
import scala.util.{Failure, Success}
trait Routes extends LazyLogging with CORSHandler {
implicit val formats: DefaultFormats = DefaultFormats
def routes: server.Route = ussdMenusRoute ~ ussdSetUpRoute ~ healthCheckRoutes
def ussdMenusRoute: server.Route = {
corsHandler(
path("ussd") {
(post & formFieldMap) { formData =>
// CONVERT JSON TO CASE CLASS
val form = formData.toJson
val ussdRequest = form.convertTo[USSDRequest]
onComplete(RestAPI.processPostUssdRequest(ussdRequest)) {
case Failure(exception) =>
logger.info(s"USSD Exception ${exception.getMessage}")
complete(StatusCodes.BadGateway)
case Success(menu) =>
complete(
HttpEntity(
ContentTypes.`text/plain(UTF-8)`,
menu.title + menu.body + menu.options
)
)
}
}
}
)
}
def ussdSetUpRoute: server.Route = {
corsHandler(
path("setup" / "ussd") {
post {
entity(as[LanguageMenu]) { languageMenu =>
logger.info(s"Menu Data $languageMenu")
onComplete(RestAPI.storeMenu(languageMenu){
case Failure(exception) =>
logger.info(s"LanguageMenu Exception ${exception.getMessage}")
complete(StatusCodes.BadGateway)
case Success(menuUpdate) =>
complete(menuUpdate)
}
}
}
}
)
}
def healthCheckRoutes: server.Route = {
corsHandler(
path("health") {
get {
extractRequest { request =>
complete(OK)
}
}
}
)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment