dbgate-api-premium 6.8.2 → 7.0.0

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.
@@ -449,6 +449,46 @@ async function saveStorageTeamFilesPermissions(
449
449
  }
450
450
  }
451
451
 
452
+ async function saveStorageTeamFoldersPermissions(
453
+ table,
454
+ idColumn,
455
+ idValue,
456
+ usedTeamFoldersRead,
457
+ usedTeamFoldersWrite,
458
+ usedTeamFoldersUse
459
+ ) {
460
+ const [conn, driver] = await getStorageConnection();
461
+ if (!conn) {
462
+ return null;
463
+ }
464
+
465
+ const records = _.uniq([...usedTeamFoldersRead, ...usedTeamFoldersWrite, ...usedTeamFoldersUse]).map(
466
+ teamFolderId => ({
467
+ team_folder_id: teamFolderId,
468
+ allow_read: usedTeamFoldersRead.includes(teamFolderId) ? 1 : 0,
469
+ allow_write: usedTeamFoldersWrite.includes(teamFolderId) ? 1 : 0,
470
+ allow_use: usedTeamFoldersUse.includes(teamFolderId) ? 1 : 0,
471
+ })
472
+ );
473
+
474
+ await runQueryFmt(driver, conn, 'delete from %i where %i = %v', table, idColumn, idValue);
475
+
476
+ for (const record of records) {
477
+ await runQueryFmt(
478
+ driver,
479
+ conn,
480
+ 'insert into %i (%i, ~team_folder_id, ~allow_read_files, ~allow_write_files, ~allow_use_files) values (%v, %v, %v, %v, %v)',
481
+ table,
482
+ idColumn,
483
+ idValue,
484
+ record.team_folder_id,
485
+ record.allow_read,
486
+ record.allow_write,
487
+ record.allow_use
488
+ );
489
+ }
490
+ }
491
+
452
492
  function getStorageConnectionError() {
453
493
  return storageConnectionError;
454
494
  }
@@ -493,7 +533,7 @@ async function storageCheckUserRoleConnectionAccess(userId, conid) {
493
533
  return respByUser.length > 0 || respByRole.length > 0 || respByLogged.length > 0;
494
534
  }
495
535
 
