Skip to content

Commit

Permalink
GH-96 - Rename files and folders (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
sukamat authored May 1, 2024
1 parent c1990c8 commit 8eabefd
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/handlers/post.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { postSource } from '../routes/source.js';
import { postConfig } from '../routes/config.js';
import { postVersionSource } from '../routes/version.js';
import copyHandler from '../routes/copy.js';
import renameHandler from '../routes/rename.js';

export default async function postHandler({ req, env, daCtx }) {
const { path } = daCtx;
Expand All @@ -21,6 +22,7 @@ export default async function postHandler({ req, env, daCtx }) {
if (path.startsWith('/config')) return postConfig({ req, env, daCtx });
if (path.startsWith('/versionsource')) return postVersionSource({ env, daCtx });
if (path.startsWith('/copy')) return copyHandler({ req, env, daCtx });
if (path.startsWith('/rename')) return renameHandler({ req, env, daCtx });

return undefined;
}
19 changes: 19 additions & 0 deletions src/helpers/rename.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright 2024 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
export default async function renameHelper(req, daCtx) {
const formData = await req.formData();
if (!formData) return {};
const newname = formData.get('newname');
const source = daCtx.key;
const destination = `${source.substring(0, source.lastIndexOf('/') + 1)}${newname}`;
return { source, destination };
}
18 changes: 18 additions & 0 deletions src/routes/rename.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright 2024 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
import renameObject from '../storage/object/rename.js';
import renameHelper from '../helpers/rename.js';

export default async function renameHandler({ req, env, daCtx }) {
const details = await renameHelper(req, daCtx);
return renameObject(env, daCtx, details);
}
33 changes: 33 additions & 0 deletions src/storage/object/rename.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright 2024 Adobe. All rights reserved.
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. You may obtain a copy
* of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
* OF ANY KIND, either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
import copyObject from './copy.js';
import deleteObjects from './delete.js';

const rename = async (env, daCtx, details) => {
try {
await copyObject(env, daCtx, details);
await deleteObjects(env, daCtx);
} catch (e) {
// eslint-disable-next-line no-console
console.log(e);
}
};

export default async function renameObject(env, daCtx, details) {
try {
await rename(env, daCtx, details);
} catch (e) {
// eslint-disable-next-line no-console
console.log(e);
}
return { status: 204 };
}

0 comments on commit 8eabefd

Please sign in to comment.