@xuda.io/account_module 1.2.1256 → 1.2.1257

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.
Files changed (2) hide show
  1. package/index.mjs +410 -408
  2. package/package.json +1 -1
package/index.mjs CHANGED
@@ -1601,323 +1601,6 @@ const get_user_contact = async function (uid, uid_query) {
1601
1601
  return doc;
1602
1602
  };
1603
1603
 
1604
- export const get_contacts = async function (req) {
1605
- const { _id, uid, name, limit, skip, bookmark, search, filter_type = 'all', contact_id } = req;
1606
-
1607
- const account_profile_info = await get_active_account_profile_info(uid);
1608
- if (_id) {
1609
- let data = await db_module.get_couch_doc('xuda_contacts', _id);
1610
- return data;
1611
- }
1612
-
1613
- let { with_requests } = req;
1614
- var opt = {
1615
- selector: {
1616
- docType: 'contact',
1617
- uid: account_profile_info.uid,
1618
- stat: { $lt: 4 },
1619
- },
1620
- limit: limit || 9999,
1621
- skip: skip || 0,
1622
- sort: [{ ts: 'desc' }],
1623
- };
1624
-
1625
- switch (filter_type) {
1626
- case 'archived': {
1627
- opt.selector.stat = 5;
1628
- break;
1629
- }
1630
- case 'shared': {
1631
- opt.selector.shared_from_uid = { $gt: null };
1632
- break;
1633
- }
1634
-
1635
- case 'pinned': {
1636
- opt.selector.pinned = true;
1637
- break;
1638
- }
1639
-
1640
- case 'online': {
1641
- opt.limit = 9999;
1642
- break;
1643
- }
1644
-
1645
- default:
1646
- with_requests = true;
1647
- break;
1648
- }
1649
-
1650
- if (_id) {
1651
- opt.selector._id = _id;
1652
- }
1653
-
1654
- if (contact_id) {
1655
- opt.selector._id = contact_id;
1656
- }
1657
-
1658
- if (typeof name !== 'undefined') {
1659
- opt.selector.name = { $regex: `(?i)${name}` };
1660
- }
1661
-
1662
- if (typeof search !== 'undefined') {
1663
- opt.selector['$or'] = [
1664
- {
1665
- name: {
1666
- $regex: `(?i)${search}`,
1667
- },
1668
- },
1669
- {
1670
- email: {
1671
- $regex: `(?i)${search}`,
1672
- },
1673
- },
1674
- ];
1675
- }
1676
-
1677
- if (bookmark && bookmark !== 'nil') {
1678
- opt.bookmark = bookmark;
1679
- }
1680
-
1681
- let contacts = { docs: [], total_docs: 0 };
1682
-
1683
- if (filter_type !== 'pending') {
1684
- contacts = await db_module.find_couch_query('xuda_contacts', opt);
1685
- if (!limit || contact_id) {
1686
- contacts.total_docs = contacts.docs.length;
1687
- } else {
1688
- delete opt.sort;
1689
- delete opt.skip;
1690
- opt.limit = 9999;
1691
- opt.fields = ['_id'];
1692
-
1693
- const counter = await db_module.find_couch_query('xuda_contacts', opt);
1694
- contacts.total_docs = counter.docs.length;
1695
- }
1696
- }
1697
-
1698
- let requests_to = { docs: [], total_docs: 0 };
1699
- let requests_from = { docs: [], total_docs: 0 };
1700
- let shared_from = { docs: [], total_docs: 0 };
1701
-
1702
- let contact_docs = { docs: [], total_docs: contacts.total_docs };
1703
- for await (let doc of contacts.docs) {
1704
- const ret_to = requests_to.docs.find((e) => {
1705
- return e.contact_uid === doc.contact_uid;
1706
- });
1707
- if (ret_to) continue;
1708
-
1709
- const ret_from = requests_from.docs.find((e) => {
1710
- return e.contact_uid === doc.contact_uid;
1711
- });
1712
- if (ret_from) continue;
1713
-
1714
- doc = await get_contact_info(uid, doc);
1715
-
1716
- if (filter_type === 'online') {
1717
- if (!doc.online) continue;
1718
- }
1719
-
1720
- contact_docs.docs.push(doc);
1721
- }
1722
-
1723
- if (!contact_id && with_requests) {
1724
- if (filter_type === 'pending') {
1725
- ////// TO - OUT
1726
- requests_to.docs = await get_pending_contact_out(uid);
1727
- requests_to.total_docs = requests_to.docs.length;
1728
-
1729
- ////// FROM - IN
1730
- requests_from.docs = await get_pending_contact_in(uid);
1731
- requests_from.total_docs = requests_from.docs.length;
1732
- shared_from.docs = await get_pending_share_contact_in(uid);
1733
- shared_from.total_docs = shared_from.docs.length;
1734
- }
1735
- }
1736
-
1737
- return {
1738
- code: 1,
1739
- data: {
1740
- docs: [...shared_from.docs, ...requests_from.docs, ...requests_to.docs, ...contact_docs.docs],
1741
- total_docs: shared_from.total_docs + requests_from.total_docs + requests_to.total_docs + contact_docs.total_docs,
1742
- },
1743
- };
1744
- };
1745
-
1746
- export const archive_contact = async function (req) {
1747
- const { contact_id } = req;
1748
- try {
1749
- const team_module = await import(`${module_path}/team_module/index.mjs`);
1750
- await team_module.validate_share_exist(uid, 'contact', contact_id);
1751
-
1752
- var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
1753
-
1754
- if (contact_doc.uid !== uid && contact_doc?.account_profile_info?.uid !== uid) {
1755
- throw new Error('Operation not allowed');
1756
- }
1757
-
1758
- contact_doc.stat = 5;
1759
- contact_doc.stat_ts = Date.now();
1760
- contact_doc.stat_reason = 'archived by the user';
1761
-
1762
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1763
-
1764
- return contact_save_ret;
1765
- } catch (err) {
1766
- return {
1767
- code: -22,
1768
- data: err.message,
1769
- };
1770
- }
1771
- };
1772
-
1773
- export const delete_contact = async function (req, job_id, headers) {
1774
- const { contact_id } = req;
1775
- try {
1776
- var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
1777
- if (contact_doc.stat !== 5) {
1778
- throw new Error('A document can only be deleted after it has been archived');
1779
- }
1780
- contact_doc.stat = 4;
1781
- contact_doc.stat_ts = Date.now();
1782
- contact_doc.stat_reason = 'deleted by the user';
1783
-
1784
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1785
- const ai_module = await import(`${module_path}/ai_module/index.mjs`);
1786
- ai_module.delete_depended_chats(uid, contact_id);
1787
- return contact_save_ret;
1788
- } catch (err) {
1789
- return {
1790
- code: -22,
1791
- data: err.message,
1792
- };
1793
- }
1794
- };
1795
-
1796
- export const unarchive_contact = async function (req) {
1797
- const { contact_id } = req;
1798
- try {
1799
- var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
1800
-
1801
- if (contact_doc.stat !== 5) {
1802
- throw new Error('contact is not archived');
1803
- }
1804
-
1805
- contact_doc.stat = 3;
1806
- contact_doc.stat_ts = Date.now();
1807
- contact_doc.stat_reason = 'archived by the user';
1808
-
1809
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1810
-
1811
- return contact_save_ret;
1812
- } catch (err) {
1813
- return {
1814
- code: -22,
1815
- data: err.message,
1816
- };
1817
- }
1818
- };
1819
-
1820
- export const unfriend_contact = async function (req) {
1821
- const { contact_id } = req;
1822
- try {
1823
- const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
1824
- if (contact_ret.code < 0) {
1825
- throw new Error(contact_ret.data);
1826
- }
1827
- var contact_doc = contact_ret.data;
1828
-
1829
- if (!contact_doc.team_req_id) {
1830
- throw new Error('no friend relationship found');
1831
- }
1832
- let req_doc = await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
1833
- req_doc.team_req_stat = 4;
1834
- req_doc.team_req_stat_desc = 'unfriend by the user';
1835
- await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
1836
-
1837
- contact_doc.team_req_id = null;
1838
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1839
-
1840
- const req_save_ret = await db_module.save_couch_doc('xuda_team', req_doc);
1841
-
1842
- return req_save_ret;
1843
- } catch (err) {
1844
- return {
1845
- code: -21,
1846
- data: err.message,
1847
- };
1848
- }
1849
- };
1850
-
1851
- export const pin_contact = async function (req) {
1852
- const { uid, contact_id } = req;
1853
- try {
1854
- const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
1855
- if (contact_ret.code < 0) {
1856
- return contact_ret;
1857
- }
1858
- var contact_doc = contact_ret.data;
1859
- contact_doc.pinned = true;
1860
-
1861
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1862
-
1863
- global[`_account_module_ch`].sendToQueue(
1864
- 'ws_dashboard_module',
1865
- Buffer.from(
1866
- JSON.stringify({
1867
- method: 'emit_message_to_dashboard',
1868
- data: {
1869
- service: 'contact_pinned',
1870
- to: [uid],
1871
- data: await get_contact_info(uid, null, contact_id),
1872
- },
1873
- }),
1874
- ),
1875
- );
1876
-
1877
- return contact_save_ret;
1878
- } catch (err) {
1879
- return {
1880
- code: -24,
1881
- data: err.message,
1882
- };
1883
- }
1884
- };
1885
-
1886
- export const unpin_contact = async function (req) {
1887
- const { contact_id, uid } = req;
1888
- try {
1889
- const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
1890
- if (contact_ret.code < 0) {
1891
- return contact_ret;
1892
- }
1893
- var contact_doc = contact_ret.data;
1894
- contact_doc.pinned = false;
1895
-
1896
- const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
1897
-
1898
- global[`_account_module_ch`].sendToQueue(
1899
- 'ws_dashboard_module',
1900
- Buffer.from(
1901
- JSON.stringify({
1902
- method: 'emit_message_to_dashboard',
1903
- data: {
1904
- service: 'contact_unpinned',
1905
- to: [uid],
1906
- data: await get_contact_info(uid, null, contact_id),
1907
- },
1908
- }),
1909
- ),
1910
- );
1911
-
1912
- return contact_save_ret;
1913
- } catch (err) {
1914
- return {
1915
- code: -24,
1916
- data: err.message,
1917
- };
1918
- }
1919
- };
1920
-
1921
1604
  // invite user