496
- async function storageCreateTeamFile({ fileType, file, data, ownerUserId, metadata }) {
536
+ async function storageCreateTeamFile({ fileType, file, data, ownerUserId, metadata, teamFolderId }) {
497
537
  const [conn, driver] = await getStorageConnection();
498
538
  if (!conn) {
499
539
  return null;
@@ -505,54 +545,126 @@ async function storageCreateTeamFile({ fileType, file, data, ownerUserId, metada
505
545
  return null;
506
546
  }
507
547
  await storageSqlCommandFmt(
508
- 'insert into ~team_files (~file_type_id, ~file_name, ~file_content, ~owner_user_id, ~metadata) values (%v, %v, %v, %v, %v)',
548
+ 'insert into ~team_files (~file_type_id, ~file_name, ~file_content, ~owner_user_id, ~metadata, ~team_folder_id) values (%v, %v, %v, %v, %v, %v)',
509
549
  typeId,
510
550
  file,
511
551
  data,
512
552
  ownerUserId ?? null,
513
- metadata
553
+ metadata,
554
+ parseInt(teamFolderId ?? -1)
514
555
  );
515
556
  const teamFileId = await selectStorageIdentity('team_files');
516
557
  return { teamFileId };
517
558
  }
518
559
 
519
- async function storageListTeamFilesForUser(userId) {
560
+ async function storageListTeamFoldersForUser(userId) {
520
561
  const [conn, driver] = await getStorageConnection();
521
562
  if (!conn) {
522
563
  return null;
523
564
  }
524
565
 
525
566
  const sqlCond =
526
- additionalCond => `exists (select 1 from ~user_team_files where ~user_team_files.~user_id = ${userId} and ~user_team_files.~team_file_id = ~team_files.~id ${additionalCond(
527
- 'user_team_files'
567
+ additionalCond => `exists (select 1 from ~user_team_folders where ~user_team_folders.~user_id = ${userId} and ~user_team_folders.~team_folder_id = ~team_folders.~id ${additionalCond(
568
+ 'user_team_folders'
528
569
  )}))
529
- or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCond(
530
- 'role_team_files'
570
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_folders.~team_folder_id = ~team_folders.~id ${additionalCond(
571
+ 'role_team_folders'
531
572
  )}))
532
- or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = -2 and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCond(
533
- 'role_team_files'
573
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = -2 and ~role_team_folders.~team_folder_id = ~team_folders.~id ${additionalCond(
574
+ 'role_team_folders'
534
575
  )})`;
535
576
 
577
+ const resp = await storageSelectFmt(
578
+ `
579
+ select ~team_folders.~id, ~team_folders.~folder_name,
580
+
581
+ case when (
582
+ ${sqlCond(table => `and ~${table}.~allow_write_files = 1`)}
583
+ ) then 1 else 0 end as ~allow_create,
584
+ case when (
585
+ ${sqlCond(table => `and ~${table}.~allow_read_files = 1`)}
586
+ ) then 1 else 0 end as ~allow_read,
587
+ case when (
588
+ ${sqlCond(table => `and ~${table}.~allow_write_files = 1`)}
589
+ ) then 1 else 0 end as ~allow_write,
590
+ case when (
591
+ ${sqlCond(table => `and ~${table}.~allow_use_files = 1`)}
592
+ ) then 1 else 0 end as ~allow_use
593
+
594
+ from ~team_folders
595
+ where
596
+ (exists (select 1 from ~user_team_folders where ~user_team_folders.~user_id = ${userId} and ~user_team_folders.~team_folder_id = ~team_folders.~id))
597
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_folders.~team_folder_id = ~team_folders.~id))
598
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = -2 and ~role_team_folders.~team_folder_id = ~team_folders.~id))`
599
+ );
600
+ return resp;
601
+ }
602
+
603
+ async function storageListTeamFilesForUser(userId) {
604
+ const [conn, driver] = await getStorageConnection();
605
+ if (!conn) {
606
+ return null;
607
+ }
608
+
609
+ const sqlCondWithFolders = (additionalCondFile, additionalCondFolder) => `(
610
+ (exists (select 1 from ~user_team_files where ~user_team_files.~user_id = ${userId} and ~user_team_files.~team_file_id = ~team_files.~id ${additionalCondFile(
611
+ 'user_team_files'
612
+ )}))
613
+ or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCondFile(
614
+ 'role_team_files'
615
+ )}))
616
+ or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = -2 and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCondFile(
617
+ 'role_team_files'
618
+ )}))
619
+ or (~team_files.~team_folder_id is not null and (
620
+ (exists (select 1 from ~user_team_folders where ~user_team_folders.~user_id = ${userId} and ~user_team_folders.~team_folder_id = ~team_files.~team_folder_id ${additionalCondFolder(
621
+ 'user_team_folders'
622
+ )}))
623
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id ${additionalCondFolder(
624
+ 'role_team_folders'
625
+ )}))
626
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = -2 and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id ${additionalCondFolder(
627
+ 'role_team_folders'
628
+ )}))
629
+ ))
630
+ )`;
631
+
536
632
  const resp = await storageSelectFmt(
537
633
  `
538
634
  select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name, ~team_files.~owner_user_id,
635
+ ~team_folders.~id as ~team_folder_id, ~team_folders.~folder_name as ~team_folder_name,
539
636
 
540
637
  case when (
541
- ${sqlCond(table => `and ~${table}.~allow_read = 1`)}
638
+ ${sqlCondWithFolders(
639
+ table => `and ~${table}.~allow_read = 1`,
640
+ table => `and ~${table}.~allow_read_files = 1`
641
+ )}
542
642
  ) then 1 else 0 end as ~allow_read,
