feat: restructure into XFlow monorepo with Nuxt 4, Modular Onion Monolith, Android client, and Desktop CLI

This commit is contained in:
XFlow Deploy
2026-09-28 08:57:32 +05:00
parent edcd30c829
commit 0837b3f612
204 changed files with 24616 additions and 39 deletions
+18
View File
@@ -0,0 +1,18 @@
import { getListsUseCase } from '../../../modules/notes-lists';
import { getAuthUser } from '../../../utils/auth';
export default defineEventHandler(async (event) => {
const user = getAuthUser(event);
const ownerId = user?.id || (getQuery(event).userId as string) || 'default-user';
const category = getQuery(event).category as string | undefined;
const result = await getListsUseCase.execute({ ownerId, category });
if (result.isFailure) {
throw createError({ statusCode: 400, message: result.getError().message });
}
return {
success: true,
lists: result.getValue().map(l => l.toJSON())
};
});
@@ -0,0 +1,35 @@
import { addListItemUseCase } from '../../../modules/notes-lists';
import { getAuthUser } from '../../../utils/auth';
export default defineEventHandler(async (event) => {
const user = getAuthUser(event);
const body = await readBody(event);
const ownerId = user?.id || body.ownerId || 'default-user';
const { title, listId, listTitle, category, description, priority, metadata } = body;
if (!title) {
throw createError({ statusCode: 400, message: 'Item title is required' });
}
const result = await addListItemUseCase.execute({
title,
listId,
listTitle,
category,
description,
priority,
metadata,
ownerId
});
if (result.isFailure) {
const error = result.getError();
throw createError({ statusCode: error.statusCode || 400, message: error.message });
}
return {
success: true,
item: result.getValue().toJSON()
};
});
@@ -0,0 +1,29 @@
import { toggleListItemUseCase } from '../../../../modules/notes-lists';
import { getAuthUser } from '../../../../utils/auth';
export default defineEventHandler(async (event) => {
const itemId = getRouterParam(event, 'id');
if (!itemId) {
throw createError({ statusCode: 400, message: 'Item ID is required' });
}
const user = getAuthUser(event);
const body = await readBody(event).catch(() => ({}));
const ownerId = user?.id || body.ownerId || 'default-user';
const result = await toggleListItemUseCase.execute({
itemId,
status: body.status,
ownerId
});
if (result.isFailure) {
const error = result.getError();
throw createError({ statusCode: error.statusCode || 400, message: error.message });
}
return {
success: true,
item: result.getValue().toJSON()
};
});