博多南ウェブサービスのblog

博多南ウェブサービスのサービス紹介

【Scalameta 4.4.x】Case object から PostgreSQL ENUM を create したい

Play Framework を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。

Scalameta 4.4.x を使って、Case object から PostgreSQL ENUM の create type コマンドを作成したときのメモです。

以下、目次

やりたいこと

こんな感じの enum っぽい case object から、

import enumeratum.Enum
import enumeratum.EnumEntry

sealed trait Medal extends EnumEntry
case object Medal extends Enum[Medal] {
  case object Gold extends Medal
  case object Silver extends Medal
  case object Bronze extends Medal
  lazy val values: IndexedSeq[Medal] = findValues
}

こんな感じの sql コマンドを作成したい。

create type "medal" as enum ('Gold', 'Silver', 'Bronze');

背景

結果

Scalameta 4.4x を利用して、「case object -> sql: create type as enum 作成」した。 これにより、

「case object -> sql: create type as enum

-> (Flyway を利用して)「sql file -> DB」

-> (slick-codegen を利用して)「DB -> Case class 」

-> (root のアプリから)「Case class -> DB access

みたいなことができました。

「case object -> sql: create type as enun」の詳細

macrotest

全体像

参考にしたところ

面白かったけど関係なかったところ

GitHubこちら

以上でした。