Login Backend¶
IMPORTANT¶
This project depends on a lot of generated code.
When you first clone the project, you need to either follow the Getting started guide, or run go generate.
Every time you change something in swagger/swagger.yaml or prisma/schema.prisma, you must regenerate the files for your changes to take effect.
Do this by again using the go generate command or the go build run configuration.
Development¶
Here is how you get started when developing on the login backend.
Getting started with the Login Backend¶
Make sure you have the following installed:
Go 1.16 or higher
GoLand as IDE
Docker to run docker containers (for Linux)
Docker Desktop to build and run docker containers graphically (for Windows and MacOS)
When you open the project with GoLand, it should prompt you to install the required plugins.
The project contains two run configurations which GoLand will automatically load. You can find them in the top right toolbar.
First, you need to start a database. Select “docker-compose: database and frontend” in the dropdown menu (left of the green play button). Then click the play button to start the database.
This will start the login-frontend and initialize a PostgreSQL database.
Finally, to run the project, select the go build configuration in the dropdown menu (left of the green play button).
Click the play button to compile and run the project.
The server prints the URL where it is running to the console. Visit http://localhost:4000/docs to see the API documentation.
To test the whole login, including the frontend, visit http://localhost
Migrating the Login database¶
When changes to the database are made, you can create a migration by running
POSTGRES_URL=postgresql://postgres:password@localhost:5432/postgres go run github.com/prisma/prisma-client-go migrate dev --name $MIGRATION_NAME
inside the project root dir.
To apply all pending migrations, simply run
POSTGRES_URL=postgresql://postgres:password@localhost:5432/postgres go run github.com/prisma/prisma-client-go migrate deploy
inside the project root dir.
Environment Variables¶
Variable |
Description |
|---|---|
|
OPTIONAL: Name of the cookie containing the authentication token. Default: |
|
OPTIONAL: You can use this to change the port that the API listens to. Default: |
|
REQUIRED: Connection URL to the postgres database. As an example, see Migrating the database above. |
|
REQUIRED: We use this key to cryptographically sign the JWT token. Other backends can use this token to authenticate the user. |
|
REQUIRED: The timespan how log each JWT is valid. The user has to log in again, if the token expires. Valid time units are “ns”, “us” (or “µs”), “ms”, “s”, “m”, “h”. Example: “24h” |
Project structure¶
File / Directory |
Description |
|---|---|
|
Entry point of the program |
|
Contains the API specification (Swagger) |
|
Database schema (Prisma) |
|
Our HTTP handler implementations (Go) |
|
Adds all our handler functions to the server |
|
Generated files from Prisma and Swagger. Do not edit or commit generated files! |
|
Configuration for the HTTP server. The only file in |
Go-Swagger¶
This Rest-API uses Go-Swagger. So the swagger/swagger.yml is the base of the rest api. You find documentation about the swagger.yml here.
After changes were made in the swagger.yml file you should run go generate so that the files will be generated. You can work with these generated objects.