ebs/docs/database.md
2023-12-21 08:49:38 +01:00

3.5 KiB

Database

Introduction

The database choosen is a Postgres 14 database as it integrates well with Symfony and Doctrine. When developping you can use the make load-fixtures command to reload a database from scratch with some data samples.

Docker

In the docker hub, the database is available with the database DSN. Check out the default settings in the docker-compose.yml file.

Schema

Here is the current schema of the dabase:

MCD

It has 19 tables divided in several domains:

  • users
  • groups
  • products
  • service requests
  • payments
  • menu
  • pages
  • configuration

Service requests

In this application, the technical name for loans and services (services are not related to objects) are service requests.

Services requests are linked to products.

A product can be an object or a service.

The service requests follow a strict workflow in order to garantee the date integrity.

Here is the workflow in place:

MCD

System tables

  • The migrations are stored in the doctrine_migration_table.
  • The messages are store in messenger_messages

Note that for now all messages are synchronous, but if you change to change this for performance reasons, the messages will be stored in these tables ans then processed by the messenger consumer.

Check out the Symfony documention on this subject.

It's up to your responsability to setup the CRON that will consume the asynchronous messages.

Doctrine

The description of each property/field is described in each entity:

Example:

/**
 * A user must be enabled to be able to login. If a user tries to login with
 * a deactivated account, then he will have a specific message indicating
 * the reason he can't login. He should be adviced to contact the instance administrator.
 */
#[ORM\Column(type: 'boolean', nullable: false)]
protected bool $enabled = true;

So, open the entity Doctrine files in the src/Entity directory to have the description of each property.

Development

To access the database with a GUI, after running make start you can run make start-dev and enter http://localhost:8989/?pgsql=database&username=app&db=app&ns=public&dump=service_request to access the adminer interface which is a small convenient tool to view the tables and data they contain.

Tests

Fixtures are loaded depending on the current environment. In dev and test the same fixtures are loaded (dev is a symbolik link to test, see fixtures/.

Production

A database with the minimal data to bootstrap the application is available. It can be loaded with:

make load-prod-fixtures

It should only be used one time, or if you want to reset the database for testing purpose. Use it with care as it will delete all existing data of the current configured database.

Migrations

When the project will evolve, Doctrine migrations will be provided. Retrieve the migrations in your project, then run:

bin/console doctrine:migrations:migrate --env=prod

Use the --no-interaction option to skip the interactive mode. Use this option with care.

Migrations will be documented in each file in the main docblock, so open them to precisely understand what will be modified.

Also understand, that depending on the cases, sometimes a migration cannot be undone. It's your responsability to make a full backup of your data before running migrations.