@xuda.io/account_module 1.2.1027 → 1.2.1029

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 +240 -0
  2. package/package.json +1 -1
package/index.mjs CHANGED
@@ -2486,3 +2486,243 @@ setTimeout(async () => {
2486
2486
 
2487
2487
  console.log(ret);
2488
2488
  }, 1000);
2489
+
2490
+ export const get_profiles = async function (req) {
2491
+ const { _id, uid, name, limit, skip, bookmark, search, filter_type = 'all', contact_id } = req;
2492
+
2493
+ if (_id) {
2494
+ let data = await db_module.get_couch_doc('xuda_contacts', _id);
2495
+ return data;
2496
+ }
2497
+
2498
+ var opt = {
2499
+ selector: {
2500
+ docType: 'contact',
2501
+ uid,
2502
+ stat: { $lt: 4 },
2503
+ },
2504
+ limit: limit || 9999,
2505
+ skip: skip || 0,
2506
+ sort: [{ ts: 'desc' }],
2507
+ };
2508
+
2509
+ switch (filter_type) {
2510
+ case 'archived': {
2511
+ opt.selector.stat = 5;
2512
+ break;
2513
+ }
2514
+ case 'shared': {
2515
+ opt.selector.shared_from_uid = { $gt: null };
2516
+ break;
2517
+ }
2518
+
2519
+ case 'pinned': {
2520
+ opt.selector.pinned = true;
2521
+ break;
2522
+ }
2523
+
2524
+ case 'online': {
2525
+ opt.limit = 9999;
2526
+ break;
2527
+ }
2528
+
2529
+ default:
2530
+ break;
2531
+ }
2532
+
2533
+ if (_id) {
2534
+ opt.selector._id = _id;
2535
+ }
2536
+
2537
+ if (contact_id) {
2538
+ opt.selector._id = contact_id;
2539
+ }
2540
+
2541
+ if (typeof name !== 'undefined') {
2542
+ opt.selector.name = { $regex: `(?i)${name}` };
2543
+ }
2544
+
2545
+ if (typeof search !== 'undefined') {
2546
+ opt.selector['$or'] = [
2547
+ {
2548
+ name: {
2549
+ $regex: `(?i)${search}`,
2550
+ },
2551
+ },
2552
+ {
2553
+ email: {
2554
+ $regex: `(?i)${search}`,
2555
+ },
2556
+ },
2557
+ ];
2558
+ }
2559
+
2560
+ if (bookmark && bookmark !== 'nil') {
2561
+ opt.bookmark = bookmark;
2562
+ }
2563
+
2564
+ let contacts = { docs: [], total_docs: 0 };
2565
+
2566
+ if (filter_type !== 'pending') {
2567
+ contacts = await db_module.find_couch_query('xuda_contacts', opt);
2568
+ if (!limit || contact_id) {
2569
+ contacts.total_docs = contacts.docs.length;
2570
+ } else {
2571
+ delete opt.sort;
2572
+ delete opt.skip;
2573
+ opt.limit = 9999;
2574
+ opt.fields = ['_id'];
2575
+
2576
+ const counter = await db_module.find_couch_query('xuda_contacts', opt);
2577
+ contacts.total_docs = counter.docs.length;
2578
+ }
2579
+ }
2580
+
2581
+ let requests_to = { docs: [], total_docs: 0 };
2582
+ let requests_from = { docs: [], total_docs: 0 };
2583
+ let shared_from = { docs: [], total_docs: 0 };
2584
+ let my_contact = { docs: [], total_docs: 0 };
2585
+ let contact_docs = { docs: [], total_docs: contacts.total_docs };
2586
+ for await (let doc of contacts.docs) {
2587
+ const ret_to = requests_to.docs.find((e) => {
2588
+ return e.contact_uid === doc.contact_uid;
2589
+ });
2590
+ if (ret_to) continue;
2591
+
2592
+ const ret_from = requests_from.docs.find((e) => {
2593
+ return e.contact_uid === doc.contact_uid;
2594
+ });
2595
+ if (ret_from) continue;
2596
+
2597
+ doc = await get_contact_info(uid, doc);
2598
+
2599
+ if (filter_type === 'online') {
2600
+ if (!doc.online) continue;
2601
+ }
2602
+
2603
+ contact_docs.docs.push(doc);
2604
+ }
2605
+
2606
+ if (!contact_id) {
2607
+ if (filter_type === 'pending') {
2608
+ ////// TO - OUT
2609
+ requests_to.docs = await get_pending_contact_out(uid);
2610
+ requests_to.total_docs = requests_to.docs.length;
2611
+
2612
+ ////// FROM - IN
2613
+ requests_from.docs = await get_pending_contact_in(uid);
2614
+ requests_from.total_docs = requests_from.docs.length;
2615
+ shared_from.docs = await get_pending_share_contact_in(uid);
2616
+ shared_from.total_docs = shared_from.docs.length;
2617
+ }
2618
+ // my contact
2619
+ if (filter_type === 'all' && !search && contact_docs.docs.length) {
2620
+ const my_contact_doc = await get_user_contact(uid, uid);
2621
+ my_contact.docs = [my_contact_doc];
2622
+ my_contact.total_docs = 1;
2623
+ }
2624
+ }
2625
+
2626
+ return {
2627
+ code: 1,
2628
+ data: {
2629
+ docs: [...my_contact.docs, ...shared_from.docs, ...requests_from.docs, ...requests_to.docs, ...contact_docs.docs],
2630
+ total_docs: my_contact.total_docs + shared_from.total_docs + requests_from.total_docs + requests_to.total_docs + contact_docs.total_docs,
2631
+ },
2632
+ };
2633
+ };
2634
+
2635
+ export const archive_profile = async function (req) {
2636
+ const { contact_id } = req;
2637
+ try {
2638
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2639
+ contact_doc.stat = 5;
2640
+ contact_doc.stat_ts = Date.now();
2641
+ contact_doc.stat_reason = 'archived by the user';
2642
+
2643
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2644
+
2645
+ return contact_save_ret;
2646
+ } catch (err) {
2647
+ return {
2648
+ code: -22,
2649
+ data: err.message,
2650
+ };
2651
+ }
2652
+ };
2653
+
2654
+ export const delete_profile = async function (req, job_id, headers) {
2655
+ const { contact_id } = req;
2656
+ try {
2657
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2658
+
2659
+ contact_doc.stat = 4;
2660
+ contact_doc.stat_ts = Date.now();
2661
+ contact_doc.stat_reason = 'deleted by the user';
2662
+
2663
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2664
+
2665
+ ai_module.delete_depended_chats(uid, contact_id);
2666
+ return contact_save_ret;
2667
+ } catch (err) {
2668
+ return {
2669
+ code: -22,
2670
+ data: err.message,
2671
+ };
2672
+ }
2673
+ };
2674
+
2675
+ export const unarchive_profile = async function (req) {
2676
+ const { contact_id } = req;
2677
+ try {
2678
+ var contact_doc = await db_module.get_couch_doc_native('xuda_contacts', contact_id);
2679
+
2680
+ if (contact_doc.stat !== 5) {
2681
+ throw new Error('contact is not archived');
2682
+ }
2683
+
2684
+ contact_doc.stat = 3;
2685
+ contact_doc.stat_ts = Date.now();
2686
+ contact_doc.stat_reason = 'archived by the user';
2687
+
2688
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2689
+
2690
+ return contact_save_ret;
2691
+ } catch (err) {
2692
+ return {
2693
+ code: -22,
2694
+ data: err.message,
2695
+ };
2696
+ }
2697
+ };
2698
+
2699
+ export const unfriend_profile = async function (req) {
2700
+ const { contact_id } = req;
2701
+ try {
2702
+ const contact_ret = await db_module.get_couch_doc('xuda_contacts', contact_id);
2703
+ if (contact_ret.code < 0) {
2704
+ throw new Error(contact_ret.data);
2705
+ }
2706
+ var contact_doc = contact_ret.data;
2707
+
2708
+ if (!contact_doc.team_req_id) {
2709
+ throw new Error('no friend relationship found');
2710
+ }
2711
+ let req_doc = await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
2712
+ req_doc.team_req_stat = 4;
2713
+ req_doc.team_req_stat_desc = 'unfriend by the user';
2714
+ await db_module.get_couch_doc_native('xuda_team', contact_doc.team_req_id);
2715
+
2716
+ contact_doc.team_req_id = null;
2717
+ const contact_save_ret = await db_module.save_couch_doc('xuda_contacts', contact_doc);
2718
+
2719
+ const req_save_ret = await db_module.save_couch_doc('xuda_team', req_doc);
2720
+
2721
+ return req_save_ret;
2722
+ } catch (err) {
2723
+ return {
2724
+ code: -21,
2725
+ data: err.message,
2726
+ };
2727
+ }
2728
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/account_module",
3
- "version": "1.2.1027",
3
+ "version": "1.2.1029",
4
4
  "description": "Xuda Account Server Module",
5
5
  "main": "index.mjs",
6
6
  "dependencies": {