Skip to content

Instantly share code, notes, and snippets.

@megafarad
megafarad / application.conf
Created April 20, 2024 22:32
Application config for Slick-pg example
# https://www.playframework.com/documentation/latest/Configuration
play.http.secret.key = "changeme"
play.http.secret.key=${?APPLICATION_SECRET}
play.modules.enabled += "modules.AppModule"
slick.dbs.default {
profile = "slick.jdbc.PostgresProfile$"
db.url = "jdbc:postgresql://localhost:5432/fulltextexample"
db.url = ${?DB_URL}
@megafarad
megafarad / AppModule.scala
Created April 20, 2024 22:31
Module for Slick-pg example
package modules
import com.google.inject.AbstractModule
import models.daos.{DocumentDAO, DocumentDAOImpl}
import models.services.{DocumentService, DocumentServiceImpl}
import net.codingwell.scalaguice.ScalaModule
class AppModule extends AbstractModule with ScalaModule {
override def configure(): Unit = {
@megafarad
megafarad / routes
Created April 20, 2024 08:23
Routes config for Slick-pg example
# Routes
# This file defines all application routes (Higher priority routes first)
# https://www.playframework.com/documentation/latest/ScalaRouting
# ~~~~
# An example controller showing a sample home page
GET / controllers.HomeController.index()
GET /documents controllers.DocumentsController.documents(page: Int ?= 0, pageSize: Int ?= 10)
GET /documents/new controllers.DocumentsController.createDocument
GET /documents/search controllers.DocumentsController.searchPage
@megafarad
megafarad / DocumentsController.scala
Created April 20, 2024 08:20
Documents Controller for Slick-pg example
package controllers
import models.services.DocumentService
import forms.{SaveDocumentForm, SearchDocumentForm}
import models.Document
import play.api.mvc._
import javax.inject.Inject
import scala.concurrent.{ExecutionContext, Future}
@megafarad
megafarad / DocumentServiceImpl.scala
Created April 19, 2024 21:40
Document Service Implementation for Slick-pg example
package models.services
import models.{Document, Page, SearchResult}
import models.daos.DocumentDAO
import javax.inject.Inject
import scala.concurrent.{ExecutionContext, Future}
class DocumentServiceImpl @Inject() (documentDAO: DocumentDAO)(implicit ec: ExecutionContext) extends DocumentService {
@megafarad
megafarad / DocumentDAOImpl.scala
Created April 18, 2024 23:04
Implementation for DocumemtDAO, for the Slick-pg example project.
package models.daos
import models.{Document, Page, SearchResult}
import MyPostgresProfile.api._
import play.api.Logging
import play.api.db.slick.DatabaseConfigProvider
import javax.inject.Inject
import scala.concurrent.{ExecutionContext, Future}
@megafarad
megafarad / TableDefinitions.scala
Created April 18, 2024 22:38
Table definition for Slick-pg example
package models.daos
import MyPostgresProfile.api._
import com.github.tminglei.slickpg.TsVector
import models.Document
import slick.lifted.ProvenShape
trait TableDefinitions {
class DocumentTable(tag: Tag) extends Table[Document](tag, Some("app"), "document") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
@megafarad
megafarad / MyPostgresProfile.scala
Created April 17, 2024 21:39
A "PostgresProfile" for Slick-pg
package models.daos
import com.github.tminglei.slickpg._
trait MyPostgresProfile extends ExPostgresProfile
with PgArraySupport
with PgDate2Support
with PgRangeSupport
with PgHStoreSupport
with PgSearchSupport
@megafarad
megafarad / SearchResult.scala
Created April 17, 2024 21:22
SearchResult for Slick-pg example
package models
case class SearchResult(highlights: String, rank: Float, documentId: Long)
@megafarad
megafarad / Page.scala
Created April 17, 2024 21:08
Page for Slick-pg example
package models
case class Page[T](items: Seq[T], page: Int, offset: Int, total: Long, totalPageCount: Long) {
lazy val prev: Option[Int] = Option(page - 1).filter(_ >= 0)
lazy val next: Option[Int] = Option(page + 1).filter(_ => (offset + items.size) < total)
}