πŸ“¦ colinhacks / edgedb-nextjs-blog

β˜… 3 stars β‘‚ 0 forks πŸ‘ 3 watching
πŸ“₯ Clone https://github.com/colinhacks/edgedb-nextjs-blog.git
HTTPS git clone https://github.com/colinhacks/edgedb-nextjs-blog.git
SSH git clone git@github.com:colinhacks/edgedb-nextjs-blog.git
CLI gh repo clone colinhacks/edgedb-nextjs-blog
Colin McDonnell Colin McDonnell WIP c045cfd 3 years ago πŸ“ History
πŸ“‚ c045cfd9534beaecd287260748a7418df337de2a View all commits β†’
πŸ“ components
πŸ“ dbschema
πŸ“ pages
πŸ“„ .eslintignore
πŸ“„ .gitignore
πŸ“„ client.ts
πŸ“„ edgedb.toml
πŸ“„ next-env.d.ts
πŸ“„ package.json
πŸ“„ README.md
πŸ“„ seed.ts
πŸ“„ tsconfig.json
πŸ“„ yarn.lock
πŸ“„ README.md

Full-stack EdgeDB + Next.js application

A simple blog application built with Next.js, TypeScript, React, and EdgeDB on the backend.

Deploy your own

Deploy the example using Vercel:

Deploy with Vercel

How to use

Download the example project

Execute create-next-app with npm or Yarn to bootstrap the example:

npx create-next-app --example with-edgedb with-edgedb-app
# or
yarn create next-app --example with-edgedb with-edgedb-app
# or
pnpm create next-app -- --example with-edgedb with-edgedb-app

Then cd into the created directory.

$ cd with-edgedb-app

Install dependencies

Install npm dependencies:

$  npm install
# or
$  yarn

Install the CLI

First install the EdgeDB CLI if you haven't already.

# macOS/Linux
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.edgedb.com | sh

# Windows (Powershell)
$ iwr https://ps1.edgedb.com -useb | iex

Initialize the EdgeDB project

Initialize the project with the following CLI command:

$ edgedb project init

After you follow the prompts, this command will spin up a local EdgeDB instance and apply all the migrations inside dbschema/migrations. Now that the project is initialized, all EdgeDB clients initialized inside the project directory will connect to this instance automaticallyβ€”no need for environment variables or hard-coded configuration. (Read more about projects here.)

Generate the query builder

This project uses the EdgeQL query builder for TypeScript. This tool can express any EdgeQL query in a code-first way and infers a static return type. Generate it with the following command:

$ npx edgeql-js

The query builder consists of several files that are generated into the dbschema/edgeql-js directory. Import it like so:

import e from './dbschema/edgeql-js'

Seed the database

$ npx ts-node seed.ts

Start the app

$ yarn dev

The application should now be running on http://localhost:3000.

Notes

API structure

  • POST /api/post: Create a new post
  • Body: {title: string; content: string; authorName: string}
  • PATCH /api/post/:id: Update a post by id
  • Body: {title?: string; content?: string;}
  • PUT /api/publish/:id: Publish a post by id
  • DELETE /api/post/:id: Delete a post by id

Evolving the app

Evolving the application typically requires three steps:

  • Update the schema in dbschema/default.esdl
  • Generate a new migration with edgedb migration create
  • Apply the migration with edgedb migrate
  • Regenerate the query builder with npx edgeql-js

Deployment

To deploy this application, follow the EdgeDB deployment guides for your preferred cloud provider:

Then:

  • Find your instance's DSN (AKA connection string). The exact instructions for this depend on which cloud you are deploying to.
  • Use this DSN to migrate your remote instance to the latest schema. Run this command from inside your project directory.
edgedb migrate --dsn <your-instance-dsn> --tls-security insecure

You have to disable TLS checks with --tls-security insecure. All EdgeDB instances use TLS by default, but configuring it is out of scope of this project.

  • Deploy this app to Vercel with the button above. You'll be prompted to provide a value for EDGEDB_DSN, the value from the previous step.
  • Open the application.

Next steps