+
XFlow
+
Визуальное управление задачами в формате Obsidian Canvas.
- Войти
+ Начать работу
-
Dashboard
+
{
+ const user = requireAuth(event)
+ const id = getRouterParam(event, 'id')
+ const body = await readBody(event)
+
+ // Проверяем права: только владелец может менять настройки доступа
+ const canvas = await prisma.canvas.findUnique({
+ where: { id }
+ })
+
+ if (!canvas) {
+ throw createError({ statusCode: 404, message: 'Canvas not found' })
+ }
+
+ if (canvas.ownerId !== user.id && user.role !== 'admin') {
+ throw createError({ statusCode: 403, message: 'Only owner can change settings' })
+ }
+
+ // Обновляем поля
+ const updatedCanvas = await prisma.canvas.update({
+ where: { id },
+ data: {
+ name: body.name !== undefined ? body.name : undefined,
+ isPublic: body.isPublic !== undefined ? body.isPublic : undefined,
+ groupId: body.groupId !== undefined ? body.groupId : undefined,
+ }
+ })
+
+ return { success: true, canvas: updatedCanvas }
+})
diff --git a/app/server/api/users/search.get.ts b/app/server/api/users/search.get.ts
new file mode 100644
index 0000000..92d9b41
--- /dev/null
+++ b/app/server/api/users/search.get.ts
@@ -0,0 +1,28 @@
+import { requireAuth } from '~/server/utils/auth'
+import { prisma } from '~/server/utils/prisma'
+
+export default defineEventHandler(async (event) => {
+ requireAuth(event)
+ const query = getQuery(event).q as string
+
+ if (!query || query.length < 2) {
+ return { users: [] }
+ }
+
+ const users = await prisma.user.findMany({
+ where: {
+ OR: [
+ { username: { contains: query, mode: 'insensitive' } },
+ { email: { contains: query, mode: 'insensitive' } }
+ ]
+ },
+ select: {
+ id: true,
+ username: true,
+ email: true
+ },
+ take: 10
+ })
+
+ return { users }
+})