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