Skip to content

sqlite doobie #43

@swuecho

Description

@swuecho
package net.bestqa

import cats.effect.{ExitCode, IO, IOApp}
import org.http4s.HttpRoutes
import org.http4s.dsl.io._
import org.http4s.implicits._
import org.http4s.ember.server.EmberServerBuilder
import io.circe.generic.auto._
import org.http4s.circe.CirceEntityEncoder._
import cats.syntax.*
import com.comcast.ip4s.port
import doobie.util.transactor.Transactor
import doobie.implicits.*
import io.getquill.{idiom => _, *}
import io.getquill.doobie.DoobieContext
import doobie._

object Http4DoobieQuillSqliteServer extends IOApp {

  val ctx = new DoobieContext.SQLite(LowerCase)
  import ctx._

  case class Actor(id: Int, name: String)

  def findGreatId = ctx.run(
    quote {
      query[Actor].filter(_.id > 3)
    }
  )

  def findAllActors(xa: Transactor[IO]) = {
    val query = sql"select id, name from actor".query[Actor]
    val action = query.to[List]
    action.transact(xa)
  }

  case class Message(content: String)

  def routes(xa: Transactor[IO]): HttpRoutes[IO] = HttpRoutes.of[IO] {
    case GET -> Root            => Ok(Message("Hello, from http4s-ember-demo!"))
    case GET -> Root / "actors" => Ok(findAllActors(xa))
    case GET -> Root / "actors_quill" => Ok(findGreatId.transact(xa))
  }

  override def run(args: List[String]) =

    val xa = Transactor.fromDriverManager[IO](
      "org.sqlite.JDBC", // JDBC driver class
      "jdbc:sqlite:/home/hwu/dev/bestqa_scala/data/lite", // Connection URL
      "", // User
      "" // Password
    )
    EmberServerBuilder
      .default[IO]
      .withHttpApp(routes(xa).orNotFound)
      .withPort(port"9955")
      .build
      .use(_ => IO.never) // Ensuring the server runs indefinitely
      .as(ExitCode.Success)

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions