Skip to content

Commit

Permalink
Merge a51d4a9 into ffd8889
Browse files Browse the repository at this point in the history
  • Loading branch information
gastonpereyra committed Apr 21, 2020
2 parents ffd8889 + a51d4a9 commit 6c3b7a7
Show file tree
Hide file tree
Showing 6 changed files with 333 additions and 119 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Expand Up @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Added
- `url` field in API list when file type is 'image'

## [1.1.1] - 2020-02-13
### Fixed
Expand Down
12 changes: 12 additions & 0 deletions README.md
Expand Up @@ -327,6 +327,18 @@ get availableFilters() {
}
```

### get bucket()

*Required for Image type items*

This is used to indicate the bucket where the file is.

```js
get bucket() {
return 'bucket-name';
}
```

This API extends from [@janiscommerce/api-list](https://www.npmjs.com/package/@janiscommerce/api-list)

## Usage SlsApiFileGet Module
Expand Down
4 changes: 3 additions & 1 deletion lib/index.js
Expand Up @@ -10,6 +10,7 @@ const SlsApiFileRelationError = require('./sls-api-file-relation-error');
const SlsApiUploadError = require('./sls-api-upload-error');
const SlsApiFileDeleteError = require('./sls-api-file-delete-error');
const SlsApiFileGetError = require('./sls-api-file-get-error');
const SlsApiFileListError = require('./sls-api-file-list-error');

module.exports = {
BaseFileModel,
Expand All @@ -21,5 +22,6 @@ module.exports = {
SlsApiFileRelationError,
SlsApiUploadError,
SlsApiFileDeleteError,
SlsApiFileGetError
SlsApiFileGetError,
SlsApiFileListError
};
24 changes: 24 additions & 0 deletions lib/sls-api-file-list-error.js
@@ -0,0 +1,24 @@
'use strict';

class SlsApiFileListError extends Error {

static get messages() {

return {
BUCKET_NOT_DEFINED: 'Bucket not defined',
BUCKET_NOT_STRING: 'Bucket should be return a string'
};

}

constructor(err) {
super(err.message || err);

this.name = 'SlsApiFileListError';

if(err instanceof Error)
this.previousError = err;
}
}

module.exports = SlsApiFileListError;
43 changes: 42 additions & 1 deletion lib/sls-api-file-list.js
@@ -1,6 +1,8 @@
'use strict';

const S3 = require('@janiscommerce/s3');
const { ApiListData } = require('@janiscommerce/api-list');
const SlsApiFileListError = require('./sls-api-file-list-error');

class FileListApi extends ApiListData {

Expand All @@ -24,9 +26,48 @@ class FileListApi extends ApiListData {
}

formatRows(files) {
return files.map(({ path, ...file }) => file);

return Promise.all(files.map(async ({ path, ...file }) => {

if(!this.shouldAddUrl(file))
return file;

this.validateBucket();

let url = null;

try {
url = await S3.getSignedUrl('getObject', {
Bucket: this.bucket,
Key: path,
ResponseContentDisposition: `attachment; filename="${file.name}"`
});
} catch(error) {
if(error.statusCode !== 404)
throw new SlsApiFileListError(error);
}

return { ...file, url };
}));
}

shouldAddUrl(file) {
return file.type === 'image';
}

validateBucket() {

if(this.isValidBucket)
return;

if(!this.bucket)
throw new SlsApiFileListError(SlsApiFileListError.messages.BUCKET_NOT_DEFINED);

if(typeof this.bucket !== 'string')
throw new SlsApiFileListError(SlsApiFileListError.messages.BUCKET_NOT_STRING);

this.isValidBucket = true;
}
}

module.exports = FileListApi;

0 comments on commit 6c3b7a7

Please sign in to comment.