UNPKG

lemoncloud-engine-js

Version:

lemoncloud.io - Lemon Engine Modle of Node for Robust Micro-service based on DynamoDB + ElastiCache + Elasticsearch.

1 lines 5.52 kB
"use strict";var _slicedToArray=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,o=!1,i=void 0;try{for(var a,u=e[Symbol.iterator]();!(n=(a=u.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){o=!0,i=e}finally{try{!n&&u.return&&u.return()}finally{if(o)throw i}}return r}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};exports=module.exports=function(e,t){if(!e)throw new Error("_$(global instance pool) is required!");e._;var f=e.U,m=e.log,h=(e.inf,e.err),y=f.NS("USER","yellow"),a=e.MMS;function g(e){return b(404,e)}function v(e){return b(503,e)}function b(e,t){return{statusCode:e,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":!0},body:JSON.stringify(t)}}function r(e,t,r){t.callbackWaitsForEmptyEventLoop=!1;var n=e.queryStringParameters||{},o=e.pathParameters||{},i=decodeURIComponent(o.type||""),a=decodeURIComponent(o.id||""),u=(a||"GET"!==e.httpMethod?e.httpMethod:"LIST")||"",s=decodeURIComponent(o.cmd||""),c=!u&&e.Records?"EVENT":{LIST:"LIST",GET:"GET",PUT:"PUT",POST:"POST",DELETE:"DELETE"}[u],d=e.body&&("string"==typeof e.body&&(e.body.startsWith("{")||e.body.startsWith("["))?JSON.parse(e.body):e.body)||e.Records&&{records:e.Records}||null;d||m(y,"#"+c+":"+s+" ("+u+", "+i+"/"+a+")...."),d&&m(y,"#"+c+":"+s+" ("+u+", "+i+"/"+a+").... body.len=",d?f.json(d).length:-1);var l={_id:a,_param:n,_body:d,_ctx:t},_=Promise.resolve(l),p=function(e,t,r){var n=null;switch(e){case"LIST":n=E;break;case"GET":n=T,"0"===t&&"self-test"===r&&(n=k);break;case"PUT":n=S;break;case"POST":n=w;break;case"DELETE":n=P}return n}(c,a,s);if(!p)return r(null,g({MODE:c}));try{_.then(function(e){var t=e._id,r=e._param,n=e._body,o=e._ctx;return p(t,r,n,o)}).then(function(e){return e&&"object"===(void 0===e?"undefined":_typeof(e))&&(e=f.cleanup(e)),r(null,function(e){return b(200,e)}(e)),!0}).catch(function(e){return h(y,"!!! callback@1 with err",e),0<=(e&&e.message||"").indexOf("404 NOT FOUND")?r(null,g(e.message)):r(null,v(e.message||e)),!1})}catch(e){r(e,v(e.message))}}r.do_list_user=E,r.do_get_user=T,r.do_put_user=S,r.do_post_user=w,r.do_delete_user=P;var u="user",o={id:"ID",parent:"Parent User ID (같은 유저끼리 묶을 때, 상위 유저 속성)",group:"Group/Org ID (유저가 속한 조직/채널)",name:"UserName/Email/HP (유저 고유 식별번호)",nick:"Display Name (표시이름)",message:"Short Description (유저 상태 메세지)",description:"Long Description (유저 상세 정보)",image:"Image/Avatar URL (유저 이미지/아바타)",state:"State (상태)",source:"Creator ID (작성자)",created_at:"Created Time",updated_at:"Updated Time"},s=require("./_meta-api")(e),c=require("./group-api")(e),d=function(n){n=n||{};var e=Object.keys(o).reduce(function(e,t,r){return void 0!==n[t]&&(e[t]=n[t]),e},{});return void 0!==n._id&&(e._id=n._id),e},i=function(e){return e.type=u,e},l=function(e){return void 0!==e.name&&(e.name=(""+e.name).trim()),s.do_chain_on_update_parent(e)},_=function(e){return s.do_chain_on_update_group(e)};function E(e,t,r,n){return m(y,"do_list_user("+e+")...."),(t=t||{}).type=u,s.do_list_meta(e,t).then(function(e){var t=e.list||[];return e.list=t.map(d),e})}function T(e,t,r,n){m(y,"do_get_user("+e+")...."),(t=t||{}).type=u;var o=(""+(e||"")).toLowerCase();if(o&&/^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i.test(o)){m(y,"! email=",o);var i={type:u,name:o};return i.refid=a.calculate_refid(i),a.do_search_refid(i).then(function(e){return m(y,"> set email-id :=",e.id,"<- ref:"+i.refid),e.id}).catch(function(e){if(h(y,"! err=",e),(e&&e.message||"").startsWith("404 NOT FOUND")){if(i.name){var t=i.name.split("@",2),r=_slicedToArray(t,2),n=r[0],o=r[1];i.nick=n||"nobody",i.group=o||"nowhere",i.nick="d.kim"===i.nick?"daniel":i.nick,i.nick="kai.w"===i.nick?"kai":i.nick,i.nick=i.nick.charAt(0).toUpperCase()+i.nick.slice(1),i.image="/assets/avatars/"+i.nick.toLowerCase()+("Steve"===i.nick?".png":".jpg")}return m(y,">> new-node :=",i),Promise.resolve(i).then(function(t){return t.group?c.do_post_group(0,{name:t.group}).then(function(e){return m(y,">> group-id :=",e.id),t.group=e.id,t}):(t.group=0,t)}).then(function(e){return s.do_post_meta(0,e).then(function(e){return e.id})})}throw e}).then(function(e){return s.do_get_meta(e,t).then(d)})}return s.do_get_meta(e,t).then(d)}function k(e,t,r,n){return m(y,"do_self_test_user("+e+")...."),(t=t||{}).type=u,s.do_self_test_meta(e,t)}function S(t,e,r,n){m(y,"do_put_user("+t+")....");var o=r||e;return o?(o._id=f.N(t,0),Promise.resolve(o).then(d).then(i).then(l).then(_).then(function(e){return s.do_put_meta(t,e)})):Promise.reject(new Error("node is required!"))}function w(t,e,r,n){if(m(y,"do_post_user("+t+")...."),"0"!==t&&0!==t)return Promise.reject(new Error("invalid ID:"+t));var o=r||e;return o?(t=f.N(t,0),Promise.resolve(o).then(d).then(i).then(l).then(_).then(function(e){return s.do_post_meta(t,e)}).then(d)):Promise.reject(new Error("node is required!"))}function P(t,e,r,n){m(y,"do_delete_user("+t+")....");var o=r||e;return o?(t=f.N(t,0),Promise.resolve(o).then(d).then(i).then(function(e){return s.do_delete_meta(t,e)})):Promise.reject(new Error("node is required!"))}return r};