
Generating a full-stack application from a database - jaden
https://notes.eatonphil.com/generating-a-full-stack-application-from-a-database.html
======
darkteflon
This is neat. What are some other projects in this space?

~~~
eatonphil
For Go, there's xo/xo, sqlboiler and gnorm. But they mostly are used to
generate data access code only.

Hasura, couchdb, supabase and PostgREST wrap your database but don't generate
code they just run in memory (and you have to deal with Haskell and Erlang).

Prisma is most similar in spirit but has it's own data description language
whereas this uses SQL. This generates a Go backend currently (I'm working on
Java though too) but Prisma generates typescript.

~~~
steve-chavez
Just to clarify :)

> PostgREST wrap your database but don't generate code they just run in
> memory.

PostgREST generates an OpenAPI output, which in turn can generate code with
tools such as openapi-generator[1], Go being one of the many langs supported.

> (and you have to deal with Haskell and Erlang)

I guess this is only as true as saying that you have to deal with Erlang
because you use RabbitMQ. Or you have to deal with C because you use
PostgreSQL. Same applies with PostgREST, you don't have to write Haskell to
use it, only SQL.

[1]: [https://openapi-generator.tech](https://openapi-generator.tech)

~~~
eatonphil
> First the server is written in Haskell using the Warp HTTP server (aka a
> compiled language with lightweight threads).

From the PostgREST readme. Even if you generated the controllers with openapi,
I'm not aware that openapi will generate you an entire application already
hooked up to the db?

> guess this is only as true as saying that you have to deal with Erlang
> because you use RabbitMQ. Or you have to deal with C because you use
> PostgreSQL. Same applies with PostgREST, you don't have to write Haskell to
> use it, only SQL.

In my experience you will undoubtedly end up dealing with the oddities of it
as some point. Would you rather deal with oddities in Haskell or in C? For
most of the world, for better or worse, C (or Go or Java) is probably more
pragmatic.

