@@ -7,7 +7,10 @@ import { splitWorkspaceFilePath } from '@/lib/copilot/tools/server/files/workspa
77import { acquireLock , releaseLock } from '@/lib/core/config/redis'
88import { ensureAbsoluteUrl } from '@/lib/core/utils/urls'
99import { withRouteHandler } from '@/lib/core/utils/with-route-handler'
10- import { ensureWorkspaceFileFolderPath } from '@/lib/uploads/contexts/workspace/workspace-file-folder-manager'
10+ import {
11+ ensureWorkspaceFileFolderPath ,
12+ moveWorkspaceFileItems ,
13+ } from '@/lib/uploads/contexts/workspace/workspace-file-folder-manager'
1114import {
1215 fetchWorkspaceFileBuffer ,
1316 getWorkspaceFile ,
@@ -127,6 +130,28 @@ export const POST = withRouteHandler(async (request: NextRequest) => {
127130 } )
128131 }
129132
133+ case 'move' : {
134+ const { fileId, targetFolder } = body
135+ const pathSegments = targetFolder . trim ( )
136+ ? targetFolder
137+ . trim ( )
138+ . split ( '/' )
139+ . map ( ( s ) => s . trim ( ) )
140+ . filter ( Boolean )
141+ : [ ]
142+ const targetFolderId = await ensureWorkspaceFileFolderPath ( {
143+ workspaceId,
144+ userId,
145+ pathSegments,
146+ } )
147+ await moveWorkspaceFileItems ( { workspaceId, fileIds : [ fileId ] , targetFolderId } )
148+ logger . info ( 'File moved' , { fileId, targetFolder : targetFolder || '(root)' } )
149+ return NextResponse . json ( {
150+ success : true ,
151+ data : { fileId, targetFolder : targetFolder || '(root)' } ,
152+ } )
153+ }
154+
130155 case 'append' : {
131156 const { fileName, content } = body
132157
0 commit comments