insert method

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

Implementation

Future<APIResponse<String>> insert(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;

  var update = false;
  Object? entity;

  if (id != null) {
    var id2 = entityHandler.resolveID(id);
    entity = await entityRepository.selectByID(id2);
    update = entity != null;
  }

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

  var content = [];

  var parameters = apiRequest.parameters;
  if (parameters.isNotEmpty) {
    var entity2 = await entityHandler.createFromMap(parameters,
        entityProvider: entityRepository.provider,
        resolutionRules: EntityResolutionRules(allowEntityFetch: true));

    try {
      if (entity != null) {
        var fields = entityHandler.getFields(entity2);
        entity = await entityHandler.setFieldsFromMap(entity, fields);
      } else {
        entity = entity2;
      }
    } catch (e, s) {
      content.add(
          '<h3 style="text-align: left;">Error instantiating `$entityType`:</h3>\n');
      content.add(
          '<pre>Parameters: ${Json.encode(parameters, pretty: true)}</pre>\n');
      content.add('<pre>ERROR:\n$e\n$s\n</pre>');
      content.add('<hr>\n');
    }

    if (entity != null) {
      try {
        var id = await entityRepository.store(entity);

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

        _writeEntityJson(entityHandler, entityType, entity, content);

        content.add('<br><hr>');
      } catch (e, s) {
        content.add(
            '<br><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>');
        content.add('<br><hr>\n');
      }
    }
  }

  content.add('<form method="post">');

  _writeInputTable(entityRepository, content, entity);

  content.add(
      '<br><div style="text-align: center; width: 100%;"><button type="submit">${update ? 'Update' : 'Insert'}</button></div>');

  content.add('</form>');

  htmlDoc.content = content;

  var html = htmlDoc.build();

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