543
643
  case when (
544
- ${sqlCond(table => `and ~${table}.~allow_write = 1`)}
644
+ ${sqlCondWithFolders(
645
+ table => `and ~${table}.~allow_write = 1`,
646
+ table => `and ~${table}.~allow_write_files = 1`
647
+ )}
545
648
  ) then 1 else 0 end as ~allow_write,
546
649
  case when (
547
- ${sqlCond(table => `and ~${table}.~allow_use = 1`)}
650
+ ${sqlCondWithFolders(
651
+ table => `and ~${table}.~allow_use = 1`,
652
+ table => `and ~${table}.~allow_use_files = 1`
653
+ )}
548
654
  ) then 1 else 0 end as ~allow_use
549
655
 
550
656
  from ~team_files
551
657
  inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id
658
+ inner join ~team_folders on ~team_files.~team_folder_id = ~team_folders.~id
552
659
  where ~team_files.~owner_user_id = ${userId}
553
660
  or (exists (select 1 from ~user_team_files where ~user_team_files.~user_id = ${userId} and ~user_team_files.~team_file_id = ~team_files.~id))
554
661
  or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_files.~team_file_id = ~team_files.~id))
555
- or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = -2 and ~role_team_files.~team_file_id = ~team_files.~id))`
662
+ or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = -2 and ~role_team_files.~team_file_id = ~team_files.~id))
663
+ or (~team_files.~team_folder_id is not null and (
664
+ (exists (select 1 from ~user_team_folders where ~user_team_folders.~user_id = ${userId} and ~user_team_folders.~team_folder_id = ~team_files.~team_folder_id))
665
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = ${userId}) and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id))
666
+ or (exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = -2 and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id))
667
+ ))`
556
668
  );
557
669
  return resp;
558
670
  }
@@ -564,8 +676,21 @@ async function storageListAllTeamFiles() {
564
676
  }
565
677
 
566
678
  const resp =
567
- await storageSelectFmt(`select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name, ~team_files.~owner_user_id
568
- from ~team_files inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id`);
679
+ await storageSelectFmt(`select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name, ~team_files.~owner_user_id,
680
+ ~team_folders.~id as ~team_folder_id, ~team_folders.~folder_name as ~team_folder_name
681
+ from ~team_files inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id
682
+ inner join ~team_folders on ~team_files.~team_folder_id = ~team_folders.~id
683
+ `);
684
+ return resp;
685
+ }
686
+
687
+ async function storageListAllTeamFolders() {
688
+ const [conn, driver] = await getStorageConnection();
689
+ if (!conn) {
690
+ return null;
691
+ }
692
+
693
+ const resp = await storageSelectFmt(`select ~team_folders.~id, ~team_folders.~folder_name from ~team_folders`);
569
694
  return resp;
570
695
  }
571
696
 
