services:
  backend:
    image: gradle:8-jdk21-alpine
    command: sh -c "cd /booklore-api && ./gradlew bootRun"
    ports:
      - "${BACKEND_PORT:-8080}:8080"
    environment:
      - DATABASE_URL=jdbc:mariadb://backend_db:3306/booklore
      - DATABASE_USERNAME=booklore
      - DATABASE_PASSWORD=booklore
    stdin_open: true
    tty: true
    restart: unless-stopped
    depends_on:
      - backend_db
    volumes:
      - './booklore-api:/booklore-api'
      - ./shared/data:/app/data
      - ./shared/books:/books

  backend_db:
    image: mariadb:11.4
    container_name: backend_db
    volumes:
      - backend_db:/var/lib/mysql
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=booklore
      - MYSQL_DATABASE=booklore
      - MYSQL_USER=booklore
      - MYSQL_PASSWORD=booklore
    healthcheck:
      test: [ "CMD", "mariadb-admin", "ping", "-h", "localhost", "-uroot", "-pbooklore" ]
      interval: 10s
      timeout: 5s
      retries: 5

  ui:
    image: node:22-alpine
    command: sh -c "cd /angular-app && npm install -g @angular/cli --force && npm install --force && ng serve --host 0.0.0.0"
    environment:
      - NODE_ENV=development
    stdin_open: true
    tty: true
    restart: unless-stopped
    volumes:
      - './booklore-ui:/angular-app'

        # you can have node_modules in a volume. however, if you enable this, expect trouble in some IDEs, as the deps are not available anymore
        # - node_modules:/angular-app/node_modules

        # we ignore package-lock otherwise will throw
        # An unhandled exception occurred: Cannot find module @rollup/rollup-linux-x64-musl. npm has a bug related to optional dependencies (https://github.com/npm/cli/issues/4828).
        # Please try `npm i` again after removing both package-lock.json and node_modules directory.
      - '/dev/null:/angular-app/package-lock.json'
    ports:
      - "${FRONTEND_PORT:-4200}:4200"

volumes:
  node_modules:
  backend_db:
