final changes

This commit is contained in:
2025-09-22 11:14:32 +02:00
parent cf157643d7
commit bf9ae5f01f
509 changed files with 920 additions and 64152 deletions
@@ -5,9 +5,53 @@ import { ErrorResponseService } from '../../Application/Services/ErrorResponseSe
import { ValidationMiddleware } from '../../Application/Services/ValidationMiddleware';
import { GeneralSearchService } from '../../Application/Search/Generalsearch';
import { logRequest, logError, logWarning } from '../../Application/Services/Logger';
import { Type, CType } from '../../Domain/Deck/DeckAggregate';
const deckRouter = Router();
/**
* Helper function to convert string enum values to integer enum values
*/
function convertEnumValues(data: any): any {
const converted = { ...data };
// Convert Type enum
if (converted.type && typeof converted.type === 'string') {
switch (converted.type.toUpperCase()) {
case 'LUCK':
converted.type = Type.LUCK;
break;
case 'JOKER':
converted.type = Type.JOKER;
break;
case 'QUESTION':
converted.type = Type.QUESTION;
break;
default:
throw new Error('Invalid deck type. Must be LUCK, JOKER, or QUESTION');
}
}
// Convert CType enum
if (converted.ctype && typeof converted.ctype === 'string') {
switch (converted.ctype.toUpperCase()) {
case 'PUBLIC':
converted.ctype = CType.PUBLIC;
break;
case 'PRIVATE':
converted.ctype = CType.PRIVATE;
break;
case 'ORGANIZATION':
converted.ctype = CType.ORGANIZATION;
break;
default:
throw new Error('Invalid deck ctype. Must be PUBLIC, PRIVATE, or ORGANIZATION');
}
}
return converted;
}
// Create search service that isn't in the container yet
const searchService = new GeneralSearchService(container.userRepository, container.organizationRepository, container.deckRepository);
@@ -60,18 +104,25 @@ deckRouter.post('/', authRequired, async (req, res) => {
try {
const userId = (req as any).user.userId;
logRequest('Create deck endpoint accessed', req, res, { name: req.body.name, userId });
<<<<<<< HEAD
req.body.userid = userId; // Set userId in request body
=======
>>>>>>> origin/main
const result = await container.createDeckCommandHandler.execute(req.body);
// Convert string enum values to integers
const command = convertEnumValues({
...req.body,
userid: userId
});
const result = await container.createDeckCommandHandler.execute(command);
logRequest('Deck created successfully', req, res, { deckId: result.id, name: req.body.name, userId });
res.json(result);
} catch (error) {
logError('Create deck endpoint error', error as Error, req, res);
// Handle enum validation errors
if (error instanceof Error && error.message.includes('Invalid deck')) {
return res.status(400).json({ error: error.message });
}
if (error instanceof Error && (error.message.includes('duplicate') || error.message.includes('unique constraint'))) {
return res.status(409).json({ error: 'Deck with this name already exists' });
}
@@ -144,23 +195,27 @@ deckRouter.get('/:id', authRequired, async (req, res) => {
}
});
<<<<<<< HEAD
deckRouter.patch('/:id', authRequired, async (req, res) => {
=======
deckRouter.put('/:id', authRequired, async (req, res) => {
>>>>>>> origin/main
try {
const deckId = req.params.id;
const userId = (req as any).user.userId;
logRequest('Update deck endpoint accessed', req, res, { deckId, userId, updateFields: Object.keys(req.body) });
const result = await container.updateDeckCommandHandler.execute({ id: deckId, ...req.body });
// Convert string enum values to integers
const updateData = convertEnumValues(req.body);
const result = await container.updateDeckCommandHandler.execute({ id: deckId, ...updateData });
logRequest('Deck updated successfully', req, res, { deckId, userId });
res.json(result);
} catch (error) {
logError('Update deck endpoint error', error as Error, req, res);
// Handle enum validation errors
if (error instanceof Error && error.message.includes('Invalid deck')) {
return res.status(400).json({ error: error.message });
}
if (error instanceof Error && error.message.includes('not found')) {
return res.status(404).json({ error: 'Deck not found' });
}
@@ -172,13 +227,10 @@ deckRouter.put('/:id', authRequired, async (req, res) => {
if (error instanceof Error && error.message.includes('validation')) {
return res.status(400).json({ error: 'Invalid input data', details: error.message });
}
<<<<<<< HEAD
if (error instanceof Error && error.message.includes('admin')) {
return res.status(403).json({ error: 'Forbidden: ' + error.message });
}
=======
>>>>>>> origin/main
res.status(500).json({ error: 'Internal server error' });
}