@amag-ch/sap_cap_common_objectstore
v2.4.1
Published
NodeJS library to communicate with an objectstore
Downloads
211
Readme
NodeJS library to communicate with an objectstore
Table of Contents
Features
- Fully integrated in CAP as a Service
- Support S3 objectstore and local objectstore for development testings
- Autodeletion if corresponding entity entry is been deleted (Entity which uses File)
- Autohandling streaming, if content is requested
- Testfiles possible
- Lazy deletion of objects and only executed, if transaction is successfull
- Auto configuration with cds plugin feature
Installing
Using npm:
$ npm install @amag-ch/sap_cap_common_objectstore
Using yarn:
$ yarn add @amag-ch/sap_cap_common_objectstore
Configuration
{
"cds": {
"requires": {
"objectstore": {
"impl": "@amag-ch/sap_cap_common_objectstore",
"kind": "objectstore"
}
}
}
}
The name and kind must be named objectstore
, otherwise CAP cannot inject the credentials from environment
Variant with local objectstore for development testings
{
"cds": {
"requires": {
"objectstore": {
"impl": "@amag-ch/sap_cap_common_objectstore",
"kind": "local-objectstore",
"[production]": {
"kind": "objectstore",
}
}
}
}
}
The local objectstore is saved in folder ~/.cds-objectstore
Standard configuration (cds-plugin)
{
"cds": {
"requires": {
"objectstore": {
"impl": "@amag-ch/sap_cap_common_objectstore",
"kind": "local-objectstore",
"[production]": {
"kind": "objectstore"
}
}
}
}
}
Implementation
Database Schema
using {amag.common.objectstore.File as File} from '@amag-ch/sap_cap_common_objectstore';
entity MyEntity {
key ID : UUID;
file : File
}
File is definied as Composition. Means if entry of MyEntity is been deleted, also the connected File would be deleted.
File is per default defined as attachment (@Core.ContentDisposition.Type: 'attachment'
), but could be overwriten with own annotations.
Service for add or read files
const objectstore = await cds.connect.to('objectstore')
const ID = await objectstore.create('Any File Content', { filename: 'Testfile.txt', contentType: 'text/plain' })
const file = await objectstore.read(ID)
console.log(file.modifiedAt)
const stream = await objectstore.readContent(ID)
Testing
Create a folder (e.g. test/objectstore
) with all needed files named by ID, which is also used in test/data/amag.common.objectstore-Files.csv
.
With cds-plugin
mode this folder is automatically registered.
Otherwise add file test/init.js
with following code snippet to register your folder.
module.exports = async () => {
require('@amag-ch/sap_cap_common_objectstore').testing.register(`${__dirname}/objectstore`)
}