@@ -574,27 +699,79 @@ async function storageListTeamFilesForRole(roleId) {
574
699
  if (!conn) {
575
700
  return null;
576
701
  }
577
- const sqlCond = additionalCond =>
578
- `exists (select 1 from ~role_team_files where ~role_team_files.~role_id = ${roleId} and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCond(
579
- 'role_team_files'
580
- )})`;
702
+
703
+ const sqlCondWithFolders = (additionalCondFile, additionalCondFolder) => `(
704
+ (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = ${roleId} and ~role_team_files.~team_file_id = ~team_files.~id ${additionalCondFile(
705
+ 'role_team_files'
706
+ )}))
707
+ or (~team_files.~team_folder_id is not null and (
708
+ exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = ${roleId} and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id ${additionalCondFolder(
709
+ 'role_team_folders'
710
+ )})
711
+ ))
712
+ )`;
581
713
 
582
714
  const resp = await storageSelectFmt(
583
715
  `
584
716
  select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name, ~team_files.~owner_user_id,
717
+ ~team_folders.~id as ~team_folder_id, ~team_folders.~folder_name as ~team_folder_name,
585
718
  case when (
586
- ${sqlCond(table => `and ~${table}.~allow_read = 1`)}
719
+ ${sqlCondWithFolders(
720
+ table => `and ~${table}.~allow_read = 1`,
721
+ table => `and ~${table}.~allow_read_files = 1`
722
+ )}
587
723
  ) then 1 else 0 end as ~allow_read,
588
724
  case when (
589
- ${sqlCond(table => `and ~${table}.~allow_write = 1`)}
725
+ ${sqlCondWithFolders(
726
+ table => `and ~${table}.~allow_write = 1`,
727
+ table => `and ~${table}.~allow_write_files = 1`
728
+ )}
590
729
  ) then 1 else 0 end as ~allow_write,
591
730
  case when (
592
- ${sqlCond(table => `and ~${table}.~allow_use = 1`)}
731
+ ${sqlCondWithFolders(
732
+ table => `and ~${table}.~allow_use = 1`,
733
+ table => `and ~${table}.~allow_use_files = 1`
734
+ )}
593
735
  ) then 1 else 0 end as ~allow_use
594
736
  from ~team_files
595
737
  inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id
738
+ inner join ~team_folders on ~team_files.~team_folder_id = ~team_folders.~id
596
739
  where ~team_files.~owner_user_id = ${roleId}
597
- or (${sqlCond(() => '')})`
740
+ or (exists (select 1 from ~role_team_files where ~role_team_files.~role_id = ${roleId} and ~role_team_files.~team_file_id = ~team_files.~id))
741
+ or (~team_files.~team_folder_id is not null and (
742
+ exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = ${roleId} and ~role_team_folders.~team_folder_id = ~team_files.~team_folder_id)
743
+ ))`
744
+ );
745
+ return resp;
746
+ }
747
+
748
+ async function storageListTeamFoldersForRole(roleId) {
749
+ const [conn, driver] = await getStorageConnection();
750
+ if (!conn) {
751
+ return null;
752
+ }
753
+ const sqlCond = additionalCond =>
754
+ `exists (select 1 from ~role_team_folders where ~role_team_folders.~role_id = ${roleId} and ~role_team_folders.~team_folder_id = ~team_folders.~id ${additionalCond(
755
+ 'role_team_folders'
756
+ )})`;
757
+
758
+ const resp = await storageSelectFmt(
759
+ `
760
+ select ~team_folders.~id, ~team_folders.~folder_name,
761
+ case when (
762
+ ${sqlCond(table => `and ~${table}.~allow_write_files = 1`)}
763
+ ) then 1 else 0 end as ~allow_create,
764
+ case when (
765
+ ${sqlCond(table => `and ~${table}.~allow_read_files = 1`)}
766
+ ) then 1 else 0 end as ~allow_read,
767
+ case when (
768
+ ${sqlCond(table => `and ~${table}.~allow_write_files = 1`)}
769
+ ) then 1 else 0 end as ~allow_write,
770
+ case when (
771
+ ${sqlCond(table => `and ~${table}.~allow_use_files = 1`)}
772
+ ) then 1 else 0 end as ~allow_use
773
+ from ~team_folders
774
+ where (${sqlCond(() => '')})`
598
775
  );
599
776
  return resp;
600
777
  }
@@ -669,13 +846,76 @@ async function storageGetTeamFileRoleAccess(teamFileId, roleId) {
669
846
  return resp;
670
847
  }
671
848
 
849
+ async function storageGetTeamFolderUserAccess(teamFolderId, userId) {
850
+ const [conn, driver] = await getStorageConnection();
851
+ if (!conn) {
852
+ return null;
853
+ }
854
+
855
+ const respUser = await storageSelectFmt(
856
+ 'select allow_read_files, allow_write_files, allow_use_files from ~user_team_folders where ~user_team_folders.~user_id = %v and ~user_team_folders.~team_folder_id = %v',
857
+ userId,
858
+ teamFolderId
859
+ );
860
+ const respRole = await storageSelectFmt(
861
+ 'select allow_read_files, allow_write_files, allow_use_files from ~role_team_folders where ~role_team_folders.~role_id in (select ~role_id from ~user_roles where ~user_roles.~user_id = %v) and ~role_team_folders.~team_folder_id = %v',
862
+ userId,
863
+ teamFolderId
864
+ );
865
+
866
+ const resp = {
867
+ allowRead: false,
868
+ allowWrite: false,
869
+ allowUse: false,
870
+ };
871
+
872
+ for (const row of respUser) {
873
+ resp.allowRead ||= row.allow_read_files;
874
+ resp.allowWrite ||= row.allow_write_files;
875
+ resp.allowUse ||= row.allow_use_files;
876
+ }
877
+
878
+ for (const row of respRole) {
879
+ resp.allowRead ||= row.allow_read_files;
880
+ resp.allowWrite ||= row.allow_write_files;
881
+ resp.allowUse ||= row.allow_use_files;
882
+ }
883
+
884
+ return resp;
885
+ }
886
+
887
+ async function storageGetTeamFolderRoleAccess(teamFolderId, roleId) {
888
+ const [conn, driver] = await getStorageConnection();
889
+ if (!conn) {
890
+ return null;
891
+ }
892
+ const respRole = await storageSelectFmt(
893
+ 'select allow_read_files, allow_write_files, allow_use_files from ~role_team_folders where ~role_team_folders.~role_id = %v and ~role_team_folders.~team_folder_id = %v',
894
+ roleId,
895
+ teamFolderId
896
+ );
897
+ const resp = {
898
+ allowRead: false,
899
+ allowWrite: false,
900
+ allowUse: false,
901
+ };
902
+
903
+ for (const row of respRole) {
904
+ resp.allowRead ||= row.allow_read_files;
905
+ resp.allowWrite ||= row.allow_write_files;
906
+ resp.allowUse ||= row.allow_use_files;
907
+ }
908
+
909
+ return resp;
910
+ }
911
+
672
912
  async function storageGetExistingFile(teamFileId) {
673
913
  const [conn, driver] = await getStorageConnection();
674
914
  if (!conn) {
675
915
  return null;
676
916
  }
677
917
  const resp = await storageSelectFmt(
678
- `select ~team_files.~id, ~team_files.~owner_user_id, ~team_file_types.~name as ~type_name
918
+ `select ~team_files.~id, ~team_files.~owner_user_id, ~team_file_types.~name as ~type_name, ~team_files.~team_folder_id
679
919
  from ~team_files inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id where ~team_files.~id = %v`,
680
920
  teamFileId
681
921
  );
