Add revisions to files

This commit is contained in:
rijkvanzanten
2020-07-09 12:29:04 -04:00
parent f980e3d89e
commit 7e1d386e62
3 changed files with 46 additions and 45 deletions

View File

@@ -31,12 +31,12 @@
"@types/atob": "^2.1.2",
"@types/busboy": "^0.2.3",
"@types/cookie-parser": "^1.4.2",
"@types/express": "^4.17.6",
"@types/express": "^4.17.7",
"@types/express-pino-logger": "^4.0.2",
"@types/express-session": "^1.17.0",
"@types/hapi__joi": "^17.1.2",
"@types/hapi__joi": "^17.1.3",
"@types/jsonwebtoken": "^8.5.0",
"@types/lodash": "^4.14.156",
"@types/lodash": "^4.14.157",
"@types/ms": "^0.7.31",
"@types/nodemailer": "^6.4.0",
"@types/pino": "^6.3.0",
@@ -44,16 +44,16 @@
"@types/uuid": "^8.0.0",
"@types/uuid-validate": "0.0.1",
"copyfiles": "^2.3.0",
"eslint": "^7.3.1",
"eslint": "^7.4.0",
"eslint-plugin-prettier": "^3.1.4",
"husky": "^4.2.5",
"lint-staged": "^10.2.10",
"pino-colada": "^1.6.1",
"lint-staged": "^10.2.11",
"pino-colada": "^2.0.1",
"prettier": "^2.0.5",
"rimraf": "^3.0.2",
"ts-node": "^8.10.2",
"tslint": "^6.1.2",
"typescript": "^3.9.5"
"typescript": "^3.9.6"
},
"husky": {
"hooks": {
@@ -67,9 +67,9 @@
},
"dependencies": {
"@hapi/joi": "^17.1.1",
"@slynova/flydrive": "^1.0.1",
"@slynova/flydrive-gcs": "^1.0.1",
"@slynova/flydrive-s3": "^1.0.1",
"@slynova/flydrive": "^1.0.2",
"@slynova/flydrive-gcs": "^1.0.2",
"@slynova/flydrive-s3": "^1.0.2",
"argon2": "^0.26.2",
"atob": "^2.1.2",
"body-parser": "^1.19.0",
@@ -87,19 +87,19 @@
"icc": "^2.0.0",
"jsonwebtoken": "^8.5.1",
"knex": "^0.21.1",
"liquidjs": "^9.12.0",
"lodash": "^4.17.15",
"liquidjs": "^9.14.1",
"lodash": "^4.17.19",
"ms": "^2.1.2",
"mssql": "^6.2.0",
"mysql": "^2.18.1",
"nanoid": "^3.1.10",
"nodemailer": "^6.4.10",
"oracledb": "^4.2.0",
"pg": "^8.2.1",
"oracledb": "^5.0.0",
"pg": "^8.3.0",
"pino": "^6.3.2",
"sharp": "^0.25.4",
"sqlite3": "^4.2.0",
"ts-node-dev": "^1.0.0-pre.49",
"sqlite3": "^5.0.0",
"ts-node-dev": "^1.0.0-pre.51",
"uuid": "^8.2.0",
"uuid-validate": "0.0.3"
}

View File

@@ -55,20 +55,24 @@ const multipartHandler = (operation: 'create' | 'update') =>
try {
if (operation === 'create') {
const file = await FilesService.createFile(payload, fileStream);
ActivityService.createActivity({
action: ActivityService.Action.UPLOAD,
collection: 'directus_files',
item: file.id,
const file = await FilesService.createFile(payload, fileStream, {
ip: req.ip,
user_agent: req.get('user-agent'),
action_by: req.user,
userAgent: req.get('user-agent'),
user: req.user,
});
savedFiles.push(file);
} else {
const file = await FilesService.updateFile(req.params.pk, payload, fileStream);
const file = await FilesService.updateFile(
req.params.pk,
payload,
{
ip: req.ip,
userAgent: req.get('user-agent'),
user: req.user,
},
fileStream
);
ActivityService.createActivity({
action: ActivityService.Action.UPDATE,
@@ -130,15 +134,10 @@ router.patch(
if (req.is('multipart/form-data')) {
file = await multipartHandler('update')(req, res, next);
} else {
file = await FilesService.updateFile(req.params.pk, req.body);
ActivityService.createActivity({
action: ActivityService.Action.UPDATE,
collection: 'directus_files',
item: file.id,
file = await FilesService.updateFile(req.params.pk, req.body, {
ip: req.ip,
user_agent: req.get('user-agent'),
action_by: req.user,
userAgent: req.get('user-agent'),
user: req.user,
});
}
@@ -150,7 +149,11 @@ router.delete(
'/:pk',
useCollection('directus_files'),
asyncHandler(async (req, res) => {
await FilesService.deleteFile(req.params.pk);
await FilesService.deleteFile(req.params.pk, {
ip: req.ip,
userAgent: req.get('user-agent'),
user: req.user,
});
return res.status(200).end();
})
);

View File

@@ -9,11 +9,13 @@ import parseEXIF from 'exif-reader';
import parseIPTC from '../utils/parse-iptc';
import path from 'path';
import { v4 as uuidv4 } from 'uuid';
import { Accountability } from '../types';
import { Readable } from 'stream';
export const createFile = async (
data: Record<string, any>,
stream: NodeJS.ReadableStream,
query?: Query
accountability: Accountability
) => {
const id = uuidv4();
@@ -51,8 +53,7 @@ export const createFile = async (
}
await storage.disk(data.storage).put(payload.filename_disk, stream.pipe(pipeline));
const primaryKey = await ItemsService.createItem('directus_files', payload);
return await ItemsService.readItem('directus_files', primaryKey, query);
return await ItemsService.createItem('directus_files', payload, accountability);
};
export const readFiles = async (query: Query) => {
@@ -63,12 +64,11 @@ export const readFile = async (pk: string | number, query: Query) => {
return await ItemsService.readItem('directus_files', pk, query);
};
// @todo Add query support
export const updateFile = async (
pk: string | number,
data: Record<string, any>,
stream?: NodeJS.ReadableStream,
query?: Query
accountability: Accountability,
stream?: NodeJS.ReadableStream
) => {
/**
* @TODO
@@ -87,15 +87,13 @@ export const updateFile = async (
.where({ id: pk })
.first();
// @todo type of stream in flydrive is wrong: https://github.com/Slynova-Org/flydrive/issues/145
await storage.disk(file.storage).put(file.filename_disk, stream as any);
await storage.disk(file.storage).put(file.filename_disk, stream as Readable);
}
const primaryKey = await ItemsService.updateItem('directus_files', pk, data);
return await ItemsService.readItem('directus_files', primaryKey, query);
return await ItemsService.updateItem('directus_files', pk, data, accountability);
};
export const deleteFile = async (pk: string | number) => {
export const deleteFile = async (pk: string, accountability: Accountability) => {
const file = await database
.select('storage', 'filename_disk')
.from('directus_files')