|
| 1 | +importaxiosfrom'axios' |
| 2 | +import{SubTask,Task,TaskNumber}from'../../types/kanbanflow' |
| 3 | +import{getTasksByColumnParams}from'./types/requests' |
| 4 | + |
| 5 | +require('dotenv').config() |
| 6 | +consttoken=process.env.KBF_TESTING_API_TOKEN |
| 7 | + |
| 8 | +constgenAPIkey=(token?:string)=>{ |
| 9 | +if(!token)throw'Please provide an API token' |
| 10 | +returnBuffer.from('apiToken:'+token).toString('base64') |
| 11 | +} |
| 12 | + |
| 13 | +exportconstkanbanGet= |
| 14 | +async<T>(resource:string, |
| 15 | +params?:getTasksByColumnParams, |
| 16 | +apiKey=genAPIkey(token))=>{ |
| 17 | +constres=awaitaxios.get<T>(`https://kanbanflow.com/api/v1/${resource}`, |
| 18 | +{ |
| 19 | +headers:{ |
| 20 | +'Authorization':`Basic${apiKey}` |
| 21 | +}, |
| 22 | +params |
| 23 | +}) |
| 24 | + |
| 25 | +returnres.data |
| 26 | +} |
| 27 | + |
| 28 | +exporttypepostReply={taskId:string,taskNumber:TaskNumber} |
| 29 | + |
| 30 | +exporttypecreateTaskParams= |
| 31 | +Omit<Task,'_id'|'totalSecondsSpent'|'color'|'description'> |
| 32 | +&Partial<Pick<Task,'color'|'description'>> |
| 33 | + |
| 34 | +interfaceKanbanPost{ |
| 35 | +apiKey?:string; |
| 36 | +} |
| 37 | + |
| 38 | +interfaceModifyTask{ |
| 39 | +taskId:Task['_id']; |
| 40 | + |
| 41 | +} |
| 42 | + |
| 43 | + |
| 44 | +interfaceCreateParamsextendsKanbanPost{ |
| 45 | +params:createTaskParams; |
| 46 | +} |
| 47 | + |
| 48 | +interfaceUpdateParamsextendsKanbanPost,ModifyTask{ |
| 49 | +params:Partial<createTaskParams>; |
| 50 | +} |
| 51 | + |
| 52 | + |
| 53 | +typeAddOrModifyPropTypes='subtask' |
| 54 | + |
| 55 | +exportconstAddParams:{[keyinAddOrModifyPropTypes]:string}={ |
| 56 | +subtask:'subtasks' |
| 57 | +} |
| 58 | + |
| 59 | + |
| 60 | +interfaceAddSubtaskParamsextendsKanbanPost,ModifyTask{ |
| 61 | +params:Pick<SubTask,'name'>&Partial<SubTask>; |
| 62 | +addParam:'subtask' |
| 63 | +} |
| 64 | + |
| 65 | +interfaceModifySubtaskParamsextendsKanbanPost,ModifyTask{ |
| 66 | +params:Partial<SubTask>; |
| 67 | +modifyParam:AddOrModifyPropTypes |
| 68 | +} |
| 69 | + |
| 70 | +interfaceImplementationParamsextendsKanbanPost{ |
| 71 | +params:createTaskParams|Partial<createTaskParams>; |
| 72 | +taskId?:Task['_id']; |
| 73 | +addParam?:string |
| 74 | +modifyParam?:AddOrModifyPropTypes |
| 75 | +} |
| 76 | + |
| 77 | +// create |
| 78 | +exportasyncfunctionkanbanPost({params, apiKey}:CreateParams):Promise<postReply> |
| 79 | +// update |
| 80 | +exportasyncfunctionkanbanPost({params, taskId, apiKey}:UpdateParams):Promise<void> |
| 81 | +// add subtask |
| 82 | +exportasyncfunctionkanbanPost({params, taskId, apiKey, addParam}:AddSubtaskParams):Promise<{insertIndex:number}> |
| 83 | +// modify subtask |
| 84 | +exportasyncfunctionkanbanPost({params, taskId, apiKey, modifyParam}:ModifySubtaskParams):Promise<void> |
| 85 | + |
| 86 | + |
| 87 | +// implementation |
| 88 | +exportasyncfunctionkanbanPost({params, taskId, addParam, modifyParam, apiKey=genAPIkey(token)}:ImplementationParams){ |
| 89 | +leturl=`https://kanbanflow.com/api/v1/tasks${taskId ?'/'+taskId :''}` |
| 90 | +addParam==='subtask' ?url+='/'+AddParams['subtask'] :url |
| 91 | +modifyParam ?url+='/'+AddParams[modifyParam] :url |
| 92 | +constres=awaitaxios.post( |
| 93 | +url, |
| 94 | +params, |
| 95 | +{ |
| 96 | +headers:{ |
| 97 | +'Authorization':`Basic${apiKey}`, |
| 98 | +'Content-type':'application/json' |
| 99 | + |
| 100 | +} |
| 101 | +}) |
| 102 | +returnres.data |
| 103 | + |
| 104 | +} |