@3wks/generator-gae-node-nestjs
Version:
A generator for building nestjs apps on app engine node
53 lines (46 loc) • 1.55 kB
text/typescript
import { Context, createLogger, Ctxt, Roles, StorageProvider } from '@3wks/gae-node-nestjs';
import { Body, Controller, Get, Param, Post, Res } from '@nestjs/common';
import * as Logger from 'bunyan';
import { Response } from 'express';
import * as uuidv4 from 'uuid/v4';
import { ConfigurationProvider } from '../config/config.provider';
('api/attachments')
export class AttachmentsController {
private logger: Logger;
constructor(
private readonly configurationProvider: ConfigurationProvider,
private readonly storageProvider: StorageProvider,
) {
this.logger = createLogger('attachments-controller');
}
('admin')
('/upload')
async uploadAttachment(('contentType') contentType: string) {
this.logger.info('Generating Google Cloud Storage attachment URL');
const id = uuidv4();
const file = this.storageProvider.defaultBucket.file(`attachment/${id}`);
const [url] = await file.createResumableUpload({
origin: this.configurationProvider.host,
metadata: {
contentType,
},
});
return {
id,
url,
};
}
('admin')
('/:id/download')
async download(('id') id: string, () context: Context, () res: Response) {
const [url] = await this.storageProvider.defaultBucket.file(`attachment/${id}`).getSignedUrl({
action: 'read',
expires: Date.now() + 1000 * 60 * 5,
});
if (id && url) {
res.redirect(url);
} else {
res.status(404).send('Attachment not found');
}
}
}