Skip to content
This repository has been archived by the owner on Jun 20, 2024. It is now read-only.

Commit

Permalink
[wip] update storage apis
Browse files Browse the repository at this point in the history
  • Loading branch information
marihachi committed Oct 9, 2017
1 parent 74ce7c5 commit 381ef9b
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 87 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';

const ApiResult = require('../../../../helpers/apiResult');
const ApiResult = require('../../../../../helpers/apiResult');

// 対象ファイルの取得
exports.get = async (request) => {
Expand Down
92 changes: 92 additions & 0 deletions src/routes/users/id/storage/files/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
'use strict';

const ApiResult = require('../../../../../helpers/apiResult');
const getFileType = require('file-type');
const validator = require('validator');

const supportedMimeTypes = [
'image/jpeg',
'image/png',
'image/gif'
];

// 新規作成
exports.post = async (request) => {
const result = await request.checkRequestAsync({
body: [
{name: 'file', type: 'string'}
],
permissions: ['storageWrite']
});

if (result != null) {
return result;
}

const file = request.body.file;

if (!validator.isBase64(file)) {
return new ApiResult(400, 'file is not base64 format');
}

const fileDataBuffer = Buffer.from(file, 'base64');

// データ形式を取得
const fileType = getFileType(fileDataBuffer);

// サポートされているデータ形式か
if (fileType == null || !supportedMimeTypes.some(i => i == fileType.mime)) {
return new ApiResult(400, 'file is not supported format');
}

let storageFile;

try {
storageFile = await request.db.storageFiles.createAsync({ // TODO: move to document models
creatorId: request.user.document._id,
type: fileType.mime.split('/')[0],
mimeType: fileType.mime,
file: fileDataBuffer,
accessRight: {
level: 'public', // 'specific' 'private'
// users: []
}
});
}
catch(err) {
console.log(err.trace);
}

if (storageFile == null) {
return new ApiResult(500, 'failed to create storage file');
}

return new ApiResult(200, {storageFile: storageFile.serialize()});
};

// ファイル一覧取得 // TODO: フィルター指定
exports.get = async (request) => {
const result = await request.checkRequestAsync({
query: [
],
permissions: ['storageRead']
});

if (result != null) {
return result;
}

let files;
try {
files = await request.db.storageFiles.findArrayAsync(request.user.document._id);
}
catch(err) {
// noop
}

if (files == null || files.length == 0) {
return new ApiResult(204);
}

return new ApiResult(200, {storageFiles: files.map(i => i.serialize())});
};
88 changes: 2 additions & 86 deletions src/routes/users/id/storage/index.js
Original file line number Diff line number Diff line change
@@ -1,92 +1,8 @@
'use strict';

const ApiResult = require('../../../../helpers/apiResult');
const getFileType = require('file-type');
const validator = require('validator');

const supportedMimeTypes = [
'image/jpeg',
'image/png',
'image/gif'
];

// 新規作成
exports.post = async (request) => {
const result = await request.checkRequestAsync({
body: [
{name: 'file', type: 'string'}
],
permissions: ['storageWrite']
});

if (result != null) {
return result;
}

const file = request.body.file;

if (!validator.isBase64(file)) {
return new ApiResult(400, 'file is not base64 format');
}

const fileDataBuffer = Buffer.from(file, 'base64');

// データ形式を取得
const fileType = getFileType(fileDataBuffer);

// サポートされているデータ形式か
if (fileType == null || !supportedMimeTypes.some(i => i == fileType.mime)) {
return new ApiResult(400, 'file is not supported format');
}

let storageFile;

try {
storageFile = await request.db.storageFiles.createAsync({ // TODO: move to document models
creatorId: request.user.document._id,
type: fileType.mime.split('/')[0],
mimeType: fileType.mime,
file: fileDataBuffer,
accessRight: {
level: 'public', // 'specific' 'private'
// users: []
}
});
}
catch(err) {
console.log(err.trace);
}

if (storageFile == null) {
return new ApiResult(500, 'failed to create storage file');
}

return new ApiResult(200, {storageFile: storageFile.serialize()});
};

// ファイル一覧取得 // TODO: フィルター指定
exports.get = async (request) => {
const result = await request.checkRequestAsync({
query: [
],
permissions: ['storageRead']
});

if (result != null) {
return result;
}

let files;
try {
files = await request.db.storageFiles.findArrayAsync(request.user.document._id);
}
catch(err) {
// noop
}

if (files == null || files.length == 0) {
return new ApiResult(204);
}

return new ApiResult(200, {storageFiles: files.map(i => i.serialize())});
// TODO
return new ApiResult(500, 'not implemented yet');
};

1 comment on commit 381ef9b

@marihachi
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#81 (comment)
この点についての修正

Please sign in to comment.