build method

String build()

Builds the final OData query string by combining all provided options. It constructs a URL-friendly string with encoded values.

Example:

final query = ODataQuery(
  filter: Filter.eq('Name', 'Milk'),
  orderBy: OrderBy.asc('Price'),
).build();

print(query);
Output: "$filter=Name%20eq%20%27Milk%27&$orderby=Price%20asc"

Implementation

String build() {
  final Map<String, String> params = {
    if (search case final search?) r'$search': search,
    if (filter case final filter?) r'$filter': filter.toString(),
    if (orderBy case final orderBy?) r'$orderby': orderBy.toString(),
    if (select case final select? when select.isNotEmpty)
      r'$select': select.join(','),
    if (expand case final expand? when expand.isNotEmpty)
      r'$expand': expand.join(','),
    if (top case final top?) r'$top': top.toString(),
    if (skip case final skip?) r'$skip': skip.toString(),
    if (count case final count?) r'$count': count.toString().toLowerCase(),
  };

  if (params.isEmpty) {
    return '';
  }

  final queryString = params.entries
      .map((entry) => '${entry.key}=${Uri.encodeComponent(entry.value)}')
      .join('&');
  return queryString;
}