1
0
mirror of https://github.com/sasjs/server.git synced 2025-12-10 11:24:35 +00:00

Merge pull request #377 from sasjs/issue-373-stp-fix

feat(api): enabled query params in stp/trigger endpoint
This commit is contained in:
Yury Shkoda
2024-10-30 12:22:10 +03:00
committed by GitHub
3 changed files with 54 additions and 41 deletions

View File

@@ -603,21 +603,6 @@ components:
- sessionId - sessionId
type: object type: object
additionalProperties: false additionalProperties: false
TriggerProgramPayload:
properties:
_program:
type: string
description: 'Location of SAS program'
example: /Public/somefolder/some.file
expiresAfterMins:
type: number
format: double
description: "Amount of minutes after the completion of the program when the session must be\ndestroyed."
example: 15
required:
- _program
type: object
additionalProperties: false
LoginPayload: LoginPayload:
properties: properties:
username: username:
@@ -1936,8 +1921,8 @@ paths:
application/json: application/json:
schema: schema:
$ref: '#/components/schemas/TriggerProgramResponse' $ref: '#/components/schemas/TriggerProgramResponse'
description: 'Trigger Program on the Specified Runtime' description: 'Trigger Program on the Specified Runtime.'
summary: 'Triggers program and returns SessionId immediately - does not wait for program completion' summary: 'Triggers program and returns SessionId immediately - does not wait for program completion.'
tags: tags:
- STP - STP
security: security:
@@ -1945,19 +1930,31 @@ paths:
bearerAuth: [] bearerAuth: []
parameters: parameters:
- -
description: 'Location of code in SASjs Drive' description: 'Location of code in SASjs Drive.'
in: query in: query
name: _program name: _program
required: false required: true
schema: schema:
type: string type: string
example: /Projects/myApp/some/program example: /Projects/myApp/some/program
requestBody: -
required: true description: 'Optional query param for setting debug mode.'
content: in: query
application/json: name: _debug
schema: required: false
$ref: '#/components/schemas/TriggerProgramPayload' schema:
format: double
type: number
example: 131
-
description: 'Optional query param for setting amount of minutes after the completion of the program when the session must be destroyed.'
in: query
name: expiresAfterMins
required: false
schema:
format: double
type: number
example: 15
/: /:
get: get:
operationId: Home operationId: Home

View File

@@ -22,7 +22,7 @@ interface ExecutePostRequestPayload {
interface TriggerProgramPayload { interface TriggerProgramPayload {
/** /**
* Location of SAS program * Location of SAS program.
* @example "/Public/somefolder/some.file" * @example "/Public/somefolder/some.file"
*/ */
_program: string _program: string
@@ -32,6 +32,10 @@ interface TriggerProgramPayload {
* @example 15 * @example 15
*/ */
expiresAfterMins?: number expiresAfterMins?: number
/**
* Query param for setting debug mode.
*/
_debug?: number
} }
interface TriggerProgramResponse { interface TriggerProgramResponse {
@@ -108,19 +112,23 @@ export class STPController {
} }
/** /**
* Trigger Program on the Specified Runtime * Trigger Program on the Specified Runtime.
* @summary Triggers program and returns SessionId immediately - does not wait for program completion * @summary Triggers program and returns SessionId immediately - does not wait for program completion.
* @param _program Location of code in SASjs Drive * @param _program Location of code in SASjs Drive.
* @param expiresAfterMins Optional query param for setting amount of minutes after the completion of the program when the session must be destroyed.
* @param _debug Optional query param for setting debug mode.
* @example _program "/Projects/myApp/some/program" * @example _program "/Projects/myApp/some/program"
* @param expiresAfterMins Amount of minutes after the completion of the program when the session must be destroyed * @example _debug 131
* @example expiresAfterMins 15 * @example expiresAfterMins 15
*/ */
@Post('/trigger') @Post('/trigger')
public async triggerProgram( public async triggerProgram(
@Request() request: express.Request, @Request() request: express.Request,
@Body() body: TriggerProgramPayload @Query() _program: string,
@Query() _debug?: number,
@Query() expiresAfterMins?: number
): Promise<TriggerProgramResponse> { ): Promise<TriggerProgramResponse> {
return triggerProgram(request, body) return triggerProgram(request, { _program, _debug, expiresAfterMins })
} }
} }
@@ -163,14 +171,18 @@ const execute = async (
const triggerProgram = async ( const triggerProgram = async (
req: express.Request, req: express.Request,
{ _program, expiresAfterMins }: TriggerProgramPayload { _program, _debug, expiresAfterMins }: TriggerProgramPayload
): Promise<TriggerProgramResponse> => { ): Promise<TriggerProgramResponse> => {
try { try {
const vars = { ...req.body } // put _program query param into vars object
const filesNamesMap = req.files?.length const vars: { [key: string]: string | number } = { _program }
? makeFilesNamesMap(req.files as MulterFile[])
: null // if present add _debug query param to vars object
const otherArgs = { filesNamesMap: filesNamesMap } if (_debug) {
vars._debug = _debug
}
// get code path and runTime
const { codePath, runTime } = await getRunTimeAndFilePath(_program) const { codePath, runTime } = await getRunTimeAndFilePath(_program)
// get session controller based on runTime // get session controller based on runTime
@@ -191,7 +203,6 @@ const triggerProgram = async (
runTime, runTime,
preProgramVariables: getPreProgramVariables(req), preProgramVariables: getPreProgramVariables(req),
vars, vars,
otherArgs,
session session
}) })

View File

@@ -73,12 +73,17 @@ stpRouter.post(
) )
stpRouter.post('/trigger', async (req, res) => { stpRouter.post('/trigger', async (req, res) => {
const { error, value: body } = triggerProgramValidation(req.body) const { error, value: query } = triggerProgramValidation(req.query)
if (error) return res.status(400).send(error.details[0].message) if (error) return res.status(400).send(error.details[0].message)
try { try {
const response = await controller.triggerProgram(req, body) const response = await controller.triggerProgram(
req,
query._program,
query._debug,
query.expiresAfterMins
)
res.status(200) res.status(200)
res.send(response) res.send(response)