Grouping of resources created using for_each with a conditional statement

Consider the following scenario:

I am trying to create multiple resources from multiple modules using for_each.

My main.tf file reads

//postgres

module "postgres" {
  source = "./postgres"
  for_each = var.app
  name = each.key
  region = each.value.postgres.region
  postgres_database_version = lookup(each.value.postgres, "postgres_database_version", "")
}

//mysql

module "mysql" {
  source = "./mysql"
  for_each = var.app
  name = each.key
  region = each.value.mysql.region
  mysql_database_version = lookup(each.value.mysql, "mysql_database_version", "")
}

//mssql

module "mssql" {
  source = "./mssql"
  for_each = var.app
  name = each.key
  region = each.value.mssql.region
  mssql_database_version = lookup(each.value.mssql, "mssql_database_version", "")
}

variable.tf

variable "app" {}

terraform.tfvars

app = {
     app1 = {
        mssql = {
          region = "us-east1"
        }
        mysql = {
          region = "us-east1"
        }
        postgres = {
          region = "us-east1"
        }
     }
     app2 = {
        mssql = {
          region = "us-east1"
        }
        mysql = {
          region = "us-east1"
        }
        postgres = {
          region = "us-east1"
        }
     }
     app3 = {
        mssql = {
          region = "us-east1"
        }
        mysql = {
          region = "us-east1"
        }
        postgres = {
          region = "us-east1"
        }
     }
}

This works fine if I am creating all three resources(MySQL, mssql and postgres) for app1, app2, and app3.

However, it does not work if I want to create say only postgres for app1, MySQL and mssql for app2, and mssql and postgres for app3 as follows

app = {
     app1 = {
        postgres = {
          region = "us-east1"
        }
     }
     app2 = {
        mssql = {
          region = "us-east1"
        }
        mysql = {
          region = "us-east1"
        }
     }
     app3 = {
        mssql = {
          region = "us-east1"
        }
        postgres = {
          region = "us-east1"
        }
     }
}

I need to include a conditional statement in for_each that prevents the creation of a resource if no value for the resource is provided or if an empty map is passed

example

app = {
     app1 = {
        postgres = {
          region = "us-east1"
        }
     }
        mssql = {}
        mysql = {}
}

should only create a postgres DB

I have tried,

module "mysql" {source = "./mysql"
     for_each = { for k, v in values(var.app)[*] : i => c if values(var.app)[*].mssql != {} }

module "postgres" {source = "./postgres"
     for_each = { for k, v in values(var.app)[*] : i => c if values(var.app)[*].postgres != {} }

module "mssql" {source = "./mssql"
    for_each = { for k, v in values(var.app)[*] : i => c if values(var.app)[*].mysql != {} }

but this does not seem to work. Any ideas on how to solve this would be much appreciated.