feat: add diagnostics route and broken link method
All checks were successful
Deploy eolas-api / deploy (push) Successful in 46s
All checks were successful
Deploy eolas-api / deploy (push) Successful in 46s
This commit is contained in:
parent
2dadba0cbe
commit
db1f92cb66
6 changed files with 95 additions and 3 deletions
41
README.md
41
README.md
|
|
@ -34,6 +34,47 @@ On the VPS, `eolas-api` runs as a `systemd` service. See the
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
|
### Search
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /search/<search_term>
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
|
||||||
|
{
|
||||||
|
"count": 2,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"entry": "Test_values_in_Bash",
|
||||||
|
"excerpt": "# <mark>Test</mark> values in Bash\n\n`<mark>test</mark>` is a built-in command that is used to compare values or determine whether\nsomething is the case.\n\nWe..."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"entry": "Testing_Python_code",
|
||||||
|
"excerpt": "...for a module called `lorem`, it will detzect the unit <mark>test</mark>\n files `lorem_<mark>test</mark>.py` and `<mark>test</mark>_lorem.py`.\n- In order to detect tests..."
|
||||||
|
},
|
||||||
|
```
|
||||||
|
|
||||||
|
### Diagnostics
|
||||||
|
|
||||||
|
#### Get broken links
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /diagnostics/broken-links
|
||||||
|
```
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"count": 1,
|
||||||
|
"data": [
|
||||||
|
{
|
||||||
|
"source_entry_title": "Reducing_fractions",
|
||||||
|
"broken_link_title": "Equivalent%20fractions"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Entries
|
### Entries
|
||||||
|
|
||||||
#### Get all entries
|
#### Get all entries
|
||||||
|
|
|
||||||
18
src/controllers/DiagnosticsController.js
Normal file
18
src/controllers/DiagnosticsController.js
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
export default class DiagnosticsController {
|
||||||
|
diagnosticsService
|
||||||
|
|
||||||
|
constructor(diagnosticsService) {
|
||||||
|
this.diagnosticsService = diagnosticsService
|
||||||
|
}
|
||||||
|
|
||||||
|
getBrokenLinks = (req, res) => {
|
||||||
|
const brokenLinks = this.diagnosticsService.getBrokenLinks()
|
||||||
|
if (!brokenLinks) {
|
||||||
|
return res.status(404).json({
|
||||||
|
message: `Broken link list could not be retrieved`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.json(brokenLinks)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ import express from "express"
|
||||||
import entries from "./routes/entries.js"
|
import entries from "./routes/entries.js"
|
||||||
import tags from "./routes/tags.js"
|
import tags from "./routes/tags.js"
|
||||||
import search from "./routes/search.js"
|
import search from "./routes/search.js"
|
||||||
|
import diagnostics from "./routes/diagnostics.js"
|
||||||
import cors from "cors"
|
import cors from "cors"
|
||||||
import { validateApiKey } from "./middlewear/auth.js"
|
import { validateApiKey } from "./middlewear/auth.js"
|
||||||
import morgan from "morgan"
|
import morgan from "morgan"
|
||||||
|
|
@ -17,12 +18,13 @@ app.use("/", validateApiKey)
|
||||||
app.use("/entries", entries)
|
app.use("/entries", entries)
|
||||||
app.use("/tags", tags)
|
app.use("/tags", tags)
|
||||||
app.use("/search", search)
|
app.use("/search", search)
|
||||||
|
app.use("/diagnostics", diagnostics)
|
||||||
|
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.info(`TB-INFO eolas-api running on NodeJS ${process.version}`)
|
console.info(`TB-INFO eolas-api running on NodeJS ${process.version}`)
|
||||||
console.info(`TB-INFO eolas-api server running at http://localhost:${port}`)
|
console.info(`TB-INFO eolas-api server running at http://localhost:${port}`)
|
||||||
})
|
})
|
||||||
|
|
||||||
app.get("/health", (req, res) => {
|
app.get("/health", (req, res) => {
|
||||||
res.status(200).json({ status: "ok" })
|
res.status(200).json({ status: "ok" })
|
||||||
})
|
})
|
||||||
|
|
|
||||||
11
src/routes/diagnostics.js
Normal file
11
src/routes/diagnostics.js
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
import express from "express"
|
||||||
|
import DiagnosticsService from "../services/DiagnosticsService.js"
|
||||||
|
import DiagnosticsController from "../controllers/DiagnosticsController.js"
|
||||||
|
import database from "../db/connection.js"
|
||||||
|
|
||||||
|
const router = express.Router()
|
||||||
|
const diagnosticsService = new DiagnosticsService(database)
|
||||||
|
const diagnosticsContoller = new DiagnosticsController(diagnosticsService)
|
||||||
|
|
||||||
|
router.get("/broken-links", diagnosticsContoller.getBrokenLinks)
|
||||||
|
export default router
|
||||||
17
src/services/DiagnosticsService.js
Normal file
17
src/services/DiagnosticsService.js
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
import { GET_BROKEN_LINKS } from "../sql/diagnostics.js"
|
||||||
|
|
||||||
|
export default class DiagnosticsService {
|
||||||
|
database
|
||||||
|
|
||||||
|
constructor(database) {
|
||||||
|
this.database = database
|
||||||
|
}
|
||||||
|
|
||||||
|
getBrokenLinks = () => {
|
||||||
|
const brokenLinks = this.database.prepare(GET_BROKEN_LINKS).all()
|
||||||
|
return {
|
||||||
|
count: brokenLinks.length,
|
||||||
|
data: brokenLinks,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
3
src/sql/diagnostics.js
Normal file
3
src/sql/diagnostics.js
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
const GET_BROKEN_LINKS = `SELECT * from broken_links`
|
||||||
|
|
||||||
|
export { GET_BROKEN_LINKS }
|
||||||
Loading…
Add table
Reference in a new issue