The official songbook of IT and a general song management website.
To setup the development of the project there are some things that are necessary to be setup.
For the frontend the following steps are necessary:
- Install the node dependencies in the
frontend/folder (e.g. whilst inside of thefrontend/folder runyarnor equivalent command). - Be aware that there is a
.env.developmentfile in thefrontend/folder, however it should work out of the box on anylinuxbased system. - In the project root folder, run
docker compose up.
Requires go to be installed
The backend is not included into the docker compose to simplify developing the backend without having to restart everything else.
The steps to setup the backend is as follows (all of these assume that you are inside of the backend/ folder):
- Copy the
.env.examplefile to.env, an explaination of all the fields in this file can be found below. - Run ``
- Run the main method in
backend/cmd/tasteit/main.go. Usego run ......./main.goor run using IntelliJ Goland
In the root folder there is also a Makefile with the following commands:
mock(also the default): inserts mock values into the database.clear-db:cleanis an alias for this. Clears the database (completely!) will require migrations to be re-run (i.e. restarting the backend).clean: Alias forclear-db.new-migration mig_name_arg=*insert-migration-name*: creates a new migration with the specified name.run-migrations: runs all migrations.setup-gamma-client: resets the client in gamma with client_id and secret equal to that in .env.examplereset-setup-db: Performclean,run-migrations,mock,setup-gamma-clientin that order.
To update the schema for the database you need access to the migrations.
go get "github.com/golang-migrate/migrate/v4"- Then run
make new-migration mig_name_arg=*insert-migration-name*
The environment variables that can / have to be specified for the project. Note that for the moment ALL variables must exist / be non-empty to start the project.
NEXT_PUBLIC_BASE_URL: Url to the backend seen from the server-side nextjs docker container, default ishttp://host.docker.internal:5000/apiwhich (together with thedocker-compose) specifies the host machine on port5000where the backend should exist in development. In production this should be set to the domain the website is hosted on.
db_user(string): Username for the database.db_password(string): Password for the database.db_name(string): Name of the database.db_host(string): Host address for the database.reset_db(boolean): Whether to clear the database on startup or not.image_folder(string): Path to where uploaded images should be stored.secret(string): Secret used to encrypt session cookies with.GIN_MODE(string): The mode for theGinframework, see github.PORT(integer): The port to host the backend on.
Superadmin login: username=admin password=password.
For development, the client and secret is a bit funky. The default values wouldn't work so I set up a new client in gamma and retrieved its secret and clientId.
GAMMA_AUTHORIZATION_URI: The uri to Gamma endpoint to login. (should be gamma backend url/api/oauth/authorize)GAMMA_REDIRECT_URI: The uri to redirect to with the response from Gamma (should be frontend base url/api/auth/account/callback)GAMMA_TOKEN_URI: (should be gamma backend url/api/oath/token)GAMMA_ME_URI: The uri to fetch the me user object from gamma. (should be gamma backend url/api/users/me)GAMMA_SECRET: The secret that gamma has stored for songbook, retrieved when setting up the oauth2 service. (example BefJFlmvJJjWTGPmpXWQXIpD6jzbSYAiwJRLqyUfUwrepd3gn4MGYAvROsZKQBVTiMapoRiDkRY)GAMMA_CLIENT_ID: The client id that gamma has stored for songbook, retrieved when setting up the oauth2 service. (example meY2VSxhZIxtCCeKgJ7jH3Odli3UmmcvrwiELhtSsvzZ1bMt33E2QpD8ctHR7CJMBTBKRismZSX)GAMMA_LOGOUT_URL: The url to log the user out. (should be gamma backend url/api/logout)