prisma-rel8-generator

This generator was bootstraped using create-prisma-generator

Example

schema.prisma

generator custom_generator {
  provider = "node ../../node_modules/prisma-rel8-generator"
  output   = "../types"
}

datasource db {
  provider = "sqlite"
  url      = "file:./dev.db"
}


model User {

  @@map("users")

  id    Int     @id @default(autoincrement())
  email String  @unique
  password String
  name  String?
  projects Project[]
  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

model Project {

  @@map("projects")

  id Int @id @default(autoincrement())
  name String @unique
  user_id Int
  author   User @relation(fields: [user_id], references: [id])


  created_at DateTime @default(now())
  updated_at DateTime @updatedAt
}

Generated models.hs

module Database.Models where

import Internal.Prelude
import Rel8

newtype UserModelId = UserModelId { toInt64 :: Int64 }
    deriving newtype (DBEq, DBType, Eq, Show)
      

data UserModel f = UserModel
    { userModelId :: Column f UserModelId
     ,userModelEmail:: Column f Text
     ,userModelPassword:: Column f Text
     ,userModelName:: Column f (Maybe Text)
     ,userModelCreatedAt:: Column f UTCTime
     ,userModelUpdatedAt:: Column f UTCTime
    }
    deriving stock (Generic)
    deriving anyclass (Rel8able)

userModelSchema :: TableSchema (UserModel Name)
userModelSchema = TableSchema
  { name = "users"
  , schema = Nothing
  , columns = UserModel
      { userModelId = "id"
       ,userModelEmail = "email"
       ,userModelPassword = "password"
       ,userModelName = "name"
       ,userModelCreatedAt = "created_at"
       ,userModelUpdatedAt = "updated_at"
      }
  }
      

deriving stock instance f ~ Result => Show (UserModel f)

newtype ProjectModelId = ProjectModelId { toInt64 :: Int64 }
    deriving newtype (DBEq, DBType, Eq, Show)
      

data ProjectModel f = ProjectModel
    { projectModelId :: Column f ProjectModelId
     ,projectModelName:: Column f Text
     ,projectModelUserId:: Column f UserModelId
     ,projectModelCreatedAt:: Column f UTCTime
     ,projectModelUpdatedAt:: Column f UTCTime
    }
    deriving stock (Generic)
    deriving anyclass (Rel8able)

projectModelSchema :: TableSchema (ProjectModel Name)
projectModelSchema = TableSchema
  { name = "projects"
  , schema = Nothing
  , columns = ProjectModel
      { projectModelId = "id"
       ,projectModelName = "name"
       ,projectModelUserId = "user_id"
       ,projectModelCreatedAt = "created_at"
       ,projectModelUpdatedAt = "updated_at"
      }
  }
      

deriving stock instance f ~ Result => Show (ProjectModel f)