init method

void init()
inherited

Implementation

void init() {
  dbVersion = dbVersion ?? 1;
  final manyToManyTables = <SqfEntityTableBase>[];
  //print('ModelBase init() begin');
  for (final table in databaseTables!) {
    if (table.dbModel == null) {
      if (instanceName == null) {
        table.dbModel = toCamelCase(table.tableName!);
      } else {
        table.dbModel = toCamelCase(instanceName!);
      }
    }
    //print('CHECK AND CONFIGURE MANY_TO_MANY RELATIONS');
    // CHECK AND CONFIGURE MANY_TO_MANY RELATIONS
    for (final field
        in table.fields!.whereType<SqfEntityFieldRelationshipBase>()) {
      // if (field.relationType == RelationType.ONE_TO_MANY_VICEVERSA) {
      //   field.relationType = RelationType.ONE_TO_MANY;
      //   databaseTables!
      //       .singleWhere((t) => t.tableName == field.table!.tableName!)
      //     ..fields!.add(SqfEntityFieldRelationshipBase(
      //         table, field.deleteRule,
      //         relationType: RelationType.ONE_TO_MANY));
      //   field.table!.init();
      // } else
      if (field.relationType == RelationType.MANY_TO_MANY) {
        print('found RelationShip ManyToMany');
        final many2ManyTableName = field.manyToManyTableName ??
            '${table.tableName}${toCamelCase(field.table!.tableName!)}';
        table.relationType = table.relationType != RelationType.ONE_TO_ONE
            ? null
            : table.relationType;
        field.table!.relationType =
            field.table!.relationType != RelationType.ONE_TO_ONE
                ? null
                : field.table!.relationType;
        field.manyToManyTableName = many2ManyTableName;

        final many2manyTableExist = databaseTables!
            .where((t) =>
                t.tableName!.toLowerCase() ==
                many2ManyTableName.toLowerCase())
            .toList();
        SqfEntityTableBase many2manyTable;
        if (many2manyTableExist.isNotEmpty) {
          many2manyTable = many2manyTableExist[0];
        } else {
          many2manyTable = SqfEntityTableBase()
            ..tableName = many2ManyTableName
            ..modelName = toModelName(many2ManyTableName, many2ManyTableName)
            ..primaryKeyName = ''
            ..primaryKeyType = null
            ..relationType = RelationType.MANY_TO_MANY
            ..useSoftDeleting = table.useSoftDeleting
            ..fields = [
              SqfEntityFieldRelationshipBase(table, field.deleteRule,
                  fieldName: table.primaryKeyNames[0] ==
                          field.table!.primaryKeyNames[0]
                      ? '${table.tableName}${toCamelCase(table.primaryKeyNames[0])}'
                      : table.primaryKeyNames[0],
                  isPrimaryKeyField: true,
                  relationType: RelationType.ONE_TO_MANY),
              SqfEntityFieldRelationshipBase(field.table, field.deleteRule,
                  fieldName: table.primaryKeyNames[0] ==
                          field.table!.primaryKeyNames[0]
                      ? '${field.table!.tableName}${toCamelCase(field.table!.primaryKeyNames[0])}'
                      : field.table!.primaryKeyNames[0],
                  isPrimaryKeyField: true,
                  relationType: RelationType.ONE_TO_MANY)
            ]
            ..init();
          manyToManyTables.add(many2manyTable);
        }
        if (databaseTables!.length > 1) {
          if (field.table!.fields!
              .where((f) =>
                  f is SqfEntityFieldRelationshipBase &&
                  f.relationType == RelationType.MANY_TO_MANY &&
                  f.table == table)
              .isEmpty) {
            databaseTables!
                .singleWhere((t) => t.tableName == field.table!.tableName!)
              ..fields!.add(SqfEntityFieldRelationshipBase(
                  table, field.deleteRule,
                  manyToManyTableName: many2ManyTableName,
                  manyToManyTable: many2manyTable,
                  relationType: RelationType.MANY_TO_MANY));
            field.table!.init();
          }
        }
        field.manyToManyTable = many2manyTable;
        final rFieldList = field.table!.fields!
            .whereType<SqfEntityFieldRelationshipBase>()
            .toList();
        if (rFieldList.isNotEmpty) {
          for (final f in rFieldList) {
            if (f.relationType != null &&
                f.relationType == RelationType.MANY_TO_MANY &&
                f.table != null &&
                f.table == table) {
              f.manyToManyTable = many2manyTable;
            }
          }
        }
      } else if (field.relationType == RelationType.ONE_TO_ONE &&
          (field.table != null && field.table != table)) {
        table.relationType = RelationType.ONE_TO_ONE;
      }
    }
  }
  //print('before final table in manyToManyTables lenght=${manyToManyTables.length}');
  for (final table in manyToManyTables) {
    databaseTables!.add(table);
  }
  for (final table in databaseTables!) {
    table.collections = _getCollections(table, this);
    // databaseTables!.add(table);
  }
}