@@ -542,69 +542,29 @@ class MockSupabaseHttpClient extends BaseClient {
542
542
final value = postrestFilter.substring (4 );
543
543
return (row) => row[columnName].toString () != value;
544
544
} else if (postrestFilter.startsWith ('gt.' )) {
545
- final value = postrestFilter.substring (3 );
546
-
547
- if (DateTime .tryParse (value) != null ) {
548
- final dateTime = DateTime .parse (value);
549
-
550
- return (row) {
551
- final rowDate = DateTime .tryParse (row[columnName].toString ());
552
- return rowDate != null && rowDate.isAfter (dateTime);
553
- };
554
- } else if (num .tryParse (value) != null ) {
555
- return (row) => row[columnName] > num .tryParse (value);
556
- } else {
557
- throw UnimplementedError ('Unsupported value type' );
558
- }
545
+ return _handleComparison (
546
+ operator : 'gt' ,
547
+ value: postrestFilter.substring (3 ),
548
+ columnName: columnName,
549
+ );
559
550
} else if (postrestFilter.startsWith ('lt.' )) {
560
- final value = postrestFilter.substring (3 );
561
-
562
- if (DateTime .tryParse (value) != null ) {
563
- final dateTime = DateTime .parse (value);
564
-
565
- return (row) {
566
- final rowDate = DateTime .tryParse (row[columnName].toString ());
567
- return rowDate != null && rowDate.isBefore (dateTime);
568
- };
569
- } else if (num .tryParse (value) != null ) {
570
- return (row) => row[columnName] < num .tryParse (value);
571
- } else {
572
- throw UnimplementedError ('Unsupported value type' );
573
- }
551
+ return _handleComparison (
552
+ operator : 'lt' ,
553
+ value: postrestFilter.substring (3 ),
554
+ columnName: columnName,
555
+ );
574
556
} else if (postrestFilter.startsWith ('gte.' )) {
575
- final value = postrestFilter.substring (4 );
576
-
577
- if (DateTime .tryParse (value) != null ) {
578
- final dateTime = DateTime .parse (value);
579
-
580
- return (row) {
581
- final rowDate = DateTime .tryParse (row[columnName].toString ());
582
- if (rowDate == null ) return false ;
583
- return rowDate.isAtSameMomentAs (dateTime) ||
584
- rowDate.isAfter (dateTime);
585
- };
586
- } else if (num .tryParse (value) != null ) {
587
- return (row) => row[columnName] >= num .tryParse (value);
588
- } else {
589
- throw UnimplementedError ('Unsupported value type' );
590
- }
557
+ return _handleComparison (
558
+ operator : 'gte' ,
559
+ value: postrestFilter.substring (4 ),
560
+ columnName: columnName,
561
+ );
591
562
} else if (postrestFilter.startsWith ('lte.' )) {
592
- final value = postrestFilter.substring (4 );
593
-
594
- if (DateTime .tryParse (value) != null ) {
595
- final dateTime = DateTime .parse (value);
596
-
597
- return (row) {
598
- final rowDate = DateTime .tryParse (row[columnName].toString ());
599
- if (rowDate == null ) return false ;
600
- return rowDate.isAtSameMomentAs (dateTime) ||
601
- rowDate.isBefore (dateTime);
602
- };
603
- } else if (num .tryParse (value) != null ) {
604
- return (row) => row[columnName] <= num .tryParse (value);
605
- } else {
606
- throw UnimplementedError ('Unsupported value type' );
607
- }
563
+ return _handleComparison (
564
+ operator : 'lte' ,
565
+ value: postrestFilter.substring (4 ),
566
+ columnName: columnName,
567
+ );
608
568
} else if (postrestFilter.startsWith ('like.' )) {
609
569
final value = postrestFilter.substring (5 );
610
570
final regex = RegExp (value.replaceAll ('%' , '.*' ));
@@ -664,6 +624,72 @@ class MockSupabaseHttpClient extends BaseClient {
664
624
return (row) => true ;
665
625
}
666
626
627
+ /// Handles comparison operations for date and numeric values.
628
+ ///
629
+ /// This function creates a filter based on the given comparison [operator] ,
630
+ /// [value] , and [columnName] . It supports both date and numeric comparisons.
631
+ ///
632
+ /// [operator] can be 'gt', 'lt', 'gte', or 'lte'.
633
+ /// [value] is the string representation of the value to compare against.
634
+ /// [columnName] is the name of the column to compare in each row.
635
+ ///
636
+ /// Returns a function that takes a row and returns a boolean indicating
637
+ /// whether the row matches the comparison criteria.
638
+ bool Function (Map <String , dynamic > row) _handleComparison ({
639
+ required String operator ,
640
+ required String value,
641
+ required String columnName,
642
+ }) {
643
+ // Check if the value is a valid date
644
+ if (DateTime .tryParse (value) != null ) {
645
+ final dateTime = DateTime .parse (value);
646
+ return (row) {
647
+ final rowDate = DateTime .tryParse (row[columnName].toString ());
648
+ if (rowDate == null ) return false ;
649
+ // Perform date comparison based on the operator
650
+ switch (operator ) {
651
+ case 'gt' :
652
+ return rowDate.isAfter (dateTime);
653
+ case 'lt' :
654
+ return rowDate.isBefore (dateTime);
655
+ case 'gte' :
656
+ return rowDate.isAtSameMomentAs (dateTime) ||
657
+ rowDate.isAfter (dateTime);
658
+ case 'lte' :
659
+ return rowDate.isAtSameMomentAs (dateTime) ||
660
+ rowDate.isBefore (dateTime);
661
+ default :
662
+ throw UnimplementedError ('Unsupported operator: $operator ' );
663
+ }
664
+ };
665
+ }
666
+ // Check if the value is a valid number
667
+ else if (num .tryParse (value) != null ) {
668
+ final numValue = num .parse (value);
669
+ return (row) {
670
+ final rowValue = num .tryParse (row[columnName].toString ());
671
+ if (rowValue == null ) return false ;
672
+ // Perform numeric comparison based on the operator
673
+ switch (operator ) {
674
+ case 'gt' :
675
+ return rowValue > numValue;
676
+ case 'lt' :
677
+ return rowValue < numValue;
678
+ case 'gte' :
679
+ return rowValue >= numValue;
680
+ case 'lte' :
681
+ return rowValue <= numValue;
682
+ default :
683
+ throw UnimplementedError ('Unsupported operator: $operator ' );
684
+ }
685
+ };
686
+ }
687
+ // Throw an error if the value is neither a date nor a number
688
+ else {
689
+ throw UnimplementedError ('Unsupported value type' );
690
+ }
691
+ }
692
+
667
693
StreamedResponse _createResponse (dynamic data,
668
694
{int statusCode = 200 ,
669
695
required BaseRequest request,
0 commit comments