search method

  1. @override
FutureOr<List<ServiceDefinitionModel>> search(
  1. ServiceDefinitionSearchModel query, {
  2. bool createOpLog = false,
})
override

The search method searches for entities that match the given query.

Implementation

@override
FutureOr<List<ServiceDefinitionModel>> search(
  ServiceDefinitionSearchModel query, {
  bool createOpLog = false,
}) async {
  return retryLocalCallOperation(() async {
    final selectQuery = sql.select(sql.serviceDefinition).join([]);

    final results = await (selectQuery
          ..where(buildAnd([
            if (query.id != null)
              sql.serviceDefinition.id.equals(
                query.id!,
              ),
            // To fetch service definition of a single checklist with the code
            if (query.code != null)
              sql.serviceDefinition.code.isIn(
                query.code!,
              ),
          ])))
        .get();

    final List<ServiceDefinitionModel> serviceDefinitionList = [];
    for (final e in results) {
      final data = e.readTable(sql.serviceDefinition);
      final selectattributeQuery = sql.select(sql.attributes).join([]);

      final val = await (selectattributeQuery
            ..where(buildAnd([
              sql.attributes.referenceId.equals(
                data.id!,
              ),
            ])))
          .get();

      final res = val.map((e) {
        final resull = e.readTableOrNull(sql.attributes);
        if (resull != null) {
          List<String> list = resull.values != null
              ? resull.values!
                  .replaceFirst('[', '')
                  .replaceFirst(']', '')
                  .replaceAll(" ", '')
                  .split(',')
              : [];
          if (list.isEmpty) list.removeRange(0, list.length);

          return AttributesModel(
            id: resull.id,
            code: resull.code,
            dataType: resull.dataType,
            referenceId: resull.referenceId,
            tenantId: resull.tenantId,
            values: resull.values?.isNotEmpty == true ? list : null,
            isActive: resull.isActive,
            required: resull.required,
            regex: resull.regex,
            order: resull.order,
            isDeleted: resull.isDeleted,
            rowVersion: resull.rowVersion,
          );
        }
      }).toList();

      serviceDefinitionList.add(ServiceDefinitionModel(
        id: data.id,
        tenantId: data.tenantId,
        rowVersion: data.rowVersion,
        code: data.code,
        isActive: data.isActive,
        isDeleted: data.isDeleted,
        attributes: res.whereNotNull().toList(),
      ));
    }

    return serviceDefinitionList;
  });
}