feat: prisma schema, groups API, deploy workflow
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
import { activities } from '~/server/utils/db'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const userId = getRouterParam(event, 'id')
|
||||
|
||||
if (!userId) {
|
||||
throw createError({ statusCode: 400, message: 'User ID is required' })
|
||||
}
|
||||
|
||||
// Get user's recent activities
|
||||
const userActivities = Array.from(activities.values())
|
||||
.filter(activity => activity.userId === userId)
|
||||
.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime())
|
||||
.slice(0, 50) // Limit to 50 most recent
|
||||
|
||||
return { activities: userActivities }
|
||||
})
|
||||
@@ -0,0 +1,36 @@
|
||||
import { canvases, userGroups } from '~/server/utils/db'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const userId = getRouterParam(event, 'id')
|
||||
|
||||
if (!userId) {
|
||||
throw createError({ statusCode: 400, message: 'User ID is required' })
|
||||
}
|
||||
|
||||
// Get user's group memberships
|
||||
const userGroupIds = Array.from(userGroups.values())
|
||||
.filter(membership => membership.userId === userId)
|
||||
.map(membership => membership.groupId)
|
||||
|
||||
// Get canvases owned by user or shared with user's groups
|
||||
const userCanvases = Array.from(canvases.values()).filter(canvas => {
|
||||
// User's own canvases
|
||||
if (canvas.ownerId === userId) return true
|
||||
// Group canvases
|
||||
if (canvas.groupId && userGroupIds.includes(canvas.groupId)) return true
|
||||
return false
|
||||
})
|
||||
|
||||
const canvasList = userCanvases.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 }
|
||||
})
|
||||
@@ -0,0 +1,40 @@
|
||||
import { profiles, canvases, follows } from '~/server/utils/db'
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const userId = getRouterParam(event, 'id')
|
||||
|
||||
if (!userId) {
|
||||
throw createError({ statusCode: 400, message: 'User ID is required' })
|
||||
}
|
||||
|
||||
const profile = profiles.get(userId)
|
||||
if (!profile) {
|
||||
throw createError({ statusCode: 404, message: 'Profile not found' })
|
||||
}
|
||||
|
||||
// Count user's canvases
|
||||
const userCanvases = Array.from(canvases.values()).filter(
|
||||
canvas => canvas.ownerId === userId
|
||||
)
|
||||
|
||||
// Count followers and following
|
||||
const followers = Array.from(follows.values()).filter(
|
||||
follow => follow.followingId === userId
|
||||
).length
|
||||
|
||||
const following = Array.from(follows.values()).filter(
|
||||
follow => follow.followerId === userId
|
||||
).length
|
||||
|
||||
// Update profile with current stats
|
||||
const updatedProfile = {
|
||||
...profile,
|
||||
canvasCount: userCanvases.length,
|
||||
followerCount: followers,
|
||||
followingCount: following
|
||||
}
|
||||
|
||||
profiles.set(userId, updatedProfile)
|
||||
|
||||
return { profile: updatedProfile }
|
||||
})
|
||||
Reference in New Issue
Block a user