w-web-api 1.0.42 → 1.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@ import path from 'path'
2
2
  import fs from 'fs'
3
3
  import get from 'lodash-es/get.js'
4
4
  import each from 'lodash-es/each.js'
5
+ import map from 'lodash-es/map.js'
5
6
  import keys from 'lodash-es/keys.js'
6
7
  import j2o from 'wsemi/src/j2o.mjs'
7
8
  import iseobj from 'wsemi/src/iseobj.mjs'
@@ -18,6 +19,7 @@ import strright from 'wsemi/src/strright.mjs'
18
19
  import strdelright from 'wsemi/src/strdelright.mjs'
19
20
  import pm2resolve from 'wsemi/src/pm2resolve.mjs'
20
21
  import b642str from 'wsemi/src/b642str.mjs'
22
+ import ltdtmapping from 'wsemi/src/ltdtmapping.mjs'
21
23
  import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
22
24
  import fsIsFile from 'wsemi/src/fsIsFile.mjs'
23
25
  import replace from 'wsemi/src/replace.mjs'
@@ -378,129 +380,138 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
378
380
  }
379
381
 
380
382
 
381
- //getAPIsList
382
- let getAPIsList = async (query = {}) => {
383
- let rs = await woItems.apis.select(query)
384
- return rs
385
- }
383
+ // //getAPIsList
384
+ // let getAPIsList = async (query = {}) => {
385
+ // let rs = await woItems.apis.select(query)
386
+ // return rs
387
+ // }
386
388
 
387
389
 
388
390
  //parsePayload
