@xuda.io/drive_module 1.1.560 → 1.1.561

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.js +125 -0
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1534,6 +1534,131 @@ exports.upload_drive_file = async function (req, job_id, headers, file_obj) {
1534
1534
  return { code: -400, data: err.message };
1535
1535
  }
1536
1536
  };
1537
+ exports.check_drive_file = async function (req, job_id, headers, file_obj) {
1538
+ const { drive_type, app_id, uid, make_public, check_exist } = req;
1539
+ var file_name;
1540
+ switch (drive_type) {
1541
+ case "studio": {
1542
+ ref = await _common.get_project_app_id(req.app_id, true);
1543
+ const target_dir = path.join(_conf[`studio_drive_path`], ref);
1544
+ file_name = path.join(
1545
+ req.path.replace(target_dir, ""),
1546
+ file_obj.originalname
1547
+ );
1548
+ target_file = path.join(
1549
+ req.path !== "/" ? req.path : target_dir,
1550
+ originalname
1551
+ );
1552
+
1553
+ if (!(await fs_module.file_exists(target_dir))) {
1554
+ await fs_module.mkdir(target_dir, 0o775, true);
1555
+ }
1556
+ if (await fs_module.file_exists(target_file)) {
1557
+ return {
1558
+ code: -762,
1559
+ data: "file already exist",
1560
+ };
1561
+ }
1562
+
1563
+ await fs_module.copy(tempPath, target_file);
1564
+ doc.server_file_name = file_name;
1565
+
1566
+ doc.app_id = app_id;
1567
+ doc.app_id_reference = ref;
1568
+
1569
+ doc._id = file_name;
1570
+
1571
+ save_ret = await db_module.save_app_couch_doc(ref, doc);
1572
+ misc_module.rsync_drive_resources_to_remote_servers("studio", app_id);
1573
+ break;
1574
+ }
1575
+ case "workspace": {
1576
+ ref = await _common.get_project_app_id(req.app_id, true);
1577
+ file_name =
1578
+ "drv_" + ref + "_" + (await _common.xuda_get_uuid(drive_type)) + ext;
1579
+
1580
+ // keep the original filename to support migration
1581
+ if (file_obj.originalname.includes(`drv_${ref}`)) {
1582
+ file_name = file_obj.originalname;
1583
+ }
1584
+
1585
+ doc.server_file_name = file_name;
1586
+
1587
+ doc.app_id = app_id;
1588
+ doc.app_id_reference = ref;
1589
+
1590
+ /// check existing file
1591
+ if (check_exist) {
1592
+ const workspace_drive_res = await db_module.find_app_couch_query(
1593
+ app_id,
1594
+ {
1595
+ selector: { docType: "workspace_drive", originalname, stat: 3 },
1596
+ limit: 99,
1597
+ }
1598
+ );
1599
+ if (workspace_drive_res.docs.length) {
1600
+ return {
1601
+ code: -762,
1602
+ data: "file already exist",
1603
+ duplicates: workspace_drive_res.docs,
1604
+ };
1605
+ }
1606
+ }
1607
+
1608
+ doc.bucket = {
1609
+ [`${process.env.XUDA_HOSTNAME}`]: await upload_file_to_spaces(
1610
+ tempPath,
1611
+ ref,
1612
+ drive_type,
1613
+ file_name
1614
+ ),
1615
+ };
1616
+ doc._id = file_name;
1617
+ save_ret = await db_module.save_app_couch_doc(
1618
+ await _common.get_project_app_id(req.app_id),
1619
+ doc
1620
+ );
1621
+ misc_module.rsync_drive_resources_to_remote_servers("workspace", app_id);
1622
+ break;
1623
+ }
1624
+ case "user": {
1625
+ /// check existing file
1626
+ const user_drive_res = await db_module.find_couch_query("drive", {
1627
+ selector: { docType: "user_drive", originalname, stat: 3 },
1628
+ limit: 99,
1629
+ });
1630
+ if (user_drive_res.docs.length) {
1631
+ return {
1632
+ code: -762,
1633
+ data: "file already exist",
1634
+ duplicates: user_drive_res.docs,
1635
+ };
1636
+ }
1637
+
1638
+ ref = uid;
1639
+ file_name =
1640
+ "drv_" + ref + "_" + (await _common.xuda_get_uuid(drive_type)) + ext;
1641
+
1642
+ doc.server_file_name = file_name;
1643
+
1644
+ doc.bucket = {
1645
+ [`${process.env.XUDA_HOSTNAME}`]: await upload_file_to_spaces(
1646
+ tempPath,
1647
+ ref,
1648
+ drive_type,
1649
+ file_name
1650
+ ),
1651
+ };
1652
+ doc._id = file_name;
1653
+ save_ret = await db_module.save_couch_doc("xuda_drive", doc);
1654
+ misc_module.rsync_drive_resources_to_remote_servers("user", uid);
1655
+ break;
1656
+ }
1657
+
1658
+ default:
1659
+ break;
1660
+ }
1661
+ };
1537
1662
  const ocr_drive_file = async function (doc) {
1538
1663
  const { drive_type, target_file } = doc;
1539
1664
  var doc_ret;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xuda.io/drive_module",
3
- "version": "1.1.560",
3
+ "version": "1.1.561",
4
4
  "description": "Xuda Drive Server Module",
5
5
  "main": "index.js",
6
6
  "dependencies": {