feat: create Tag resource with first route

This commit is contained in:
Thomas Bishop 2025-07-14 17:41:55 +01:00
parent 858d20314f
commit 672987a2fa
8 changed files with 59 additions and 5 deletions

View file

@ -1,4 +1,4 @@
export class EntriesController {
export default class EntriesController {
entriesService
constructor(entriesService) {

View file

@ -0,0 +1,18 @@
export default class TagsController {
tagsService
constructor(tagsService) {
this.tagsService = tagsService
}
getAllTags = (req, res) => {
const tags = this.tagsService.getAllTags()
if (!tags) {
return res.status(404).json({
message: `Tags list could not be retrieved`,
})
}
return res.json(tags)
}
}

View file

@ -1,11 +1,14 @@
import express from "express"
import entries from "./routes/entries.js"
import tags from "./routes/tags.js"
const app = express()
const port = process.env.PORT || 3000
app.use(express.json())
app.use("/entries", entries)
app.use("/tags", tags)
app.listen(port, () => {
console.info(`INFO Server running at http://localhost:${port}`)

View file

@ -1,6 +1,6 @@
import express from "express"
import { EntriesService } from "../services/EntriesService.js"
import { EntriesController } from "../controllers/EntriesController.js"
import EntriesService from "../services/EntriesService.js"
import EntriesController from "../controllers/EntriesController.js"
import database from "../db/connection.js"
const router = express.Router()

12
src/routes/tags.js Normal file
View file

@ -0,0 +1,12 @@
import express from "express"
import TagsService from "../services/TagsService.js"
import TagsController from "../controllers/TagsController.js"
import database from "../db/connection.js"
const router = express.Router()
const tagsService = new TagsService(database)
const tagsController = new TagsController(tagsService)
router.get("/", tagsController.getAllTags)
export default router

View file

@ -1,7 +1,7 @@
import { sortByDate, sortByTitle } from "../lib/sorters.js"
import { GET_ALL_ENTRIES, GET_ENTRY } from "../sql/entries.js"
export class EntriesService {
export default class EntriesService {
database
constructor(database) {

View file

@ -0,0 +1,18 @@
import { GET_ALL_TAGS } from "../sql/tags.js"
export default class TagsService {
database
constructor(database) {
this.database = database
}
sortTags = (tags) => {
return tags.sort((a, b) => a.name.localeCompare(b.name))
}
getAllTags = () => {
const tags = this.sortTags(this.database.prepare(GET_ALL_TAGS).all()).flatMap((tag) => tag.name)
return { count: tags.length, tags: tags }
}
}

3
src/sql/tags.js Normal file
View file

@ -0,0 +1,3 @@
const GET_ALL_TAGS = `SELECT name FROM tags`
export { GET_ALL_TAGS }