version: '3.8'

services:
  app:
    build:
      context: .
      args:
        - APP_ENV
    command: npm run start:dev
    ports:
      - 3000:3000
    volumes:
      - ./:/usr/src/app
      - node_modules:/usr/src/app/node_modules/
    environment:
      APP_ENV: ${APP_ENV}
      APP_PORT: ${APP_PORT}
      DB_HOST: mysqldb
      DB_PORT: ${DB_PORT}
      DB_NAME: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASS: ${DB_PASS}
      JWT_ACCESS_TOKEN_EXP_IN_SEC: ${JWT_ACCESS_TOKEN_EXP_IN_SEC}
      JWT_REFRESH_TOKEN_EXP_IN_SEC: ${JWT_REFRESH_TOKEN_EXP_IN_SEC}
      JWT_PUBLIC_KEY_BASE64: ${JWT_PUBLIC_KEY_BASE64}
      JWT_PRIVATE_KEY_BASE64: ${JWT_PRIVATE_KEY_BASE64}
      DEFAULT_ADMIN_USER_PASSWORD: ${DEFAULT_ADMIN_USER_PASSWORD}
    depends_on:
      - mysqldb

  mysqldb:
    image: mysql:8
    platform: ${MYSQL_PLATFORM}
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - 3306:3306
    volumes:
      - mysqldata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: example_db

  adminer:
    image: adminer
    ports:
      - 8080:8080
    depends_on:
      - mysqldb

volumes:
  node_modules:
  mysqldata:
