routeUpdate method

FinchRoute routeUpdate(
  1. String path, {
  2. List<String> methods = const [Methods.POST],
  3. Future<ApiDoc>? apiDoc()?,
  4. AuthController? auth,
  5. List<String> extraPath = const [],
  6. List<String> excludePaths = const [],
  7. List<String> hosts = const ['*'],
  8. Map<String, Object?> params = const {},
  9. List<String> permissions = const [],
  10. List<int> ports = const [],
})

Creates a route for updating existing documents in the collection. This method generates a REST API endpoint that handles document updates via complete replacement. The route expects a document ID in the URL path and processes POST requests containing the new document data. The update operation:

  • Validates the new data against the form definition
  • Replaces the entire document (not a partial update)
  • Triggers the onUpdate event if successful Parameters:
  • path - URL path for this route (should include {id} placeholder)
  • methods - HTTP methods to accept (default: POST)
  • apiDoc - Optional API documentation generator
  • auth - Optional authentication controller
  • extraPath - Additional path segments to match
  • excludePaths - Path segments to exclude from matching
  • hosts - Host names to match (default: all hosts)
  • params - Additional route parameters
  • permissions - Required permissions for access
  • ports - Specific ports to match Returns a FinchRoute configured for updating documents. Success response (200):
{
  "success": true,
  "message": "updated",
  "data": {"_id": "...", "name": "..."}
}

Error responses:

  • 404: Document not found
  • 502: Validation errors or missing ID

Implementation

FinchRoute routeUpdate(
  String path, {
  List<String> methods = const [Methods.POST],
  Future<ApiDoc>? Function()? apiDoc,
  AuthController<dynamic>? auth,
  List<String> extraPath = const [],
  List<String> excludePaths = const [],
  List<String> hosts = const ['*'],
  Map<String, Object?> params = const {},
  List<String> permissions = const [],
  List<int> ports = const [],
}) {
  Future<String> index() async {
    final rq = Context.rq;
    var id = rq.getParam('id', def: '').toString();

    if (id.isEmpty) {
      return rq.renderData(
        data: {
          'success': false,
          'message': 'id is required',
        },
        status: 502,
      );
    }

    var res = await replaceOne(id, rq.getAll());
    if (res == null) {
      return rq.renderData(
        data: {
          'success': false,
          'message': 'id not found',
        },
        status: 404,
      );
    }

    if (!res.success) {
      return rq.renderData(
        data: {
          'form': res.toJson(),
          'success': false,
          'message': 'error',
        },
        status: 502,
      );
    }

    return rq.renderData(data: {
      'data': res.formValues(),
      'success': true,
      'message': 'updated',
    });
  }

  return FinchRoute(
    path: path,
    methods: methods,
    apiDoc: apiDoc,
    auth: auth,
    excludePaths: excludePaths,
    extraPath: extraPath,
    hosts: hosts,
    params: params,
    permissions: permissions,
    ports: ports,
    index: index,
  );
}