Guest User

Untitled

a guest
Jun 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.63 KB | None | 0 0
  1. /**
  2. * filter operators
  3. */
  4. enum ApiRequestFilterOperator {
  5. Equals,
  6. NotEquals,
  7. GreaterThan,
  8. LessThan,
  9. GreaterThanOrEqualTo,
  10. LessThanOrEqualTo,
  11. Contains,
  12. StartsWith,
  13. CaseInsensitiveStringContains,
  14. CaseInsensitiveStringStartsWith,
  15. CaseInsensitiveStringEquals
  16. }
  17.  
  18.  
  19. /**
  20. * Sort directions
  21. */
  22. enum ApiRequestSortDirection {
  23. Asc,
  24. Desc
  25. }
  26.  
  27.  
  28. /**
  29. * One filter representation
  30. */
  31. interface IApiFilter {
  32. parameter: string;
  33. operator: ApiRequestFilterOperator;
  34. value: string;
  35. }
  36.  
  37.  
  38. /**
  39. * One sort representation
  40. */
  41. interface IApiSort {
  42. parameter: string;
  43. direction: ApiRequestSortDirection;
  44. }
  45.  
  46.  
  47. /**
  48. * Api request filter common interface
  49. */
  50. interface IApiRequestFilter {
  51. filters: IApiFilter[];
  52. sorts: IApiSort[];
  53. page: number;
  54. pageSize: number;
  55. /**
  56. * Build a filter object to string-filter like ?filter=&sorts=&page=&pageSize=
  57. */
  58. build(): string;
  59. }
  60.  
  61.  
  62. /**
  63. *
  64. */
  65. class ApiRequestSieveFilter implements IApiRequestFilter {
  66. filters: IApiFilter[];
  67. sorts: IApiSort[];
  68. page: number;
  69. pageSize: number;
  70.  
  71.  
  72. constructor() {
  73. this.filters = new Array<IApiFilter>();
  74. this.sorts = new Array<IApiSort>();
  75. this.page = 1;
  76. this.pageSize = 100;
  77. }
  78.  
  79.  
  80. /**
  81. * Build filter string
  82. */
  83. build(): string {
  84. let result = "?filters=";
  85.  
  86. this.filters.forEach((f, i) => {
  87. let translatedOperator = "";
  88. switch (f.operator) {
  89. case ApiRequestFilterOperator.Equals:
  90. translatedOperator = "==";
  91. break;
  92. case ApiRequestFilterOperator.NotEquals:
  93. translatedOperator = "!=";
  94. break;
  95. case ApiRequestFilterOperator.GreaterThan:
  96. translatedOperator = ">";
  97. break;
  98. case ApiRequestFilterOperator.LessThan:
  99. translatedOperator = "<";
  100. break;
  101. case ApiRequestFilterOperator.GreaterThanOrEqualTo:
  102. translatedOperator = ">=";
  103. break;
  104. case ApiRequestFilterOperator.LessThanOrEqualTo:
  105. translatedOperator = "<=";
  106. break;
  107. case ApiRequestFilterOperator.Contains:
  108. translatedOperator = "@=";
  109. break;
  110. case ApiRequestFilterOperator.StartsWith:
  111. translatedOperator = "_=";
  112. break;
  113. case ApiRequestFilterOperator.CaseInsensitiveStringContains:
  114. translatedOperator = "@=*";
  115. break;
  116. case ApiRequestFilterOperator.CaseInsensitiveStringStartsWith:
  117. translatedOperator = "_=*";
  118. break;
  119. case ApiRequestFilterOperator.CaseInsensitiveStringEquals:
  120. translatedOperator = "==*";
  121. break;
  122. }
  123.  
  124. result += (i === 0 ? "" : ",") + (f.parameter + translatedOperator + f.value);
  125. });
  126.  
  127. result += "&sorts=";
  128. this.sorts.forEach((s, i) => {
  129. let translatedValue = "";
  130. switch (s.direction) {
  131. case ApiRequestSortDirection.Asc:
  132. translatedValue = s.parameter;
  133. break;
  134. case ApiRequestSortDirection.Desc:
  135. translatedValue = `-${s.parameter}`;
  136. break;
  137. }
  138. result += (i === 0 ? "" : ",") + translatedValue;
  139. });
  140.  
  141. result += `&page=${this.page}&pageSize=${this.pageSize}`;
  142. return result;
  143. }
  144. }
Add Comment
Please, Sign In to add comment