insert method
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');
}