389
391
  let parsePayload = async (req) => {
390
392
 
391
- //inp
392
- let inp = get(req, 'payload')
393
+ //payload
394
+ let payload = get(req, 'payload')
393
395
 
394
396
  //to obj
395
- if (isestr(inp)) {
396
- inp = j2o(inp)
397
+ if (isestr(payload)) {
398
+ payload = j2o(payload)
397
399
  }
398
400
 
399
401
  //check
400
- if (!iseobj(inp)) {
401
- console.log('inp', inp)
402
- console.log(`invalid inp from req`)
403
- return Promise.reject(`invalid inp from req`)
402
+ if (!iseobj(payload)) {
403
+ console.log('payload', payload)
404
+ console.log(`invalid payload in req`)
405
+ return Promise.reject(`invalid payload in req`)
404
406
  }
405
407
 
406
408
  //group
407
- let group = get(inp, 'group', '')
409
+ let group = get(payload, 'group', '')
408
410
 
409
411
  //check
410
412
  if (!isestr(group)) {
411
- console.log('inp', inp)
412
- console.log('group', group)
413
- console.log(`invalid group from inp`)
414
- return Promise.reject(`invalid group from inp`)
413
+ console.log('payload', payload)
414
+ console.log(`invalid group in payload`)
415
+ return Promise.reject(`invalid group in payload`)
415
416
  }
416
417
 
417
- //apis
418
- let apis = get(inp, 'apis', [])
418
+ //rows
419
+ let rows = get(payload, 'rows', [])
419
420
 
420
421
  //check
421
- if (!isearr(apis)) {
422
- console.log('inp', inp)
423
- console.log('apis', apis)
424
- console.log(`invalid apis from inp`)
425
- return Promise.reject(`invalid apis from inp`)
422
+ if (!isearr(rows)) {
423
+ console.log('payload', payload)
424
+ console.log(`invalid rows in payload`)
425
+ return Promise.reject(`invalid rows in payload`)
426
426
  }
427
427
 
428
- //偵測b64自動恢復
429
- each(apis, (api, kapi) => {
430
- // console.log(kapi, api.name)
431
- each(api, (v, k) => {
432
- // console.log(k, v)
433
- if (isestr(v)) {
434
- if (strleft(v, 7) === 'base64:') {
435
- // console.log(k, 'get base64')
436
- v = strdelleft(v, 7)
437
- v = b642str(v)
438
- // console.log(v)
439
- apis[kapi][k] = v
440
- }
441
- }
442
- })
443
- })
444
-
445
- //save group
446
- each(apis, (api, kapi) => {
447
- apis[kapi].group = group
448
- })
449
-
450
- //resave
451
- inp = { group, apis }
428
+ //r
429
+ let r = {
430
+ group,
431
+ rows,
432
+ }
452
433
 
453
- return inp
434
+ return r
454
435
  }
455
436
 
456
437
 
457
- //updateAPIs
458
- let updateAPIs = async (params = {}) => {
438
+ // //updateAPIs
439
+ // let updateAPIs = async (inp = {}) => {
459
440
 
460
- //spread params
461
- let { apis: rsApis } = params
462
- // console.log('group', group)
463
- // console.log('rsApis', rsApis)
441
+ // //spread inp
442
+ // let { apis: rsApis } = inp
443
+ // // console.log('group', group)
444
+ // // console.log('rsApis', rsApis)
464
445
 
465
- //save
466
- let r = await woItems.apis.save(rsApis)
446
+ // //save
447
+ // let r = await woItems.apis.save(rsApis)
467
448
 
468
- return r
469
- }
449
+ // return r
450
+ // }
470
451
 
471
452
 
472
- //syncAndReplaceApis
473
- let syncAndReplaceApis = async (params) => {
453
+ //syncAndReplaceTabs
454
+ let syncAndReplaceTabs = async (userId, inp, keyTable) => {
474
455
 
475
456
  //group
476
- let group = get(params, 'group', '')
457
+ let group = get(inp, 'group', '')
477
458
  // console.log('group', group)
478
459
 
479
460
  //check
480
461
  if (!isestr(group)) {
481
- console.log('params', params)
462
+ console.log('inp', inp)
482
463
  console.log('group', group)
483
464
  console.log(`invalid group`)
484
465
  return Promise.reject(`invalid group`)
485
466
  }
486
467
 
487
- //apis
488
- let apis = get(params, 'apis', [])
489
- // console.log('apis', apis)
468
+ //rows
469
+ let rows = get(inp, 'rows', [])
470
+ // console.log('rows', rows)
490
471
 
491
472
  //check
492
- if (!isearr(apis)) {
493
- console.log('params', params)
494
- console.log('apis', apis)
495
- console.log(`invalid apis`)
496
- return Promise.reject(`invalid apis`)
473
+ if (!isearr(rows)) {
474
+ console.log('inp', inp)
475
+ console.log('keyTable', keyTable)
476
+ return Promise.reject(`invalid rows`)
477
+ }
478
+
479
+ //save from
480
+ rows = map(rows, (v, k) => {
481
+ // v.order = k + 1 //order大部分由外部給予, 不能複寫
482
+ v.group = group
483
+ return v
484
+ })
485
+
486
+ //偵測b64自動恢復
487
+ if (keyTable === 'apis') {
488
+ each(rows, (row, krow) => {
489
+ // console.log(kapi, row.name)
490
+ each(row, (v, k) => {
491
+ // console.log(k, v)
492
+ if (isestr(v)) {
493
+ if (strleft(v, 7) === 'base64:') {
494
+ // console.log(k, 'get base64')
495
+ v = strdelleft(v, 7)
496
+ v = b642str(v)
497
+ // console.log(v)
498
+ rows[krow][k] = v
499
+ }
500
+ }
501
+ })
502
+ })
497
503
  }
498
504
 
505
+ //ltdtmapping
506
+ rows = ltdtmapping(rows, ds[keyTable].keys)
507
+ // console.log('ltdtmapping rows', rows)
508
+
499
509
  //delAll group
500
- await woItems.apis.delAll({ group })
510
+ await woItems[keyTable].delAll({ group })
501
511
 
502
512
  //insert
503
- let r = await woItems.apis.insert(apis)
513
+ // let r = await woItems[keyTable].insert(rows)
514
+ let r = await procOrm(userId, keyTable, 'insert', rows) //須使用procOrm才有辦法自動給予相關欄位
504
515
 
505
516
  return r
506
517
  }
@@ -556,7 +567,7 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
556
567
 
557
568
  {
558
569
  method: 'GET',
559
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
570
+ path: '/api/getUserByToken', //未登入主頁時需先檢測token, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
560
571
  handler: async function (req, res) {
561
572
  // console.log('getUserByToken', req)
562
573
 
@@ -565,6 +576,15 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
565
576
  //token
566
577
  let token = get(req, 'query.token', '')
567
578
 
579
+ //check
580
+ if (!isestr(token)) {
581
+ console.log('req.query', get(req, 'query'))
582
+ console.log('token', token)
583
+ console.log('[API]getUserByToken/check token: invalid token')
584
+ console.log(`token does not have permission`)
585
+ return Promise.reject(`token does not have permission`)
586
+ }
587
+
568
588
  //getAndVerifyClientUser
569
589
  let user = await getAndVerifyClientUser(token, 'getUserByToken')
570
590
 
@@ -589,49 +609,112 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
589
609
  return r
590
610
  },
591
611
  },
592
- {
593
- method: 'GET',
594
- path: '/getAPIsList',
595
- handler: async function (req, res) {
596
- // console.log('getAPIsList', req)
597
-
598
- async function core() {
599
-
600
- //token
601
- let token = get(req, 'query.token', '')
602
-
603
- //getAndVerifyClientUser
604
- let user = await getAndVerifyClientUser(token, 'getAPIsList')
605
-
606
- //check
607
- if (!iseobj(user)) {
608
- console.log('token', token)
609
- console.log('[API]getAPIsList/check user: invalid user')
610
- console.log(`token does not have permission`)
611
- return Promise.reject(`token does not have permission`)
612
- }
613
-
614
- //getAPIsList
615
- let r = await getAPIsList({ isActive: 'y' })
616
612
 
617
- return r
618
- }
613
+ // {
614
+ // method: 'GET',
615
+ // path: '/getAPIsList',
616
+ // handler: async function (req, res) {
617
+ // // console.log('getAPIsList', req)
618
+
619
+ // async function core() {
620
+
621
+ // //token
622
+ // let token = get(req, 'query.token', '')
623
+
624
+ // //check
625
+ // if (!isestr(token)) {
626
+ // console.log('req.query', get(req, 'query'))
627
+ // console.log('token', token)
628
+ // console.log('[API]getAPIsList/check token: invalid token')
629
+ // console.log(`token does not have permission`)
630
+ // return Promise.reject(`token does not have permission`)
631
+ // }
632
+
633
+ // //getAndVerifyClientUser
634
+ // let user = await getAndVerifyClientUser(token, 'getAPIsList')
635
+
636
+ // //check
637
+ // if (!iseobj(user)) {
638
+ // console.log('token', token)
639
+ // console.log('[API]getAPIsList/check user: invalid user')
640
+ // console.log(`token does not have permission`)
641
+ // return Promise.reject(`token does not have permission`)
642
+ // }
643
+
644
+ // //getAPIsList
645
+ // let r = await getAPIsList({ isActive: 'y' })
646
+
647
+ // return r
648
+ // }
649
+
650
+ // //pm2resolve core
651
+ // let r = await pm2resolve(core)()
652
+ // if (isErr(r.msg)) {
653
+ // r.msg = r.msg.message
654
+ // }
655
+ // // console.log('getAPIsList', r)
656
+
657
+ // return r
658
+ // },
659
+ // },
619
660
 
620
- //pm2resolve core
621
- let r = await pm2resolve(core)()
622
- if (isErr(r.msg)) {
623
- r.msg = r.msg.message
624
- }
625
- // console.log('getAPIsList', r)
661
+ // {
662
+ // method: 'POST',
663
+ // path: '/updateAPIs',
664
+ // handler: async function (req, res) {
665
+ // // console.log('updateAPIs', req)
666
+ // // console.log('payload', req.payload)
667
+
668
+ // async function core() {
669
+
670
+ // //token
671
+ // let token = get(req, 'query.token', '')
672
+
673
+ // //check
674
+ // if (!isestr(token)) {
675
+ // console.log('req.query', get(req, 'query'))
676
+ // console.log('token', token)
677
+ // console.log('[API]updateAPIs/check token: invalid token')
678
+ // console.log(`token does not have permission`)
679
+ // return Promise.reject(`token does not have permission`)
680
+ // }
681
+
682
+ // //getAndVerifyClientUser
683
+ // let user = await getAndVerifyClientUser(token, 'updateAPIs')
684
+
685
+ // //check
686
+ // if (!iseobj(user)) {
687
+ // console.log('token', token)
688
+ // console.log('[API]updateAPIs/check user: invalid user')
689
+ // console.log(`token does not have permission`)
690
+ // return Promise.reject(`token does not have permission`)
691
+ // }
692
+
693
+ // //parsePayload
694
+ // let inp = await parsePayload(req)
695
+
696
+ // //updateAPIs
697
+ // let r = await updateAPIs(inp)
698
+
699
+ // return r
700
+ // }
701
+
702
+ // //pm2resolve core
703
+ // let r = await pm2resolve(core)()
704
+ // if (isErr(r.msg)) {
705
+ // r.msg = r.msg.message
706
+ // }
707
+ // // console.log('updateAPIs', r)
708
+
709
+ // return r
710
+ // },
711
+ // },
626
712
 
627
- return r
628
- },
629
- },
630
713
  {
631
714
  method: 'POST',
632
- path: '/updateAPIs',
715
+ path: '/syncAndReplaceTabs',
633
716
  handler: async function (req, res) {
634
- // console.log('updateAPIs', req)
717
+ // console.log('syncAndReplaceTabs', req)
635
718
  // console.log('payload', req.payload)
636
719
 
637
720
  async function core() {
@@ -639,55 +722,53 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
639
722
  //token
640
723
  let token = get(req, 'query.token', '')
641
724
 
642
- //getAndVerifyClientUser
643
- let user = await getAndVerifyClientUser(token, 'updateAPIs')
644
-
645
725
  //check
646
- if (!iseobj(user)) {
726
+ if (!isestr(token)) {
727
+ console.log('req.query', get(req, 'query'))
647
728
  console.log('token', token)
648
- console.log('[API]updateAPIs/check user: invalid user')
729
+ console.log('[API]syncAndReplaceTabs/check token: invalid token')
649
730
  console.log(`token does not have permission`)
650
731
  return Promise.reject(`token does not have permission`)
651
732
  }
652
733
 
653
- //parsePayload
654
- let inp = await parsePayload(req)
655
-
656
- //updateAPIs
657
- let r = await updateAPIs(inp)
734
+ //keyTable
735
+ let keyTable = get(req, 'query.keyTable', '')
658
736
 
659
- return r
660
- }
661
-
662
- //pm2resolve core
663
- let r = await pm2resolve(core)()
664
- if (isErr(r.msg)) {
665
- r.msg = r.msg.message
666
- }
667
- // console.log('updateAPIs', r)
668
-
669
- return r
670
- },
671
- },
672
- {
673
- method: 'POST',
674
- path: '/syncAndReplaceApis',
675
- handler: async function (req, res) {
676
- // console.log('syncAndReplaceApis', req)
677
- // console.log('payload', req.payload)
678
-
679
- async function core() {
737
+ //check
738
+ if (!isestr(keyTable)) {
739
+ console.log('req.query', get(req, 'query'))
740
+ console.log('keyTable', keyTable)
741
+ console.log('[API]syncAndReplaceTabs/check keyTable: invalid keyTable')
742
+ console.log(`token does not have permission`)
743
+ return Promise.reject(`token does not have permission`)
744
+ }
680
745
 
681
- //token
682
- let token = get(req, 'query.token', '')
746
+ //check keyTable
747
+ let allowedTables = ['apis']
748
+ if (!allowedTables.includes(keyTable)) {
749
+ console.log('[API]syncAndReplaceTabs/check keyTable: unexpected keyTable', keyTable)
750
+ return Promise.reject(`invalid keyTable: ${keyTable}`)
751
+ }
683
752
 
684
753
  //getAndVerifyAppUser
685
- let user = await getAndVerifyAppUser(token, 'syncAndReplaceApis')
754
+ let user = await getAndVerifyAppUser(token, 'syncAndReplaceTabs')
686
755
 
687
756
  //check
688
757
  if (!iseobj(user)) {
689
758
  console.log('token', token)
690
- console.log('[API]syncAndReplaceApis/check user: invalid user')
759
+ console.log('[API]syncAndReplaceTabs/check user: invalid user')
760
+ console.log(`token does not have permission`)
761
+ return Promise.reject(`token does not have permission`)
762
+ }
763
+
764
+ //userId
765
+ let userId = get(user, 'id', '')
766
+
767
+ //check userId
768
+ if (!isestr(userId)) {
769
+ console.log('token', token)
770
+ console.log('user', user)
771
+ console.log('[API]syncAndReplaceTabs/check userId: invalid userId')
691
772
  console.log(`token does not have permission`)
692
773
  return Promise.reject(`token does not have permission`)
693
774
  }
@@ -695,8 +776,8 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
695
776
  //parsePayload
696
777
  let inp = await parsePayload(req)
697
778
 
698
- //syncAndReplaceApis
699
- let r = await syncAndReplaceApis(inp)
779
+ //syncAndReplaceTabs
780
+ let r = await syncAndReplaceTabs(userId, inp, keyTable)
700
781
 
701
782
  return r
702
783
  }
@@ -706,11 +787,12 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
706
787
  if (isErr(r.msg)) {
707
788
  r.msg = r.msg.message
708
789
  }
709
- // console.log('syncAndReplaceApis', r)
790
+ // console.log('syncAndReplaceTabs', r)
710
791
 
711
792
  return r
712
793
  },
713
794
  },
795
+
714
796
  ]
715
797
 
716
798
 
@@ -772,11 +854,10 @@ function WWebApi(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser,
772
854
 
773
855
  getWebInfor,
774
856
 
775
- getAPIsList: (userId, query = {}) => {
776
- return getAPIsList(query)
777
- },
778
-
779
- // updateApis: (userId, rows) => {
857
+ // getAPIsList: (userId, query = {}) => { //待提供api管理系統界面使用
858
+ // return getAPIsList(query)
859
+ // },
860
+ // updateApis: (userId, rows) => { //待提供api管理系統界面使用
780
861
  // return updateApis(rows)
781
862
  // },
782
863
 
@@ -0,0 +1,89 @@
1
+ import axios from 'axios'
2
+ import get from 'lodash-es/get.js'
3
+ import genPm from 'wsemi/src/genPm.mjs'
4
+ import haskey from 'wsemi/src/haskey.mjs'
5
+ import ltdtpick from 'wsemi/src/ltdtpick.mjs'
6
+
7
+
8
+ //kpKs
9
+ let ks_apis = [
10
+ 'id', //'id-for-apis-pets-guineapigs-1'
11
+ 'order', //0
12
+ 'name', //'取得天竺鼠清單資訊'
13
+ 'description', //'取得天竺鼠清單資訊'
14
+ 'url', //指api網址, 例如 http://localhost:11005/getDogsList
15
+ 'method', //'get'
16
+ 'version', //'v1'
17
+ 'group', //'寵物'
18
+ 'levels', //'寵物.天竺鼠'
19
+ 'keywords', //'pets;guineapigs'
20
+ 'state', //'ok'
21
+ 'creator', //'pets-system'
22
+ 'dataSource', //'pets-data'
23
+ 'mdInputParams', //輸入方式說明, markdown格式
24
+ 'inputExample', //輸入範例數據
25
+ 'mdOutputParams', //輸出方式說明, markdown格式
26
+ 'outputExample', //輸出範例數據, json格式
27
+ ]
28
+ let kpKs = {
29
+ ks_apis,
30
+ }
31
+
32
+
33
+ async function provideTabs(url, keyTable, group, rows) {
34
+ //url: 伺服器提供的接入網址, 例如 http://localhost:11005/syncAndReplaceTabs?token={token}&keyTable={keyTable}
35
+ //keyTable: 資料表名
36
+ //group: 指陣列數據所屬群組
37
+ //rows: 陣列數據
38
+
39
+ //pm
40
+ let pm = genPm()
41
+
42
+ //ks
43
+ if (!haskey(kpKs, `ks_${keyTable}`)) {
44
+ return Promise.reject(`invalid keyTable[${keyTable}]`)
45
+ }
46
+ let ks = kpKs[`ks_${keyTable}`]
47
+ // console.log('ks', ks)
48
+
49
+ //ltdtpick
50
+ rows = ltdtpick(rows, ks)
51
+ // console.log('rows', rows)
52
+
53
+ //rin
54
+ let rin = {
55
+ group,
56
+ rows,
57
+ }
58
+ // console.log('rin', rin)
59
+
60
+ //axios
61
+ await axios({
62
+ method: 'post',
63
+ url,
64
+ headers: { 'Content-Type': 'application/json; charset=utf-8' },
65
+ data: rin,
66
+ })
67
+ .then((res) => {
68
+ // console.log('then', res)
69
+ let data = get(res, 'data')
70
+ let state = get(data, 'state')
71
+ let msg = get(data, 'msg', '')
72
+ if (state === 'success') {
73
+ pm.resolve(msg)
74
+ }
75
+ else {
76
+ pm.reject(msg)
77
+ }
78
+
79
+ })
80
+ .catch((err) => {
81
+ // console.log('catch', err)
82
+ pm.reject(err)
83
+ })
84
+
85
+ return pm
86
+ }
87
+
88
+
89
+ export default provideTabs
package/tableTags.json CHANGED
@@ -1 +1 @@
1
- {"apis":"2025-07-14T17:58:41+08:00|C6dsva"}
1
+ {"apis":"2025-07-20T22:07:21+08:00|DSiCoa"}