diff --git a/packages/server/src/controllers/NFCController/endpoints/getExecution.js b/packages/server/src/controllers/NFCController/endpoints/getExecution.js new file mode 100644 index 00000000..6d63dc4a --- /dev/null +++ b/packages/server/src/controllers/NFCController/endpoints/getExecution.js @@ -0,0 +1,11 @@ +export default { + method: "GET", + route: "/execution/:user_id", + fn: async (req, res) => { + let execution = { + + } + + return res.json(execution) + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/NFCController/endpoints/getTagById.js b/packages/server/src/controllers/NFCController/endpoints/getTagById.js new file mode 100644 index 00000000..cacb24ab --- /dev/null +++ b/packages/server/src/controllers/NFCController/endpoints/getTagById.js @@ -0,0 +1,31 @@ +import { User, NFCTag } from "@models" + +export default { + method: "GET", + route: "/tags/:id", + fn: async (req, res) => { + let tag = await NFCTag.findOne({ + _id: req.params.id + }) + + if (!tag) { + return res.status(404).json({ + error: "Cannot find tag" + }) + } + + tag = tag.toObject() + + if (req.user) { + if (tag.user_id.toString() === req.user._id.toString()) { + tag.is_owner = true + } + } + + tag.user = await User.findOne({ + _id: tag.user_id + }) + + return res.json(tag) + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/NFCController/endpoints/getTagBySerial.js b/packages/server/src/controllers/NFCController/endpoints/getTagBySerial.js new file mode 100644 index 00000000..c931d3eb --- /dev/null +++ b/packages/server/src/controllers/NFCController/endpoints/getTagBySerial.js @@ -0,0 +1,32 @@ +import { User, NFCTag } from "@models" + +export default { + method: "GET", + route: "/tag/serial/:serial", + middlewares: ["withOptionalAuthentication"], + fn: async (req, res) => { + let tag = await NFCTag.findOne({ + serial: req.params.serial + }) + + if (!tag) { + return res.status(404).json({ + error: "Cannot find tag" + }) + } + + tag = tag.toObject() + + if (req.user) { + if (tag.user_id.toString() === req.user._id.toString()) { + tag.is_owner = true + } + } + + tag.user = await User.findOne({ + _id: tag.user_id + }) + + return res.json(tag) + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/NFCController/endpoints/getTags.js b/packages/server/src/controllers/NFCController/endpoints/getTags.js new file mode 100644 index 00000000..221b370f --- /dev/null +++ b/packages/server/src/controllers/NFCController/endpoints/getTags.js @@ -0,0 +1,14 @@ +import { NFCTag } from "@models" + +export default { + method: "GET", + route: "/tags", + middlewares: ["withAuthentication"], + fn: async (req, res) => { + let tags = await NFCTag.find({ + user_id: req.user.id + }) + + return res.json(tags) + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/NFCController/endpoints/registerTag.js b/packages/server/src/controllers/NFCController/endpoints/registerTag.js new file mode 100644 index 00000000..c2ff1ace --- /dev/null +++ b/packages/server/src/controllers/NFCController/endpoints/registerTag.js @@ -0,0 +1,63 @@ +import { NFCTag } from "@models" + +const allowedUpdateFields = [ + "user_id", + "alias", + "active", + "behavior", + "icon", +] + +export default { + method: "POST", + route: "/tag/:serial", + middlewares: ["withAuthentication"], + fn: async (req, res) => { + let tag = await NFCTag.findOne({ + serial: req.params.serial + }) + + if (!tag) { + tag = new NFCTag({ + user_id: req.user._id.toString(), + owner_id: req.user._id.toString(), + serial: req.params.serial, + alias: req.body.alias, + behavior: req.body.behavior, + active: req.body.active, + }) + + tag.endpoint_url = `${process.env.NFC_TAG_ENDPOINT}/${tag._id.toString()}` + + await tag.save() + } else { + tag = tag.toObject() + + if (req.user) { + if (tag.user_id !== req.user._id.toString()) { + return res.status(403).json({ + error: `You do not own this tag` + }) + } + } + + let newData = {} + + tag.endpoint_url = `${process.env.NFC_TAG_ENDPOINT}/${tag._id.toString()}` + newData.endpoint_url = tag.endpoint_url + + for (let field of allowedUpdateFields) { + if (req.body[field]) { + tag[field] = req.body[field] + newData[field] = req.body[field] + } + + await NFCTag.findOneAndUpdate({ + serial: req.params.serial + }, newData) + } + } + + return res.json(tag) + } +} \ No newline at end of file diff --git a/packages/server/src/controllers/NFCController/index.js b/packages/server/src/controllers/NFCController/index.js new file mode 100644 index 00000000..2691c570 --- /dev/null +++ b/packages/server/src/controllers/NFCController/index.js @@ -0,0 +1,9 @@ +import { Controller } from "linebridge/dist/server" +import generateEndpointsFromDir from "linebridge/dist/server/lib/generateEndpointsFromDir" + +export default class NFCController extends Controller { + static refName = "NFCController" + static useRoute = "/nfc" + + httpEndpoints = generateEndpointsFromDir(__dirname + "/endpoints") +} \ No newline at end of file diff --git a/packages/server/src/controllers/index.js b/packages/server/src/controllers/index.js index 13f8d95e..dc65dc93 100755 --- a/packages/server/src/controllers/index.js +++ b/packages/server/src/controllers/index.js @@ -26,4 +26,6 @@ export { default as AdminController } from "./AdminController" export { default as SyncController } from "./SyncController" -export { default as AutoUpdateController } from "./AutoUpdate" \ No newline at end of file +export { default as AutoUpdateController } from "./AutoUpdate" + +export { default as NFCController } from "./NFCController" \ No newline at end of file