--- title: Back end --- The backend is written in nodejs/typescript. It's written as a REST API following a CSR (controller, service, repository/store) pattern. The following ADRs are defined for the backend: ## ADRs We have created a set of ADRs to help guide the development of the backend: * [Naming](../ADRs/back-end/naming.md) * [Preferred export](../ADRs/back-end/preferred-export.md) ## Requirements Before developing on this project you will need two things: - PostgreSQL 14.x or newer - Node.js 20.x or newer ```sh corepack enable yarn install yarn dev ``` ## PostgreSQL {#postgresql} To run and develop unleash, you need to have PostgreSQL database (PostgreSQL v14.x or newer) locally. Unleash currently also work with PostgreSQL v14+, but this might change in a future feature release, and we have stopped running automatic integration tests below PostgreSQL v12. The current recommendation is to use a role with Owner privileges since Unleash uses Postgres functions to simplify our database usage. ### Create a local unleash databases in postgres {#create-a-local-unleash-databases-in-postgres} ```bash $ psql postgres < yarn run db-migrate create YOUR-MIGRATION-NAME ``` All migrations require one `up` and one `down` method. There are some migrations that will maintain the database integrity, but not the data integrity and may not be safe to run on a production database. Example of a typical migration: ```js /* eslint camelcase: "off" */ 'use strict'; exports.up = function(db, cb) { db.createTable( 'examples', { id: { type: 'int', primaryKey: true, notNull: true }, created_at: { type: 'timestamp', defaultValue: 'now()' }, }, cb, ); }; exports.down = function(db, cb) { return db.dropTable('examples', cb); }; ``` Test your migrations: ```bash > yarn run db-migrate up > yarn run db-migrate down ``` ## Publishing / Releasing new packages {#publishing--releasing-new-packages} Please run `yarn test` checks before publishing. Run `npm run publish` to start the publishing process. `npm run publish:dry`