# 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.
#

# You can replace and test a more recent version of docker compose
version: '3.7'
services:
  # Backend service
  fineractmysql:
    image: mariadb:10.10
    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
      - JAVA_TOOL_OPTIONS="-Xmx1G"