@@ -689,7 +929,7 @@ async function storageGetExistingFileWithContent(teamFileId) {
689
929
  }
690
930
  const resp = await storageSelectFmt(
691
931
  `select ~team_files.~id, ~team_files.~file_name, ~team_files.~owner_user_id, ~team_file_types.~name as ~type_name, ~team_files.~file_content,
692
- ~users.login as ~owner_login, ~users.~email as ~owner_email, ~team_file_types.~format as ~type_format
932
+ ~users.login as ~owner_login, ~users.~email as ~owner_email, ~team_file_types.~format as ~type_format, ~team_files.~team_folder_id
693
933
  from ~team_files inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id
694
934
  left join ~users on ~team_files.~owner_user_id = ~users.~id
695
935
  where ~team_files.~id = %v`,
@@ -726,6 +966,48 @@ async function storageUpdateTeamFileAdmin({ teamFileId, name }) {
726
966
  return true;
727
967
  }
728
968
 
969
+ async function storageInsertTeamFolderAdmin({ name }) {
970
+ const [conn, driver] = await getStorageConnection();
971
+ if (!conn) {
972
+ return null;
973
+ }
974
+ await storageSqlCommandFmt('insert into ~team_folders (~folder_name) values (%v)', name);
975
+ }
976
+
977
+ async function storageUpdateTeamFolderAdmin({ teamFolderId, name }) {
978
+ const [conn, driver] = await getStorageConnection();
979
+ if (!conn) {
980
+ return null;
981
+ }
982
+ await storageSqlCommandFmt('update ~team_folders set ~folder_name = %v where ~id = %v', name, teamFolderId);
983
+ return true;
984
+ }
985
+
986
+ async function storageListAllAdminFolders() {
987
+ const [conn, driver] = await getStorageConnection();
988
+ if (!conn) {
989
+ return null;
990
+ }
991
+
992
+ const resp = await storageSelectFmt(`select ~team_folders.~id, ~team_folders.~folder_name,
993
+ (select count(*) from ~team_files where ~team_files.~team_folder_id = ~team_folders.~id) as ~file_count
994
+ from ~team_folders`);
995
+ return resp;
996
+ }
997
+
998
+ async function storageGetExistingFolder(teamFolderId) {
999
+ const [conn, driver] = await getStorageConnection();
1000
+ if (!conn) {
1001
+ return null;
1002
+ }
1003
+ const resp = await storageSelectFmt(
1004
+ `select ~team_folders.~id, ~team_folders.~folder_name
1005
+ from ~team_folders where ~team_folders.~id = %v`,
1006
+ teamFolderId
1007
+ );
1008
+ return resp?.[0];
1009
+ }
1010
+
729
1011
  async function storageListAllAdminFiles() {
730
1012
  const [conn, driver] = await getStorageConnection();
731
1013
  if (!conn) {
@@ -733,8 +1015,12 @@ async function storageListAllAdminFiles() {
733
1015
  }
734
1016
 
735
1017
  const resp =
736
- await storageSelectFmt(`select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name
737
- from ~team_files inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id`);
1018
+ await storageSelectFmt(`select ~team_files.~id, ~team_files.~file_name, ~team_files.~metadata, ~team_file_types.~name as ~type_name,
1019
+ ~team_folders.~folder_name, ~team_files.~team_folder_id, ~team_files.~owner_user_id
1020
+ from ~team_files
1021
+ inner join ~team_file_types on ~team_files.~file_type_id = ~team_file_types.~id
1022
+ inner join ~team_folders on ~team_files.~team_folder_id = ~team_folders.~id
1023
+ `);
738
1024
  return resp;
739
1025
  }
740
1026
 
@@ -748,6 +1034,19 @@ async function storageDeleteFile(id) {
748
1034
  return true;
749
1035
  }
750
1036
 
1037
+ async function storageDeleteFolder(id) {
1038
+ const [conn, driver] = await getStorageConnection();
1039
+ if (!conn) {
1040
+ return null;
1041
+ }
1042
+
1043
+ // move files to default folder
1044
+ await storageSqlCommandFmt('update ~team_files set ~team_folder_id = -1 where ~team_folder_id = %v', id);
1045
+ // delete fodler
1046
+ await storageSqlCommandFmt('delete from ~team_folders where ~id = %v', id);
1047
+ return true;
1048
+ }
1049
+
751
1050
  async function storageCopyFile(id, newName, userId) {
752
1051
  const [conn, driver] = await getStorageConnection();
753
1052
  if (!conn) {
@@ -796,13 +1095,24 @@ module.exports = {
796
1095
  storageGetExistingFile,
797
1096
  storageGetTeamFileRoleAccess,
798
1097
  storageListTeamFilesForUser,
1098
+ storageListTeamFoldersForUser,
799
1099
  storageListTeamFilesForRole,
1100
+ storageListTeamFoldersForRole,
800
1101
  storageUpdateTeamFile,
801
1102
  storageListAllTeamFiles,
1103
+ storageListAllTeamFolders,
802
1104
  storageGetExistingFileWithContent,
803
1105
  storageListAllAdminFiles,
804
1106
  storageUpdateTeamFileAdmin,
805
1107
  storageDeleteFile,
806
1108
  saveStorageTeamFilesPermissions,
807
1109
  storageCopyFile,
1110
+ storageListAllAdminFolders,
1111
+ storageGetExistingFolder,
1112
+ storageUpdateTeamFolderAdmin,
1113
+ storageDeleteFolder,
1114
+ storageInsertTeamFolderAdmin,
1115
+ saveStorageTeamFoldersPermissions,
1116
+ storageGetTeamFolderRoleAccess,
1117
+ storageGetTeamFolderUserAccess,
808
1118
  };