104 lines
2.5 KiB
JavaScript
104 lines
2.5 KiB
JavaScript
'use strict';
|
|
|
|
const areasService = require('./service');
|
|
const { UnauthorizedError } = require('../../shared/errors');
|
|
const { getAuthenticatedUserId } = require('../../utils/request-utils');
|
|
|
|
/**
|
|
* Get authenticated user ID or throw UnauthorizedError.
|
|
*/
|
|
function requireUserId(req) {
|
|
const userId = getAuthenticatedUserId(req);
|
|
if (!userId) {
|
|
throw new UnauthorizedError('Authentication required');
|
|
}
|
|
return userId;
|
|
}
|
|
|
|
/**
|
|
* Areas controller - handles HTTP requests/responses.
|
|
*/
|
|
const areasController = {
|
|
/**
|
|
* GET /api/areas
|
|
* List all areas for the current user.
|
|
*/
|
|
async list(req, res, next) {
|
|
try {
|
|
const userId = requireUserId(req);
|
|
const areas = await areasService.getAll(userId);
|
|
res.json(areas);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* GET /api/areas/:uid
|
|
* Get a single area by UID.
|
|
*/
|
|
async getOne(req, res, next) {
|
|
try {
|
|
const userId = requireUserId(req);
|
|
const { uid } = req.params;
|
|
const area = await areasService.getByUid(userId, uid);
|
|
res.json(area);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* POST /api/areas
|
|
* Create a new area.
|
|
*/
|
|
async create(req, res, next) {
|
|
try {
|
|
const userId = requireUserId(req);
|
|
const { name, description } = req.body;
|
|
const area = await areasService.create(userId, {
|
|
name,
|
|
description,
|
|
});
|
|
res.status(201).json(area);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* PATCH /api/areas/:uid
|
|
* Update an area.
|
|
*/
|
|
async update(req, res, next) {
|
|
try {
|
|
const userId = requireUserId(req);
|
|
const { uid } = req.params;
|
|
const { name, description } = req.body;
|
|
const area = await areasService.update(userId, uid, {
|
|
name,
|
|
description,
|
|
});
|
|
res.json(area);
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* DELETE /api/areas/:uid
|
|
* Delete an area.
|
|
*/
|
|
async delete(req, res, next) {
|
|
try {
|
|
const userId = requireUserId(req);
|
|
const { uid } = req.params;
|
|
await areasService.delete(userId, uid);
|
|
res.status(204).send();
|
|
} catch (error) {
|
|
next(error);
|
|
}
|
|
},
|
|
};
|
|
|
|
module.exports = areasController;
|