Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create Object tool on Main Menu #72

Merged
merged 43 commits into from
Nov 17, 2021
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
d689144
Create Object tool on Main Menu.
Aug 19, 2021
74b6ce6
Use res to make linting happy.
Aug 26, 2021
88b0c6a
Merge branch 'dev' into create-object
Sep 15, 2021
f077529
Fix merge error.
demiankatz Sep 22, 2021
22727e7
Merge branch 'dev' into create-object
demiankatz Sep 22, 2021
05376c2
More complete, less broken.
demiankatz Sep 22, 2021
0b80995
Modernize code.
demiankatz Sep 22, 2021
974634f
Make form processing React-controlled.
demiankatz Sep 22, 2021
dc3274c
Fix key.
demiankatz Sep 23, 2021
9d82a3f
Pass values to API successfully.
demiankatz Sep 23, 2021
a592fd9
Update snapshots.
demiankatz Sep 23, 2021
945bd4f
Merge branch 'dev' into create-object
demiankatz Sep 23, 2021
782f6b1
Progress on object creation.
demiankatz Sep 23, 2021
997ee8c
Merge branch 'dev' into create-object
demiankatz Sep 30, 2021
c86ba8c
Add support for creating top-level objects.
demiankatz Sep 30, 2021
553dbe9
Update snapshot.
demiankatz Sep 30, 2021
afa3724
Improve tests.
demiankatz Sep 30, 2021
1a942d7
Improved property validation and tests.
demiankatz Sep 30, 2021
06c6b1f
Improved property validation and tests.
demiankatz Sep 30, 2021
61f804e
Add submit test.
demiankatz Sep 30, 2021
586b703
Add no-parent test.
demiankatz Sep 30, 2021
f82202c
Expand test coverage.
demiankatz Sep 30, 2021
1ed7e7a
Simplify with optional chaining.
demiankatz Sep 30, 2021
0731841
Optimize to use map.
demiankatz Oct 4, 2021
7b789e3
Code simplification; improved error handling.
demiankatz Oct 4, 2021
4c93fea
Eliminate pointless noParent parameter.
demiankatz Oct 4, 2021
919cddf
More targeted validation.
demiankatz Oct 4, 2021
6a593cb
Merge branch 'dev' into create-object
demiankatz Oct 14, 2021
ccdfbd4
Merge branch 'dev' into create-object
demiankatz Oct 14, 2021
3e7385c
Merge branch 'dev' into create-object
demiankatz Oct 25, 2021
50415ef
Work in progress updates -- CURRENTLY BROKEN.
demiankatz Oct 25, 2021
6ea2542
Improve parameter validation.
demiankatz Oct 26, 2021
01f6f90
Fix request sending.
demiankatz Oct 26, 2021
31ab2fd
Commit from GitHub Actions (Lint Pull Requests)
github-actions[bot] Oct 26, 2021
d49e05d
More fixes.
demiankatz Oct 26, 2021
f640518
Progress on tests.
demiankatz Oct 26, 2021
3d37fb3
Progress on tests (but still not working).
demiankatz Oct 26, 2021
04c9e39
Improved error tolerance.
demiankatz Oct 26, 2021
b065e1f
Progress on test suite (working, but with warnings).
demiankatz Oct 26, 2021
efa4968
Fix timing issues.
demiankatz Oct 26, 2021
7bf8113
Merge remote-tracking branch 'origin/dev' into create-object
demiankatz Nov 9, 2021
8080f2a
Integrate object creator into editor tool.
demiankatz Nov 9, 2021
ac5e83c
Change post-submit behavior.
demiankatz Nov 9, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
25 changes: 1 addition & 24 deletions api/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions api/package.json
Expand Up @@ -9,6 +9,7 @@
"dependencies": {
"@stomp/stompjs": "^6.1.0",
"@xmldom/xmldom": "^0.7.0",
"body-parser": "^1.18.3",
"bullmq": "^1.14.8",
"connect-session-knex": "^2.1.0",
"cookie-parser": "~1.4.4",
Expand Down
51 changes: 50 additions & 1 deletion api/src/routes/edit.ts
@@ -1,10 +1,59 @@
import express = require("express");
import bodyParser = require("body-parser");
import Config from "../models/Config";
const router = express.Router();
import Fedora from "../services/Fedora";
import FedoraObjectFactory from "../services/FedoraObjectFactory";
import MetadataExtractor from "../services/MetadataExtractor";
import { requireToken } from "./auth";

const router = express.Router();

router.get("/models", requireToken, function (req, res) {
res.json({ CollectionModels: Config.getInstance().collectionModels, DataModels: Config.getInstance().dataModels });
});

router.post("/object/new", requireToken, bodyParser.json(), async function (req, res) {
let parentPid = req?.body?.parent;
if (parentPid !== null && parentPid.length === 0) {
parentPid = null;
}
const noParent = (req.body.noParent ?? "0") === "1";
demiankatz marked this conversation as resolved.
Show resolved Hide resolved

// Validate parent parameters:
if (noParent && parentPid !== null) {
res.status(400).send("Cannot set parent PID and no parent PID");
return;
}
if (!noParent && parentPid === null) {
res.status(400).send("Must set either parent or noParent");
return;
}
// Validate parent PID, if set:
if (parentPid !== null) {
const fedora = Fedora.getInstance();
const extractor = MetadataExtractor.getInstance();
const relsExt = await fedora.getDatastreamAsString(req.body.parent, "RELS-EXT");
demiankatz marked this conversation as resolved.
Show resolved Hide resolved
const models = extractor.extractRelations(relsExt).hasModel ?? [];

// Parents must be collections; validate!
if (!models.includes("info:fedora/vudl-system:CollectionModel")) {
res.status(400).send("Illegal parent " + req.body.parent + "; not a collection!");
return;
}
}

const factory = FedoraObjectFactory.getInstance();
try {
const newObject = await factory.build(
req.body.model.replace("vudl-system:", ""),
req.body.title,
req.body.state,
parentPid
);
res.status(200).send(newObject.pid);
} catch (e) {
res.status(400).send(e.message);
}
});

module.exports = router;