flexbiz-server
Version:
Flexible Server
11 lines (10 loc) • 4.81 kB
JavaScript
'use strict';const async=require("async"),{JSONParser}=require("../libs/utils"),importFromGs=($ctrl$$,$req$$,$mainCallback$$)=>{async.series([function($callback$$){setImmediate(async()=>{let {spreadsheetid:$spreadsheetid$$,range:$range$$}=$req$$.query;if(!$spreadsheetid$$)return $callback$$({error:"Thi\u1ebfu tham s\u1ed1 spreadsheetid"});0<=$spreadsheetid$$.indexOf("https://docs.google.com/spreadsheets/d/")&&($spreadsheetid$$=$spreadsheetid$$.replace("https://docs.google.com/spreadsheets/d/",""),
$spreadsheetid$$=$spreadsheetid$$.split("/")[0]);if(!$spreadsheetid$$)return $callback$$({error:"spreadsheetId is not valid"});$range$$||($range$$="Sheet1");var $app_google_credentials_id_app$$=$req$$.query.id_app;$app_google_credentials_id_app$$=await global.getModel("app").findOne({_id:$app_google_credentials_id_app$$}).lean();if(!$app_google_credentials_id_app$$)return $callback$$({error:"id_app kh\u00f4ng t\u1ed3n t\u1ea1i"});$app_google_credentials_id_app$$=$app_google_credentials_id_app$$.google_credentials||
configs.google_credentials;if(!$app_google_credentials_id_app$$)return $callback$$({error:"Ch\u01b0a khai b\u00e1o th\u00f4ng tin truy c\u1eadp google apis"});let $listinfo_code$$=($req$$.query.listinfo_code||$ctrl$$.name).toLowerCase(),$listinfo$$=await global.getModel("listinfo").findOne({code:$listinfo_code$$}).lean();if(!$listinfo$$||!$listinfo$$.fields||0==$listinfo$$.fields.length)return $callback$$({error:"API n\u00e0y kh\u00f4ng c\u00f3 th\u00f4ng tin listinfo"});let $credentials$$;try{$credentials$$=
"string"==typeof $app_google_credentials_id_app$$?JSONParser($app_google_credentials_id_app$$):$app_google_credentials_id_app$$;const {client_email:$client_email$$,private_key:$private_key$$}=$credentials$$;var {google:$error$$}=require("googleapis");const $auth$$=new $error$$.auth.JWT($client_email$$,null,$private_key$$,["https://www.googleapis.com/auth/spreadsheets.readonly"]),$response$$=await $error$$.sheets({version:"v4",auth:$auth$$}).spreadsheets.values.get({spreadsheetId:$spreadsheetid$$,
range:$range$$});if(0==$response$$.data.values.length)return $callback$$({error:"Sheet n\u00e0y kh\u00f4ng c\u00f3 d\u1eef li\u1ec7u"});let $columns$$=$response$$.data.values[0].map($c$$=>{let $field$$=$listinfo$$.fields.find($f$$=>$f$$.name.toLowerCase()==($c$$||"").toString().toLowerCase());return $field$$?$field$$.name:($field$$=$listinfo$$.fields.find($f$$=>$f$$.header.toLowerCase()==($c$$||"").toString().toLowerCase()))?$field$$.name:$c$$}),$data$$=$response$$.data.values.slice(1).map($row$$=>
{let $n_row$$={};$columns$$.forEach(($c$$,$index$$)=>{$n_row$$[$c$$]=$row$$[$index$$]});return $n_row$$});$req$$.data=$data$$;$callback$$()}catch($e$$){return $error$$=(($e$$.response||{}).data||{}).error||$e$$,$credentials$$&&403==$error$$.code?$callback$$({error:`Kh\u00f4ng th\u1ec3 truy c\u1eadp v\u00e0o google sheet. H\u00e3y ph\u00e2n quy\u1ec1n cho t\u00e0i kho\u1ea3n ${$credentials$$.client_email} c\u00f3 quy\u1ec1n \u0111\u1ecdc google sheet tr\u00ean`}):$callback$$($error$$)}})},function($callback$$){let $data$$=
$req$$.data;if($ctrl$$.options.onImport)$ctrl$$.options.onImport($req$$.user,$data$$,[],function($e$$,$new_data$$){setImmediate(()=>{if($e$$)return console.error("onImport from json:",$e$$),$e$$.error?$callback$$($e$$):$callback$$({error:$e$$.message||$e$$});$req$$.data=$new_data$$||$data$$;$callback$$()})});else $req$$.data=$data$$,$callback$$()},function($callback$$){setImmediate(async()=>{let $data$$=$req$$.data;const $log$$=await global.getModel("log").create({id_app:$req$$.user.current_id_app,
id_func:$ctrl$$.name,action:"IMPORTJSON",data:{data:$data$$}},$req$$.user.email,$req$$.user_agent,$req$$);let $values$$=$req$$.query.values;if($values$$){try{$values$$=JSONParser($values$$)}catch($e$$){console.error("importFromJson",$e$$)}$values$$&&$data$$.forEach($row$$=>{for(let $key$$ in $values$$)$row$$[$key$$]=$values$$[$key$$]})}$ctrl$$.import($req$$.user,$req$$.user.current_id_app,$data$$,($e$$,$rs$$)=>{setImmediate(async()=>{$log$$.result={error:$e$$,result:$rs$$,finished_at:new Date};await $log$$.save();
if($e$$)return console.error("import from json",$ctrl$$.name,$data$$.length,"rows with error:",$e$$),$e$$.error?($e$$.message=$e$$.message||$e$$.error,$callback$$($e$$)):$callback$$({error:$e$$.error||$e$$.message||$e$$,message:$e$$.message||$e$$.error});if(0===$rs$$.rows_error.length)$req$$.result=$rs$$,$callback$$();else{let $message$$=[...(new Set($rs$$.rows_error.map($r$$=>[...(new Set($r$$.error.map($r$$=>$r$$.error||$r$$)))].join(", "))))].join(", ");$callback$$({error:$rs$$.error||$rs$$,message:$message$$})}})},
{replace:!0===$req$$.query.update||"true"==$req$$.query.update,req:$req$$})})}],$e$$=>{if($e$$)return $mainCallback$$($e$$);$mainCallback$$(null,$req$$.result)})};module.exports=importFromGs;