Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/parsonsmatt/persistent-discover

Discover your Persistent Models with Ease
https://github.com/parsonsmatt/persistent-discover

Last synced: 10 days ago
JSON representation

Discover your Persistent Models with Ease

Awesome Lists containing this project

README

        

# persistent-discover

![build status](https://github.com/parsonsmatt/persistent-discover/actions/workflows/haskell.yml/badge.svg)

Supports automatic discovery of your
[`persistent`](https://hackage.haskell.org/package/persistent) models.

## As an executable

Let's say you've got a ton of `persistent` database models, all defined in a
module hierarchy like this:

```
src/
Models/
Foo.hs
Bar.hs
Baz.hs
Blargh.hs
What.hs
OhNo.hs
```

If you're using `persistent` to automatically generate migrations, you'll want
to have all the `[EntityDef]` in scope from each module. You can do that by
importing each module that defines models and calling `$(discoverEntities)`,
introduced in `persistent-2.13`.

But you may forget to import a module.

This utility imports *all* the modules defined in the current directory and
sub-directories, and then it calls `$(discoverEntities)` for you.

To use it, place the following command in a file, located in the same directory
that your Haskell modules are in:

```
{-# OPTIONS_GHC -F -pgmF persistent-discover #-}
```

Let's say we put that in `src/Models/All.hs`.
This generates a module `Models.All` that exports a single item: `allEntities`,
which is a `[EntityDef]` and can be used by `migrateModels` to properly perform
migrations.

You'll need to add `persistent-discover` to the `build-tool-depends` on your cabal file
for this to work.