1922
1605
 
1923
1606
  // const contact_ret = await db_module.get_couch_view_raw(
@@ -2826,36 +2509,301 @@ export const get_account_profiles = async function (req) {
2826
2509
  let profiles = { docs: [], total_docs: 0 };
2827
2510
 
2828
2511
  if (filter_type !== 'pending') {
2829
- profiles = await db_module.find_couch_query('xuda_accounts', opt);
2830
- if (!limit || profile_id) {
2831
- profiles.total_docs = profiles.docs.length;
2512
+ profiles = await db_module.find_couch_query('xuda_accounts', opt);
2513
+ if (!limit || profile_id) {
2514
+ profiles.total_docs = profiles.docs.length;
2515
+ } else {
2516
+ delete opt.sort;
2517
+ delete opt.skip;
2518
+ opt.limit = 9999;
2519
+ opt.fields = ['_id'];
2520
+
2521
+ const counter = await db_module.find_couch_query('xuda_accounts', opt);
2522
+ profiles.total_docs = counter.docs.length;
2523
+ }
2524
+ }
2525
+
2526
+ let shared_from = { docs: [], total_docs: 0 };
2527
+
2528
+ let profile_docs = { docs: [], total_docs: profiles.total_docs };
2529
+ for await (let doc of profiles.docs) {
2530
+ doc = await get_account_profile_info(uid, doc);
2531
+ if (doc.main) {
2532
+ profile_docs.docs.unshift(doc);
2533
+ } else {
2534
+ profile_docs.docs.push(doc);
2535
+ }
2536
+ }
2537
+
2538
+ if (!profile_id) {
2539
+ if (filter_type === 'pending') {
2540
+ ////// FROM - IN
2541
+ shared_from.docs = await get_pending_share_profile_in(uid);
2542
+ shared_from.total_docs = shared_from.docs.length;
2543
+ }
2544
+ }
2545
+
2546
+ return {
2547
+ code: 1,
2548
+ data: {
2549
+ docs: [...shared_from.docs, ...profile_docs.docs],
2550
+ total_docs: shared_from.total_docs + profile_docs.total_docs,
2551
+ },
2552
+ };
2553
+ };
2554
+
2555
+ export const archive_account_profile = async function (req) {
2556
+ const { uid, profile_id } = req;
2557
+ try {
2558
+ const team_module = await import(`${module_path}/team_module/index.mjs`);
2559
+ await team_module.validate_share_exist(uid, 'account_profile', profile_id);
2560
+
2561
+ var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2562
+
2563
+ if (account_profile_doc.main) {
2564
+ throw new Error('reserve');
2565
+ }
2566
+ // if (!account_profile_doc.team_req_id) {
2567
+ account_profile_doc.stat = 5;
2568
+ account_profile_doc.stat_ts = Date.now();
2569
+ account_profile_doc.stat_reason = 'archived by the user';
2570
+
2571
+ const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2572
+
2573
+ return account_profile_save_ret;
2574
+ // } else {
2575
+ // return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 5);
2576
+ // }
2577
+ } catch (err) {
2578
+ return {
2579
+ code: -22,
2580
+ data: err.message,
2581
+ };
2582
+ }
2583
+ };
2584
+
2585
+ export const delete_account_profile = async function (req, job_id, headers) {
2586
+ const { profile_id } = req;
2587
+ try {
2588
+ var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2589
+ if (account_profile_doc.stat !== 5) {
2590
+ throw new Error('A document can only be deleted after it has been archived');
2591
+ }
2592
+ account_profile_doc.stat = 4;
2593
+ account_profile_doc.stat_ts = Date.now();
2594
+ account_profile_doc.stat_reason = 'deleted by the user';
2595
+
2596
+ const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2597
+ const ai_module = await import(`${module_path}/ai_module/index.mjs`);
2598
+ ai_module.delete_depended_chats(uid, profile_id);
2599
+ return account_profile_save_ret;
2600
+ } catch (err) {
2601
+ return {
2602
+ code: -22,
2603
+ data: err.message,
2604
+ };
2605
+ }
2606
+ };
2607
+
2608
+ export const unarchive_account_profile = async function (req) {
2609
+ const { profile_id } = req;
2610
+ try {
2611
+ const team_module = await import(`${module_path}/team_module/index.mjs`);
2612
+ var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2613
+
2614
+ if (account_profile_doc.stat !== 5) {
2615
+ throw new Error('account profile is not archived');
2616
+ }
2617
+ if (!account_profile_doc.team_req_id) {
2618
+ account_profile_doc.stat = 3;
2619
+ account_profile_doc.stat_ts = Date.now();
2620
+ account_profile_doc.stat_reason = 'archived by the user';
2621
+
2622
+ const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2623
+
2624
+ return account_profile_save_ret;
2625
+ } else {
2626
+ return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 3);
2627
+ }
2628
+ } catch (err) {
2629
+ return {
2630
+ code: -22,
2631
+ data: err.message,
2632
+ };
2633
+ }
2634
+ };
2635
+
2636
+ // export const unfriend_account_profile = async function (req) {
2637
+ // const { profile_id } = req;
2638
+ // try {
2639
+ //
2640
+ // } catch (err) {
2641
+ // return {
2642
+ // code: -21,
2643
+ // data: err.message,
2644
+ // };
2645
+ // }
2646
+ // };
2647
+
2648
+ // export const validate_account_asset_change = async function (req) {
2649
+ // const { profile_id } = req;
2650
+ // try {
2651
+ // const team_module = await import(`${module_path}/team_module/index.mjs`);
2652
+ // var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2653
+
2654
+ // if (account_profile_doc.stat !== 5) {
2655
+ // throw new Error('account profile is not archived');
2656
+ // }
2657
+ // if (!account_profile_doc.team_req_id) {
2658
+ // account_profile_doc.stat = 3;
2659
+ // account_profile_doc.stat_ts = Date.now();
2660
+ // account_profile_doc.stat_reason = 'archived by the user';
2661
+
2662
+ // const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2663
+
2664
+ // return account_profile_save_ret;
2665
+ // } else {
2666
+ // return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 3);
2667
+ // }
2668
+ // } catch (err) {
2669
+ // return {
2670
+ // code: -22,
2671
+ // data: err.message,
2672
+ // };
2673
+ // }
2674
+ // };
2675
+
2676
+ //////// CONTACTS //////////////
2677
+
2678
+ export const get_contacts = async function (req) {
2679
+ const { _id, uid, name, limit, skip, bookmark, search, filter_type = 'all', contact_id } = req;
2680
+
2681
+ const account_profile_info = await get_active_account_profile_info(uid);
2682
+ if (_id) {
2683
+ let data = await db_module.get_couch_doc('xuda_contacts', _id);
2684
+ return data;
2685
+ }
2686
+
2687
+ let { with_requests } = req;
2688
+ var opt = {
2689
+ selector: {
2690
+ docType: 'contact',
2691
+ uid: account_profile_info.uid,
2692
+ stat: { $lt: 4 },
2693
+ },
2694
+ limit: limit || 9999,
2695
+ skip: skip || 0,
2696
+ sort: [{ ts: 'desc' }],
2697
+ };
2698
+
2699
+ switch (filter_type) {
2700
+ case 'archived': {
2701
+ opt.selector.stat = 5;
2702
+ break;
2703
+ }
2704
+ case 'shared': {
2705
+ opt.selector.shared_from_uid = { $gt: null };
2706
+ break;
2707
+ }
2708
+
2709
+ case 'pinned': {
2710
+ opt.selector.pinned = true;
2711
+ break;
2712
+ }
2713
+
2714
+ case 'online': {
2715
+ opt.limit = 9999;
2716
+ break;
2717
+ }
2718
+
2719
+ default:
2720
+ with_requests = true;
2721
+ break;
2722
+ }
2723
+
2724
+ if (_id) {
2725
+ opt.selector._id = _id;
2726
+ }
2727
+
2728
+ if (contact_id) {
2729
+ opt.selector._id = contact_id;
2730
+ }
2731
+
2732
+ if (typeof name !== 'undefined') {
2733
+ opt.selector.name = { $regex: `(?i)${name}` };
2734
+ }
2735
+
2736
+ if (typeof search !== 'undefined') {
2737
+ opt.selector['$or'] = [
2738
+ {
2739
+ name: {
2740
+ $regex: `(?i)${search}`,
2741
+ },
2742
+ },
2743
+ {
2744
+ email: {
2745
+ $regex: `(?i)${search}`,
2746
+ },
2747
+ },
2748
+ ];
2749
+ }
2750
+
2751
+ if (bookmark && bookmark !== 'nil') {
2752
+ opt.bookmark = bookmark;
2753
+ }
2754
+
2755
+ let contacts = { docs: [], total_docs: 0 };
2756
+
2757
+ if (filter_type !== 'pending') {
2758
+ contacts = await db_module.find_couch_query('xuda_contacts', opt);
2759
+ if (!limit || contact_id) {
2760
+ contacts.total_docs = contacts.docs.length;
2832
2761
  } else {
2833
2762
  delete opt.sort;
2834
2763
  delete opt.skip;
2835
2764
  opt.limit = 9999;
2836
2765
  opt.fields = ['_id'];
2837
2766
 
2838
- const counter = await db_module.find_couch_query('xuda_accounts', opt);
2839
- profiles.total_docs = counter.docs.length;
2767
+ const counter = await db_module.find_couch_query('xuda_contacts', opt);
2768
+ contacts.total_docs = counter.docs.length;
2840
2769
  }
2841
2770
  }
2842
2771
 
2772
+ let requests_to = { docs: [], total_docs: 0 };
2773
+ let requests_from = { docs: [], total_docs: 0 };
2843
2774
  let shared_from = { docs: [], total_docs: 0 };
2844
2775
 
2845
- let profile_docs = { docs: [], total_docs: profiles.total_docs };
2846
- for await (let doc of profiles.docs) {
2847
- doc = await get_account_profile_info(uid, doc);
2848
- if (doc.main) {
2849
- profile_docs.docs.unshift(doc);
2850
- } else {
2851
- profile_docs.docs.push(doc);
2776
+ let contact_docs = { docs: [], total_docs: contacts.total_docs };
2777
+ for await (let doc of contacts.docs) {
2778
+ const ret_to = requests_to.docs.find((e) => {
2779
+ return e.contact_uid === doc.contact_uid;
2780
+ });
2781
+ if (ret_to) continue;
2782
+
2783
+ const ret_from = requests_from.docs.find((e) => {
2784
+ return e.contact_uid === doc.contact_uid;
2785
+ });
2786
+ if (ret_from) continue;
2787
+
2788
+ doc = await get_contact_info(uid, doc);
2789
+
2790
+ if (filter_type === 'online') {
2791
+ if (!doc.online) continue;
2852
2792
  }
2793
+
2794
+ contact_docs.docs.push(doc);
2853
2795
  }
2854
2796
 
2855
- if (!profile_id) {
2797
+ if (!contact_id && with_requests) {
2856
2798
  if (filter_type === 'pending') {
2799
+ ////// TO - OUT
2800
+ requests_to.docs = await get_pending_contact_out(uid);
2801
+ requests_to.total_docs = requests_to.docs.length;
2802
+
2857
2803
  ////// FROM - IN
2858
- shared_from.docs = await get_pending_share_profile_in(uid);
2804
+ requests_from.docs = await get_pending_contact_in(uid);
2805
+ requests_from.total_docs = requests_from.docs.length;
2806
+ shared_from.docs = await get_pending_share_contact_in(uid);
2859
2807
  shared_from.total_docs = shared_from.docs.length;
2860
2808
  }
2861
2809
  }
@@ -2863,34 +2811,31 @@ export const get_account_profiles = async function (req) {
2863
2811
  return {
2864
2812
  code: 1,
2865
2813
  data: {
2866
- docs: [...shared_from.docs, ...profile_docs.docs],
2867
- total_docs: shared_from.total_docs + profile_docs.total_docs,
2814
+ docs: [...shared_from.docs, ...requests_from.docs, ...requests_to.docs, ...contact_docs.docs],
2815
+ total_docs: shared_from.total_docs + requests_from.total_docs + requests_to.total_docs + contact_docs.total_docs,
2868
2816
  },
2869
2817
  };
2870
2818
  };
2871
2819
 
2872
- export const archive_account_profile = async function (req) {
2873
- const { uid, profile_id } = req;
2820
+ export const archive_contact = async function (req) {
2821
+ const { contact_id } = req;
2874
2822
  try {
2875
2823
  const team_module = await import(`${module_path}/team_module/index.mjs`);
2876
- await team_module.validate_share_exist(uid, 'account_profile', profile_id);
2824
+ await team_module.validate_share_exist(uid, 'contact', contact_id);
2877
2825
 
2878
- var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2826
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2879
2827
 
2880
- if (account_profile_doc.main) {
2881
- throw new Error('reserve');
2828
+ if (contact_doc.uid !== uid && contact_doc?.account_profile_info?.uid !== uid) {
2829
+ throw new Error('Operation not allowed');
2882
2830
  }
2883
- // if (!account_profile_doc.team_req_id) {
2884
- account_profile_doc.stat = 5;
2885
- account_profile_doc.stat_ts = Date.now();
2886
- account_profile_doc.stat_reason = 'archived by the user';
2887
2831
 
2888
- const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2832
+ contact_doc.stat = 5;
2833
+ contact_doc.stat_ts = Date.now();
2834
+ contact_doc.stat_reason = 'archived by the user';
2889
2835
 
2890
- return account_profile_save_ret;
2891
- // } else {
2892
- // return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 5);
2893
- // }
2836
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2837
+
2838
+ return contact_save_ret;
2894
2839
  } catch (err) {
2895
2840
  return {
2896
2841
  code: -22,
@@ -2899,21 +2844,21 @@ export const archive_account_profile = async function (req) {
2899
2844
  }
2900
2845
  };
2901
2846
 
2902
- export const delete_account_profile = async function (req, job_id, headers) {
2903
- const { profile_id } = req;
2847
+ export const delete_contact = async function (req, job_id, headers) {
2848
+ const { contact_id } = req;
2904
2849
  try {
2905
- var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2906
- if (account_profile_doc.stat !== 5) {
2850
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2851
+ if (contact_doc.stat !== 5) {
2907
2852
  throw new Error('A document can only be deleted after it has been archived');
2908
2853
  }
2909
- account_profile_doc.stat = 4;
2910
- account_profile_doc.stat_ts = Date.now();
2911
- account_profile_doc.stat_reason = 'deleted by the user';
2854
+ contact_doc.stat = 4;
2855
+ contact_doc.stat_ts = Date.now();
2856
+ contact_doc.stat_reason = 'deleted by the user';
2912
2857
 
2913
- const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2858
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2914
2859
  const ai_module = await import(`${module_path}/ai_module/index.mjs`);
2915
- ai_module.delete_depended_chats(uid, profile_id);
2916
- return account_profile_save_ret;
2860
+ ai_module.delete_depended_chats(uid, contact_id);
2861
+ return contact_save_ret;
2917
2862
  } catch (err) {
2918
2863
  return {
2919
2864
  code: -22,
@@ -2922,26 +2867,22 @@ export const delete_account_profile = async function (req, job_id, headers) {
2922
2867
  }
2923
2868
  };
2924
2869
 
2925
- export const unarchive_account_profile = async function (req) {
2926
- const { profile_id } = req;
2870
+ export const unarchive_contact = async function (req) {
2871
+ const { contact_id } = req;
2927
2872
  try {
2928
- const team_module = await import(`${module_path}/team_module/index.mjs`);
2929
- var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2873
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2930
2874
 
2931
- if (account_profile_doc.stat !== 5) {
2932
- throw new Error('account profile is not archived');
2875
+ if (contact_doc.stat !== 5) {
2876
+ throw new Error('contact is not archived');
2933
2877
  }
2934
- if (!account_profile_doc.team_req_id) {
2935
- account_profile_doc.stat = 3;
2936
- account_profile_doc.stat_ts = Date.now();
2937
- account_profile_doc.stat_reason = 'archived by the user';
2938
2878
 
2939
- const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2879
+ contact_doc.stat = 3;
2880
+ contact_doc.stat_ts = Date.now();
2881
+ contact_doc.stat_reason = 'archived by the user';
2940
2882
 
2941
- return account_profile_save_ret;
2942
- } else {
2943
- return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 3);
2944
- }
2883
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2884
+
2885
+ return contact_save_ret;
2945
2886
  } catch (err) {
2946
2887
  return {
2947
2888
  code: -22,
@@ -2950,42 +2891,103 @@ export const unarchive_account_profile = async function (req) {
2950
2891
  }
2951
2892
  };
2952
2893
 
2953
- // export const unfriend_account_profile = async function (req) {
2954
- // const { profile_id } = req;
2955
- // try {
2956
- //
2957
- // } catch (err) {
2958
- // return {
2959
- // code: -21,
2960
- // data: err.message,
2961
- // };
2962
- // }
2963
- // };
2894
+ export const unfriend_contact = async function (req) {
2895
+ const { contact_id } = req;
2896
+ try {
2897
+ const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
2898
+ if (contact_ret.code < 0) {
2899
+ throw new Error(contact_ret.data);
2900
+ }
2901
+ var contact_doc = contact_ret.data;
2964
2902
 
2965
- // export const validate_account_asset_change = async function (req) {
2966
- // const { profile_id } = req;
2967
- // try {
2968
- // const team_module = await import(`${module_path}/team_module/index.mjs`);
2969
- // var account_profile_doc = await db_module.get_couch_doc_native('xuda_accounts', profile_id);
2903
+ if (!contact_doc.team_req_id) {
2904
+ throw new Error('no friend relationship found');
2905
+ }
2906
+ let req_doc = await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
2907
+ req_doc.team_req_stat = 4;
2908
+ req_doc.team_req_stat_desc = 'unfriend by the user';
2909
+ await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
2970
2910
 
2971
- // if (account_profile_doc.stat !== 5) {
2972
- // throw new Error('account profile is not archived');
2973
- // }
2974
- // if (!account_profile_doc.team_req_id) {
2975
- // account_profile_doc.stat = 3;
2976
- // account_profile_doc.stat_ts = Date.now();
2977
- // account_profile_doc.stat_reason = 'archived by the user';
2911
+ contact_doc.team_req_id = null;
2912
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2978
2913
 
2979
- // const account_profile_save_ret = await db_module.save_couch_doc('xuda_accounts', account_profile_doc);
2914
+ const req_save_ret = await db_module.save_couch_doc('xuda_team', req_doc);
2980
2915
 
2981
- // return account_profile_save_ret;
2982
- // } else {
2983
- // return await team_module.change_account_profile_dependencies_status(account_profile_doc.team_req_id, 3);
2984
- // }
2985
- // } catch (err) {
2986
- // return {
2987
- // code: -22,
2988
- // data: err.message,
2989
- // };
2990
- // }
2991
- // };
2916
+ return req_save_ret;
2917
+ } catch (err) {
2918
+ return {
2919
+ code: -21,
2920
+ data: err.message,
2921
+ };
2922
+ }
2923
+ };
2924
+
2925
+ export const pin_contact = async function (req) {
2926
+ const { uid, contact_id } = req;
2927
+ try {
2928
+ const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
2929
+ if (contact_ret.code < 0) {
2930
+ return contact_ret;
2931
+ }
2932
+ var contact_doc = contact_ret.data;
2933
+ contact_doc.pinned = true;
2934
+
2935
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2936
+
2937
+ global[`_account_module_ch`].sendToQueue(
2938
+ 'ws_dashboard_module',
2939
+ Buffer.from(
2940
+ JSON.stringify({
2941
+ method: 'emit_message_to_dashboard',
2942
+ data: {
2943
+ service: 'contact_pinned',
2944
+ to: [uid],
2945
+ data: await get_contact_info(uid, null, contact_id),
2946
+ },
2947
+ }),
2948
+ ),
2949
+ );
2950
+
2951
+ return contact_save_ret;
2952
+ } catch (err) {
2953
+ return {
2954
+ code: -24,
2955
+ data: err.message,
2956
+ };
2957
+ }
2958
+ };
2959
+
2960
+ export const unpin_contact = async function (req) {
2961
+ const { contact_id, uid } = req;
2962
+ try {
2963
+ const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
2964
+ if (contact_ret.code < 0) {
2965
+ return contact_ret;
2966
+ }
2967
+ var contact_doc = contact_ret.data;
2968
+ contact_doc.pinned = false;
2969
+
2970
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2971
+
2972
+ global[`_account_module_ch`].sendToQueue(
2973
+ 'ws_dashboard_module',
2974
+ Buffer.from(
2975
+ JSON.stringify({
2976
+ method: 'emit_message_to_dashboard',
2977
+ data: {
2978
+ service: 'contact_unpinned',
2979
+ to: [uid],
2980
+ data: await get_contact_info(uid, null, contact_id),
2981
+ },
2982
+ }),
2983
+ ),
2984
+ );
2985
+
2986
+ return contact_save_ret;
2987
+ } catch (err) {
2988
+ return {
2989
+ code: -24,
2990
+ data: err.message,
2991
+ };
2992
+ }
2993
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/account_module",
3
- "version": "1.2.1256",
3
+ "version": "1.2.1257",
4
4
  "description": "Xuda Account Server Module",
5
5
  "main": "index.mjs",
6
6
  "dependencies": {