-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprojectCreateRouter.js
More file actions
92 lines (87 loc) · 2.93 KB
/
projectCreateRouter.js
File metadata and controls
92 lines (87 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import express from "express"
import { respondWithError } from "../utilities/shared.js"
import auth0Middleware from "../auth/index.js"
import ProjectFactory from "../classes/Project/ProjectFactory.js"
import validateURL from "../utilities/validateURL.js"
import Project from "../classes/Project/Project.js"
const router = express.Router({ mergeParams: true })
router.route("/create").post(auth0Middleware(), async (req, res) => {
const user = req.user
if (!user?.agent) return respondWithError(res, 401, "Unauthenticated user")
const projectObj = new Project()
let project = req.body
project = { ...project, creator: user?.agent }
try {
const newProject = await projectObj.create(project)
res.setHeader("Location", newProject?._id)
res.status(201).json(newProject)
} catch (error) {
respondWithError(
res,
error.status ?? error.code ?? 500,
error.message ?? "Unknown server error"
)
}
}).all((_, res) => {
respondWithError(res, 405, "Improper request method. Use POST instead")
})
router.route("/import").post(auth0Middleware(), async (req, res) => {
let { createFrom } = req.query
let user = req.user
createFrom = createFrom?.toLowerCase()
if (!createFrom)
return res.status(400).json({
message:
"Query string 'createFrom' is required, specify manifest source as 'URL' or 'DOC' "
})
if (createFrom === "url") {
const manifestURL = req?.body?.url
let checkURL = await validateURL(manifestURL)
if (!checkURL.valid)
return res.status(checkURL.status).json({
message: checkURL.message,
resolvedPayload: checkURL.resolvedPayload
})
try {
const result = await ProjectFactory.fromManifestURL(
manifestURL,
user._id
)
res.status(201).json(result)
} catch (error) {
res.status(error.status ?? 500).json({
status: error.status ?? 500,
message: error.message,
data: error.resolvedPayload
})
}
} else {
res.status(400).json({
message: `Import from ${createFrom} is not available. Create from URL instead`
})
}
}).all((req, res) => {
respondWithError(res, 405, "Improper request method. Use POST instead")
})
router.route("/import-image").post(auth0Middleware(), async (req, res) => {
const user = req.user
if (!user?.agent) return respondWithError(res, 401, "Unauthenticated user")
try {
const { imageUrl, projectLabel } = req.body
if (!imageUrl || !projectLabel) {
return respondWithError(res, 400, "Image URL and project label are required")
}
const project = await ProjectFactory.createManifestFromImage(imageUrl, projectLabel, user._id)
res.status(201).json(project)
} catch (error) {
respondWithError(
res,
error.status ?? error.code ?? 500,
error.message ?? "Unknown server error"
)
}
}
).all((_, res) => {
respondWithError(res, 405, "Improper request method. Use POST instead")
})
export default router