#
# CloudSQL Postgres Database
#

# CloudSQL requires that a fairly long, unspecified amount of time
# passes before a database name can be reused. To ease testing where
# we create and destroy databases a lot, we append 4 random digits to
# the database name.
resource "random_integer" "dbname" {
  min = 1000
  max = 9999
  keepers = {
    indexer = "${var.indexer}"
  }
}

resource "google_sql_database_instance" "graph" {
  database_version = "POSTGRES_12"
  name             = "${var.indexer}-${random_integer.dbname.result}"
  settings {
    activation_policy = "ALWAYS"
    availability_type = "ZONAL"
    disk_autoresize   = true
    disk_size         = 100
    disk_type         = "PD_SSD"
    tier              = var.database_tier
    ip_configuration {
      ipv4_enabled    = false
      private_network = "projects/${var.project}/global/networks/default"
    }
    backup_configuration {
      binary_log_enabled = false
      enabled            = true
      start_time         = "02:00"
    }
    database_flags {
      name  = "log_temp_files"
      value = "-1"
    }
    database_flags {
      name  = "log_lock_waits"
      value = "on"
    }
  }
}

resource "google_sql_database" "graph" {
  name     = "graph"
  instance = google_sql_database_instance.graph.name
}

resource "google_sql_database" "indexer-service" {
  name     = "indexer-service"
  instance = google_sql_database_instance.graph.name
}

resource "google_sql_database" "vector" {
  name     = "vector"
  instance = google_sql_database_instance.graph.name
}

resource "google_sql_user" "graph" {
  name     = "graph"
  instance = google_sql_database_instance.graph.name
  password = var.database_password
}