# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# NB: Travis CI (dist: bionic) supports up to v3.7
# (unless we'd install a more recent version in .travis.yml)
version: '3.7'
services:
  # Backend service
  fineractmysql:
    image: mariadb:10.8
    volumes:
      - ./fineract-db/server_collation.cnf:/etc/mysql/conf.d/server_collation.cnf
      - ./fineract-db/docker:/docker-entrypoint-initdb.d:Z,ro
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: skdcnwauicn2ucnaecasdsajdnizucawencascdca
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "--password=skdcnwauicn2ucnaecasdsajdnizucawencascdca" ]
      timeout: 10s
      retries: 10
    ports:
      - "3306:3306"
  fineract-server:
    image: fineract:latest
    volumes:
      - ./fineract-provider/build/data:/data
    healthcheck:
      test: ["CMD", 'sh', '-c', 'echo -e "Checking for the availability of Fineract server deployment"; while ! nc -z "fineract-server" 8443; do sleep 1; printf "-"; done; echo -e " >> Fineract server has started";' ]
      timeout: 10s
      retries: 10
    ports:
      - 8443:8443
    depends_on:
      fineractmysql:
        condition: service_healthy
    environment:
      # TODO: env vars prefixed with "fineract_tenants_*" will be removed with one of the next releases
      #- fineract_tenants_driver=org.mariadb.jdbc.Driver
      #- fineract_tenants_url=jdbc:mariadb://fineractmysql:3306/fineract_tenants
      #- fineract_tenants_uid=root
      #- fineract_tenants_pwd=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      # NOTE: node aware scheduler
      - FINERACT_NODE_ID=1
      # NOTE: env vars prefixed "FINERACT_HIKARI_*" are used to configure the database connection pool
      - FINERACT_HIKARI_DRIVER_SOURCE_CLASS_NAME=org.mariadb.jdbc.Driver
      - FINERACT_HIKARI_JDBC_URL=jdbc:mariadb://fineractmysql:3306/fineract_tenants
      - FINERACT_HIKARI_USERNAME=root
      - FINERACT_HIKARI_PASSWORD=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      # ... following variables are optional; "application.properties" contains reasonable defaults (same as here)
      - FINERACT_HIKARI_MINIMUM_IDLE=3
      - FINERACT_HIKARI_MAXIMUM_POOL_SIZE=10
      - FINERACT_HIKARI_IDLE_TIMEOUT=60000
      - FINERACT_HIKARI_CONNECTION_TIMEOUT=20000
      - FINERACT_HIKARI_TEST_QUERY=SELECT 1
      - FINERACT_HIKARI_AUTO_COMMIT=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_PREP_STMTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_PREP_STMT_CACHE_SIZE=250
      - FINERACT_HIKARI_DS_PROPERTIES_PREP_STMT_CACHE_SQL_LIMIT=2048
      - FINERACT_HIKARI_DS_PROPERTIES_USE_SERVER_PREP_STMTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_USE_LOCAL_SESSION_STATE=true
      - FINERACT_HIKARI_DS_PROPERTIES_REWRITE_BATCHED_STATEMENTS=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_RESULT_SET_METADATA=true
      - FINERACT_HIKARI_DS_PROPERTIES_CACHE_SERVER_CONFIGURATION=true
      - FINERACT_HIKARI_DS_PROPERTIES_ELIDE_SET_AUTO_COMMITS=true
      - FINERACT_HIKARI_DS_PROPERTIES_MAINTAIN_TIME_STATS=false
      - FINERACT_HIKARI_DS_PROPERTIES_LOG_SLOW_QUERIES=true
      - FINERACT_HIKARI_DS_PROPERTIES_DUMP_QUERIES_IN_EXCEPTION=true
      # NOTE: env vars prefixed "FINERACT_DEFAULT_TENANTDB_*" are used to create the default tenant database
      - FINERACT_DEFAULT_TENANTDB_HOSTNAME=fineractmysql
      - FINERACT_DEFAULT_TENANTDB_PORT=3306
      - FINERACT_DEFAULT_TENANTDB_UID=root
      - FINERACT_DEFAULT_TENANTDB_PWD=skdcnwauicn2ucnaecasdsajdnizucawencascdca
      - FINERACT_DEFAULT_TENANTDB_CONN_PARAMS=
      - FINERACT_DEFAULT_TENANTDB_TIMEZONE=Asia/Kolkata
      - FINERACT_DEFAULT_TENANTDB_IDENTIFIER=default
      - FINERACT_DEFAULT_TENANTDB_NAME=fineract_default
      - FINERACT_DEFAULT_TENANTDB_DESCRIPTION=Default Demo Tenant
