tududi/backend/modules/notes/controller.js
Chris 542be2c1e9
Fix bug 366 (#764)
* Optimize DB

* Clean up names

* fixup! Clean up names

* fixup! fixup! Clean up names
2026-01-07 18:18:07 +02:00

128 lines
3.2 KiB
JavaScript

'use strict';
const notesService = require('./service');
const { UnauthorizedError } = require('../../shared/errors');
const { getAuthenticatedUserId } = require('../../utils/request-utils');
const { extractUidFromSlug } = require('../../utils/slug-utils');
/**
* Get authenticated user ID or throw UnauthorizedError.
*/
function requireUserId(req) {
const userId = getAuthenticatedUserId(req);
if (!userId) {
throw new UnauthorizedError('Authentication required');
}
return userId;
}
/**
* Notes controller - handles HTTP requests/responses.
*/
const notesController = {
/**
* GET /api/notes
* List all notes for the current user.
*/
async list(req, res, next) {
try {
const userId = requireUserId(req);
const notes = await notesService.getAll(userId, {
orderBy: req.query.order_by,
tagFilter: req.query.tag,
});
res.json(notes);
} catch (error) {
next(error);
}
},
/**
* GET /api/note/:uidSlug
* Get a single note by UID.
*/
async getOne(req, res, next) {
try {
const uid = extractUidFromSlug(req.params.uidSlug);
const note = await notesService.getByUid(uid);
res.json(note);
} catch (error) {
next(error);
}
},
/**
* POST /api/note
* Create a new note.
*/
async create(req, res, next) {
try {
const userId = requireUserId(req);
const { title, content, project_uid, project_id, tags, color } =
req.body;
const note = await notesService.create(userId, {
title,
content,
project_uid,
project_id,
tags,
color,
});
res.status(201).json(note);
} catch (error) {
next(error);
}
},
/**
* PATCH /api/note/:uid
* Update a note.
*/
async update(req, res, next) {
try {
const userId = requireUserId(req);
const { uid } = req.params;
const { title, content, project_uid, project_id, tags, color } =
req.body;
const note = await notesService.update(userId, uid, {
title,
content,
project_uid,
project_id,
tags,
color,
});
res.json(note);
} catch (error) {
next(error);
}
},
/**
* DELETE /api/note/:uid
* Delete a note.
*/
async delete(req, res, next) {
try {
const { uid } = req.params;
const result = await notesService.delete(uid);
res.json(result);
} catch (error) {
next(error);
}
},
/**
* Get note UID if exists (for authorization middleware).
*/
async getNoteUidForAuth(req) {
const uid = extractUidFromSlug(req.params.uidSlug || req.params.uid);
return notesService.getNoteUidIfExists(uid);
},
};
module.exports = notesController;