mirror of https://github.com/doccano/doccano.git
pythondatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learningannotation-tool
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.9 KiB
132 lines
3.9 KiB
const fs = require('fs')
|
|
const express = require('express')
|
|
const router = express.Router()
|
|
const db = JSON.parse(fs.readFileSync('./api/db/docs.json', 'utf8'))
|
|
|
|
// Get doc list.
|
|
router.get('/', (req, res) => {
|
|
const q = req.query.q
|
|
if (q) {
|
|
// res.json(db.filter(item => item.text.toLowerCase().includes(q.toLowerCase())))
|
|
res.json(db)
|
|
} else {
|
|
res.json(db)
|
|
}
|
|
})
|
|
|
|
// Create a doc.
|
|
router.post('/', (req, res) => {
|
|
const doc = {
|
|
id: db.results.reduce((x, y) => { return x.id > y.id ? x : y }).id + 1,
|
|
text: req.body.text
|
|
}
|
|
res.json(doc)
|
|
})
|
|
|
|
// Upload a file.
|
|
router.post('/upload', (req, res) => {
|
|
const doc = {
|
|
id: db.results.reduce((x, y) => { return x.id > y.id ? x : y }).id + 1,
|
|
text: 'Uploaded Document',
|
|
meta: JSON.stringify({}),
|
|
annotations: []
|
|
}
|
|
db.results.push(doc)
|
|
res.json(doc)
|
|
})
|
|
|
|
// Download a file.
|
|
router.get('/download', (req, res) => {
|
|
res.json(db)
|
|
})
|
|
|
|
// Update a document partially.
|
|
router.patch('/:docId', (req, res) => {
|
|
const docIndex = db.results.findIndex(item => item.id === parseInt(req.params.docId, 10))
|
|
if (docIndex !== -1) {
|
|
Object.assign(db.results[docIndex], req.body)
|
|
res.json(db.results[docIndex])
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Get a doc.
|
|
router.get('/:docId', (req, res) => {
|
|
const doc = db.results.find(item => item.id === parseInt(req.params.docId, 10))
|
|
if (doc) {
|
|
res.json(doc)
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Update a doc.
|
|
router.put('/:docId', (req, res) => {
|
|
const docIndex = db.results.findIndex(item => item.id === parseInt(req.params.docId, 10))
|
|
if (docIndex !== -1) {
|
|
db.results[docIndex] = req.body
|
|
res.json(db.results[docIndex])
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Delete a doc.
|
|
router.delete('/:docId', (req, res, next) => {
|
|
const doc = db.results.find(item => item.id === parseInt(req.params.docId, 10))
|
|
if (doc) {
|
|
db.results = db.results.filter(item => item.id !== parseInt(req.params.docId, 10))
|
|
res.json(doc)
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Add an annotation.
|
|
router.post('/:docId/annotations', (req, res, next) => {
|
|
const doc = db.results.find(item => item.id === parseInt(req.params.docId, 10))
|
|
if (doc) {
|
|
const annotation = {
|
|
id: Math.floor(Math.random() * 10000),
|
|
label: req.body.label,
|
|
start_offset: req.body.start_offset,
|
|
end_offset: req.body.end_offset,
|
|
user: 1,
|
|
document: parseInt(req.params.docId, 10),
|
|
text: req.body.text
|
|
}
|
|
doc.annotations.push(annotation)
|
|
res.json(annotation)
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Delete an annotation.
|
|
router.delete('/:docId/annotations/:annotationId', (req, res, next) => {
|
|
const doc = db.results.find(item => item.id === parseInt(req.params.docId, 10))
|
|
const docIndex = db.results.findIndex(item => item.id === parseInt(req.params.docId, 10))
|
|
if (doc) {
|
|
const annotation = doc.annotations.find(item => item.id === parseInt(req.params.annotationId, 10))
|
|
doc.annotations = doc.annotations.filter(item => item.id !== parseInt(req.params.annotationId, 10))
|
|
db.results[docIndex] = doc
|
|
res.json(annotation)
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
|
|
// Update an annotation.
|
|
router.patch('/:docId/annotations/:annotationId', (req, res, next) => {
|
|
const docIndex = db.results.findIndex(item => item.id === parseInt(req.params.docId, 10))
|
|
if (docIndex !== -1) {
|
|
const doc = db.results[docIndex]
|
|
const annotationIndex = doc.annotations.findIndex(item => item.id === parseInt(req.params.annotationId, 10))
|
|
Object.assign(db.results[docIndex].annotations[annotationIndex], req.body)
|
|
res.json(db.results[docIndex].annotations[annotationIndex])
|
|
} else {
|
|
res.status(404).json({ detail: 'Not found.' })
|
|
}
|
|
})
|
|
module.exports = router
|