????

Your IP : 3.148.240.165


Current Path : C:/inetpub/vhost/invest.gdtsolutions.vn/api/dist/apps/assets/
Upload File :
Current File : C:/inetpub/vhost/invest.gdtsolutions.vn/api/dist/apps/assets/assets.controller.js

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DownloadControler = exports.AssetsController = void 0;
const common_1 = require("@nestjs/common");
const assets_service_1 = require("./assets.service");
const asset_entity_1 = require("./entities/asset.entity");
const crud_1 = require("@dataui/crud");
const swagger_1 = require("@nestjs/swagger");
const platform_express_1 = require("@nestjs/platform-express");
const express = __importStar(require("express"));
const multer_1 = require("multer");
const path_1 = require("path");
const fs_1 = require("fs");
const url_1 = require("url");
const dto_1 = require("./dto");
const randomFileName = (fileName) => {
    const randomName = Array(32)
        .fill(null)
        .map(() => Math.round(Math.random() * 16).toString(16))
        .join('');
    return `${randomName}${(0, path_1.extname)(fileName)}`;
};
let AssetsController = class AssetsController {
    constructor(service) {
        this.service = service;
    }
    get base() {
        return this;
    }
    async createOne(file, req, res, crudReq) {
        if (!file) {
            throw new common_1.HttpException('File is required', common_1.HttpStatus.BAD_REQUEST);
        }
        try {
            const { size, originalname, mimetype, path } = file;
            const source = (0, url_1.resolve)(req.res.locals.fileUrl, file.filename);
            const fileThumbnail = 'uploads/thumbnails/' + randomFileName(req.file.originalname);
            const asset = await this.service.createThumbnail(path, fileThumbnail);
            asset.preview = `/${fileThumbnail}`;
            asset.name = originalname;
            asset.type = 'IMAGE';
            asset.mimeType = mimetype;
            asset.fileSize = size;
            asset.source = source;
            const newAsset = await this.base.createOneBase(crudReq, asset);
            res.send(newAsset);
        }
        catch (error) {
            throw new common_1.HttpException('error', 500, { cause: error });
        }
    }
    async deleteOne(req, res, crudReq) {
        const asset = await this.base.service.getOne(crudReq);
        (0, fs_1.unlink)(process.cwd() + asset.source, (err) => {
            if (err)
                throw err;
        });
        (0, fs_1.unlink)(process.cwd() + asset.preview, (err) => {
            if (err)
                throw err;
        });
        const result = await this.base.deleteOneBase(crudReq);
        res.send(result);
    }
};
exports.AssetsController = AssetsController;
__decorate([
    (0, swagger_1.ApiConsumes)('multipart/form-data'),
    (0, swagger_1.ApiBody)({
        schema: {
            type: 'object',
            properties: {
                file: {
                    type: 'string',
                    format: 'binary',
                },
            },
        },
    }),
    (0, crud_1.Override)('createOneBase'),
    __param(0, (0, common_1.UploadedFile)()),
    __param(1, (0, common_1.Request)()),
    __param(2, (0, common_1.Response)()),
    __param(3, (0, crud_1.ParsedRequest)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object, Object, Object]),
    __metadata("design:returntype", Promise)
], AssetsController.prototype, "createOne", null);
__decorate([
    (0, crud_1.Override)('deleteOneBase'),
    __param(0, (0, common_1.Request)()),
    __param(1, (0, common_1.Response)()),
    __param(2, (0, crud_1.ParsedRequest)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object, Object]),
    __metadata("design:returntype", Promise)
], AssetsController.prototype, "deleteOne", null);
exports.AssetsController = AssetsController = __decorate([
    (0, swagger_1.ApiTags)('assets'),
    (0, crud_1.Crud)({
        model: {
            type: asset_entity_1.Asset,
        },
        routes: {
            exclude: ['createManyBase'],
            createOneBase: {
                interceptors: [
                    (0, platform_express_1.FileInterceptor)('file', {
                        storage: (0, multer_1.diskStorage)({
                            destination: (req, file, cb) => {
                                try {
                                    const now = new Date();
                                    const url = `/uploads/${now.getFullYear().toString()}/${(now.getMonth() + 1)
                                        .toString()
                                        .padStart(2, '0')}/`;
                                    req.res.locals.fileUrl = url;
                                    const urlThumbnails = (0, path_1.join)(process.cwd(), '/uploads/thumbnails');
                                    const dir = (0, path_1.join)(process.cwd(), url);
                                    if (!(0, fs_1.existsSync)(dir))
                                        (0, fs_1.mkdirSync)(dir, { recursive: true });
                                    if (!(0, fs_1.existsSync)(urlThumbnails))
                                        (0, fs_1.mkdirSync)(urlThumbnails, { recursive: true });
                                    return cb(null, dir);
                                }
                                catch (err) {
                                    return cb(err, './uploads');
                                }
                            },
                            filename: (req, file, cb) => {
                                return cb(null, randomFileName(file.originalname));
                            },
                        }),
                        limits: {
                            fileSize: 20971520,
                            files: 1,
                            fields: 5,
                        },
                    }),
                ],
            },
        },
    }),
    (0, common_1.Controller)('assets'),
    __metadata("design:paramtypes", [assets_service_1.AssetsService])
], AssetsController);
let DownloadControler = class DownloadControler {
    constructor(service) {
        this.service = service;
    }
    async download(req, res, util) {
        const baseURL = req.protocol + '://' + req.headers.host + '/';
        const pathName = new URL(req.url, baseURL).pathname.replace('/api', '');
        const upload = await this.service.findOne({
            where: [{ source: pathName }, { preview: pathName }],
        });
        const jimp = await this.service.download(pathName, util);
        const mimeType = upload.mimeType || jimp.getMIME();
        res.type(mimeType);
        res.status(200).send(await jimp.getBufferAsync(mimeType));
    }
};
exports.DownloadControler = DownloadControler;
__decorate([
    (0, common_1.Get)('*'),
    (0, swagger_1.ApiExcludeEndpoint)(true),
    __param(0, (0, common_1.Request)()),
    __param(1, (0, common_1.Response)()),
    __param(2, (0, common_1.Query)()),
    __metadata("design:type", Function),
    __metadata("design:paramtypes", [Object, Object, dto_1.ImageUtil]),
    __metadata("design:returntype", Promise)
], DownloadControler.prototype, "download", null);
exports.DownloadControler = DownloadControler = __decorate([
    (0, common_1.Controller)('uploads'),
    __metadata("design:paramtypes", [assets_service_1.AssetsService])
], DownloadControler);
//# sourceMappingURL=assets.controller.js.map