Controllers - pacificnm/wiki-ai GitHub Wiki
📁 Folder Structure for Controllers
controllers/
├── authController.js
├── documentController.js
├── versionController.js
├── commentController.js
├── tagController.js
├── categoryController.js
├── fileController.js
├── accessControlController.js
├── favoriteController.js
📄 controllers/documentController.js
import Document from '../models/Document.js';
import Version from '../models/Version.js';
import { documentSchema } from '../validators/documentValidator.js';
// Create a new document
export async function createDocument(req, res) {
try {
const validated = documentSchema.parse(req.body);
const newDoc = await Document.create({
...validated,
ownerId: req.user.uid,
});
res.status(201).json({ message: 'Document created', document: newDoc });
} catch (err) {
res.status(400).json({ error: err.message });
}
}
// Get a single document
export async function getDocument(req, res) {
try {
const doc = await Document.findById(req.params.id).populate('tags categories');
if (!doc) return res.status(404).json({ message: 'Document not found' });
res.json(doc);
} catch (err) {
res.status(500).json({ error: err.message });
}
}
// Update a document
export async function updateDocument(req, res) {
try {
const validated = documentSchema.partial().parse(req.body);
const updatedDoc = await Document.findByIdAndUpdate(
req.params.id,
{ $set: validated },
{ new: true }
);
res.json({ message: 'Document updated', document: updatedDoc });
} catch (err) {
res.status(400).json({ error: err.message });
}
}
// Delete a document
export async function deleteDocument(req, res) {
try {
await Document.findByIdAndDelete(req.params.id);
res.json({ message: 'Document deleted' });
} catch (err) {
res.status(500).json({ error: err.message });
}
}
📄 controllers/versionController.js
import Version from '../models/Version.js';
// List all versions of a document
export async function listVersions(req, res) {
try {
const versions = await Version.find({ documentId: req.params.docId });
res.json(versions);
} catch (err) {
res.status(500).json({ error: err.message });
}
}
// Restore a specific version
export async function restoreVersion(req, res) {
try {
const version = await Version.findById(req.params.versionId);
if (!version) return res.status(404).json({ message: 'Version not found' });
// Optional: Replace the document's content with this version
// await Document.findByIdAndUpdate(version.documentId, { content: version.content });
res.json({ message: 'Version retrieved', version });
} catch (err) {
res.status(500).json({ error: err.message });
}
}
module.exports = {
listVersions,
restoreVersion,
};