delete method

Future<APIResponse<String>> delete(
  1. String table,
  2. APIRequest apiRequest,
  3. Object? id
)

Implementation

Future<APIResponse<String>> delete(
    String table, APIRequest apiRequest, Object? id) async {
  if (onlyOnDevelopment && !development) {
    return APIResponse.error(error: "Unsupported request!");
  }

  var entityRepository =
      (await entityRepositoryProviders).getEntityRepository(name: table);

  if (entityRepository == null) {
    return APIResponse.error(error: "Can't find table: $table");
  }

  final entityType = entityRepository.type;
  final entityHandler = entityRepository.entityHandler;

  id = entityHandler.resolveID(id) ?? id;
  if (id == null) {
    return APIResponse.notFound(payloadDynamic: "Null ID.");
  }

  var entityExists = await entityRepository.existsID(id);
  if (!entityExists) {
    return APIResponse.notFound(
        payloadDynamic: "Can't find `$entityType` entity with ID: $id");
  }

  var htmlDoc = HTMLDocument.darkTheme(
    title: 'DB - delete @ $entityType',
    top: _buildTop(
        apiRootName: apiRoot.name,
        apiRootVersion: apiRoot.version,
        table: table,
        entityType: entityType),
    footer: _buildFooter(),
  );

  var content = [];

  var confirmed = apiRequest.parameters.getAsBool('confirm') ?? false;

  if (confirmed) {
    try {
      var entity = await entityRepository.deleteByID(id);

      if (entity == null) {
        throw StateError("Delete returned a null Entity: $id @ $entityType");
      }

      content.add('<br><h2 style="text-align: left;">Deleted: #$id</h2>\n');

      _writeEntityJson(entityHandler, entityType, entity, content);
    } catch (e, s) {
      content.add(
          '<h3 style="text-align: left;">Error storing `$entityType`:</h3>\n');
      content.add('<pre>EntityRepository: $entityRepository</pre>\n');
      content.add('<pre>ERROR:\n$e\n$s\n</pre>\n');
    }
  } else {
    try {
      var entity = await entityRepository.selectByID(id);

      if (entity == null) {
        throw StateError("Can't select entity: $id @ $entityType");
      }

      content.add('<br><h2 style="text-align: left;">Delete? #$id</h2>\n');

      _writeEntityJson(entityHandler, entityType, entity, content);
    } catch (e, s) {
      content.add(
          '<h3 style="text-align: left;">Error storing `$entityType`:</h3>\n');
      content.add('<pre>EntityRepository: $entityRepository</pre>\n');
      content.add('<pre>ERROR:\n$e\n$s\n</pre>\n');
    }

    var url = apiRequest.requestedUri;

    content.add(
        '''<br><div style="text-align: left; width: 100%;"><button type="submit" onclick="window.location='${url.path}?confirm=true'">Confirm Deletion</button></div>''');
  }

  htmlDoc.content = content;

  var html = htmlDoc.build();

  return APIResponse.ok(html, mimeType: 'html');
}