crud static method

SimpleApiBuilder crud({
  1. required String title,
  2. required String baseUrl,
  3. required String resource,
  4. String? description,
  5. List<String>? listQueryParams,
  6. bool includeSearch = false,
})

Creates a standard CRUD API for a resource.

This is a convenience method that adds common CRUD endpoints:

  • GET /resource (list all)
  • GET /resource/{id} (get by ID)
  • POST /resource (create)
  • PUT /resource/{id} (update)
  • DELETE /resource/{id} (delete)

Implementation

static SimpleApiBuilder crud({
  required String title,
  required String baseUrl,
  required String resource,
  String? description,
  List<String>? listQueryParams,
  bool includeSearch = false,
}) {
  final builder = SimpleApiBuilder(
    title: title,
    baseUrl: baseUrl,
    description: description,
  );

  // List all
  builder.get(
    '/$resource',
    name: 'Get All $resource',
    description: 'Retrieve all $resource items',
    queryParams: [
      ...?listQueryParams,
      if (includeSearch) 'search',
      '_limit',
      '_offset',
    ],
    tags: [resource, 'read'],
    responseType: 'List<${_capitalize(resource)}>',
  );

  // Get by ID
  builder.get(
    '/$resource/{id}',
    name: 'Get $resource by ID',
    description: 'Retrieve a specific $resource item',
    tags: [resource, 'read'],
    responseType: _capitalize(resource),
  );

  // Create
  builder.post(
    '/$resource',
    name: 'Create $resource',
    description: 'Create a new $resource item',
    tags: [resource, 'write'],
    responseType: _capitalize(resource),
  );

  // Update
  builder.put(
    '/$resource/{id}',
    name: 'Update $resource',
    description: 'Update an existing $resource item',
    tags: [resource, 'write'],
    responseType: _capitalize(resource),
  );

  // Delete
  builder.delete(
    '/$resource/{id}',
    name: 'Delete $resource',
    description: 'Delete a $resource item',
    tags: [resource, 'write'],
    responseType: 'void',
  );

  return builder;
}