mirror of
https://github.com/sasjs/server.git
synced 2025-12-10 11:24:35 +00:00
fix(upload): added query param as well for filepath
This commit is contained in:
@@ -669,7 +669,13 @@ paths:
|
||||
security:
|
||||
-
|
||||
bearerAuth: []
|
||||
parameters: []
|
||||
parameters:
|
||||
-
|
||||
in: query
|
||||
name: _filePath
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
@@ -677,13 +683,12 @@ paths:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
filePath:
|
||||
type: string
|
||||
file:
|
||||
type: string
|
||||
format: binary
|
||||
filePath:
|
||||
type: string
|
||||
required:
|
||||
- filePath
|
||||
- file
|
||||
patch:
|
||||
operationId: UpdateFile
|
||||
|
||||
@@ -129,10 +129,11 @@ export class DriveController {
|
||||
})
|
||||
@Post('/file')
|
||||
public async saveFile(
|
||||
@FormField() filePath: string,
|
||||
@UploadedFile() file: Express.Multer.File
|
||||
@UploadedFile() file: Express.Multer.File,
|
||||
@Query() _filePath?: string,
|
||||
@FormField() filePath?: string
|
||||
): Promise<UpdateFileResponse> {
|
||||
return saveFile(filePath, file)
|
||||
return saveFile((_filePath ?? filePath)!, file)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,7 +3,12 @@ import { deleteFile } from '@sasjs/utils'
|
||||
|
||||
import { multerSingle } from '../../middlewares/multer'
|
||||
import { DriveController } from '../../controllers/'
|
||||
import { getFileDriveValidation, updateFileDriveValidation } from '../../utils'
|
||||
import {
|
||||
getFileDriveValidation,
|
||||
updateFileDriveValidation,
|
||||
uploadFileBodyValidation,
|
||||
uploadFileParamValidation
|
||||
} from '../../utils'
|
||||
|
||||
const controller = new DriveController()
|
||||
|
||||
@@ -42,16 +47,22 @@ driveRouter.post(
|
||||
'/file',
|
||||
(...arg) => multerSingle('file', arg),
|
||||
async (req, res) => {
|
||||
const { error, value: body } = updateFileDriveValidation(req.body)
|
||||
if (error) {
|
||||
const { error: errQ, value: query } = uploadFileParamValidation(req.query)
|
||||
const { error: errB, value: body } = uploadFileBodyValidation(req.body)
|
||||
|
||||
if (errQ && errB) {
|
||||
if (req.file) await deleteFile(req.file.path)
|
||||
return res.status(400).send(error.details[0].message)
|
||||
return res.status(400).send(errB.details[0].message)
|
||||
}
|
||||
|
||||
if (!req.file) return res.status(400).send('"file" is not present.')
|
||||
|
||||
try {
|
||||
const response = await controller.saveFile(body.filePath, req.file)
|
||||
const response = await controller.saveFile(
|
||||
req.file,
|
||||
query._filePath,
|
||||
body.filePath
|
||||
)
|
||||
res.send(response)
|
||||
} catch (err: any) {
|
||||
await deleteFile(req.file.path)
|
||||
|
||||
@@ -172,7 +172,7 @@ describe('files', () => {
|
||||
|
||||
describe('file', () => {
|
||||
describe('create', () => {
|
||||
it('should create a SAS file on drive', async () => {
|
||||
it('should create a SAS file on drive having filePath as form field', async () => {
|
||||
const res = await request(app)
|
||||
.post('/SASjsApi/drive/file')
|
||||
.auth(accessToken, { type: 'bearer' })
|
||||
@@ -185,6 +185,19 @@ describe('files', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('should create a SAS file on drive having _filePath as query param', async () => {
|
||||
const res = await request(app)
|
||||
.post('/SASjsApi/drive/file')
|
||||
.auth(accessToken, { type: 'bearer' })
|
||||
.query({ _filePath: '/my/path/code1.sas' })
|
||||
.attach('file', path.join(__dirname, 'files', 'sample.sas'))
|
||||
|
||||
expect(res.statusCode).toEqual(200)
|
||||
expect(res.body).toEqual({
|
||||
status: 'success'
|
||||
})
|
||||
})
|
||||
|
||||
it('should respond with Unauthorized if access token is not present', async () => {
|
||||
const res = await request(app)
|
||||
.post('/SASjsApi/drive/file')
|
||||
|
||||
@@ -72,12 +72,25 @@ export const getFileDriveValidation = (data: any): Joi.ValidationResult =>
|
||||
}).validate(data)
|
||||
|
||||
export const updateFileDriveValidation = (data: any): Joi.ValidationResult =>
|
||||
Joi.object({
|
||||
filePath: Joi.string().required(),
|
||||
fileContent: Joi.string().required()
|
||||
}).validate(data)
|
||||
|
||||
export const uploadFileBodyValidation = (data: any): Joi.ValidationResult =>
|
||||
Joi.object({
|
||||
filePath: Joi.string().pattern(/.sas$/).required().messages({
|
||||
'string.pattern.base': `Valid extensions for filePath: .sas`
|
||||
})
|
||||
}).validate(data)
|
||||
|
||||
export const uploadFileParamValidation = (data: any): Joi.ValidationResult =>
|
||||
Joi.object({
|
||||
_filePath: Joi.string().pattern(/.sas$/).required().messages({
|
||||
'string.pattern.base': `Valid extensions for filePath: .sas`
|
||||
})
|
||||
}).validate(data)
|
||||
|
||||
export const runSASValidation = (data: any): Joi.ValidationResult =>
|
||||
Joi.object({
|
||||
code: Joi.string().required()
|
||||
|
||||
Reference in New Issue
Block a user