import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_mongodb/pip_services3_mongodb.dart';

class MyMongoDbPersistence extends MongoDbPersistence<MyData> {
  MyMongoDbPersistence() : super('mydata');

  Map<String, dynamic> composeFilter(FilterParams? filter) {
    filter = filter ?? FilterParams();
    var key = filter.getAsNullableString('key');

    var filterCondition = <String, dynamic>{};
    if (key != null) {
      filterCondition['key'] = key;
    }
    return filterCondition;
  }

  Map<String, dynamic> composeSort(SortParams? sort) {
    sort = sort ?? SortParams(null);

    var sortCondition = <String, dynamic>{};
    for (var field in sort) {
      sortCondition[field.name!] = field.ascending ? 1 : -1;
    }
    return sortCondition;
  }

  Future<MyData?> getOneRandom(String? correlationId, FilterParams? filter) {
    return super.getOneRandomEx(correlationId, composeFilter(filter));
  }

  Future<List<MyData>> getListByFilter(
      String? correlationId, FilterParams? filter, SortParams? sort) {
    return super.getListByFilterEx(
        correlationId, composeFilter(filter), composeSort(sort));
  }

  Future<DataPage<MyData>> getPageByFilter(String? correlationId,
      FilterParams? filter, PagingParams? paging, SortParams? sort) async {
    return super.getPageByFilterEx(
        correlationId, composeFilter(filter), paging, composeSort(sort));
  }

  Future<int> getCountByFilter(
      String? correlationId, FilterParams? filter) async {
    return super.getCountByFilterEx(correlationId, composeFilter(filter));
  }

  Future deleteByFilter(String? correlationId, FilterParams? filter) {
    return super.deleteByFilterEx(correlationId, composeFilter(filter));
  }
}