35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { requireAuth } from '~/server/utils/auth'
|
|
import { canvases, userGroups } from '~/server/utils/db'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const user = requireAuth(event)
|
|
|
|
// Get all canvases the user can access
|
|
const userGroupIds = Array.from(userGroups.values())
|
|
.filter(membership => membership.userId === user.id)
|
|
.map(membership => membership.groupId)
|
|
|
|
const accessibleCanvases = Array.from(canvases.values()).filter(canvas => {
|
|
// User can see their own canvases
|
|
if (canvas.ownerId === user.id) return true
|
|
// User can see public canvases
|
|
if (canvas.isPublic) return true
|
|
// User can see group canvases they're a member of
|
|
if (canvas.groupId && userGroupIds.includes(canvas.groupId)) return true
|
|
return false
|
|
})
|
|
|
|
const canvasList = accessibleCanvases.map(canvas => ({
|
|
id: canvas.id,
|
|
name: canvas.name,
|
|
ownerId: canvas.ownerId,
|
|
createdAt: canvas.createdAt,
|
|
updatedAt: canvas.updatedAt,
|
|
isPublic: canvas.isPublic,
|
|
groupId: canvas.groupId,
|
|
nodeCount: canvas.nodes.length
|
|
}))
|
|
|
|
return { canvases: canvasList }
|
|
})
|