Skip to content

Instantly share code, notes, and snippets.

package com.megafarad.omoiomoi.controllers
import com.megafarad.omoiomoi.auth.AuthAction
import com.megafarad.omoiomoi.dao.MeetingDAO
import com.megafarad.omoiomoi.model.Meeting._
import com.megafarad.omoiomoi.model.MeetingEvent._
import com.megafarad.omoiomoi.model.{Meeting, MeetingEvent, Page, SearchResult}
import play.api._
import play.api.cache.AsyncCacheApi
package com.megafarad.omoiomoi.binders
import play.api.mvc.QueryStringBindable
import java.time.format.DateTimeParseException
import java.time.zone.ZoneRulesException
import java.time.{LocalDate, ZoneId}
object CustomBinders {
implicit def localDateBinder(implicit stringBinder: QueryStringBindable[String]): QueryStringBindable[LocalDate] = new QueryStringBindable[LocalDate] {
@megafarad
megafarad / 1.sql
Created April 16, 2024 23:09
Slick Evolutions Script for Slick-pg example project.
# --- !Ups
CREATE SCHEMA app;
CREATE TABLE app.document (
id BIGSERIAL NOT NULL PRIMARY KEY,
content TEXT,
search_field tsvector
);
@megafarad
megafarad / Document.scala
Created April 16, 2024 23:32
Document for Slick-pg example
package models
import utils.StringUtils
case class Document(id: Option[Long], content: String) {
lazy val abbreviatedContent: String = StringUtils.ellipses(content, 100)
}
@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)
}
@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 / 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 / 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 / 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 / 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 {