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.
- package/package.json +5 -5
- package/src/controllers/databaseConnections.js +20 -0
- package/src/controllers/files.js +30 -2
- package/src/controllers/storage.js +100 -1
- package/src/controllers/storageDb.js +338 -28
- package/src/controllers/teamFiles.js +172 -19
- package/src/currentVersion.js +2 -2
- package/src/index.js +1 -0
- package/src/proc/databaseConnectionProcess.js +102 -0
- package/src/storageModel.js +215 -0
- package/src/utility/getDiagramExport.js +13 -5
|
@@ -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
|
|
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 ~
|
|
527
|
-
'
|
|
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 ~
|
|
530
|
-
'
|
|
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 ~
|
|
533
|
-
'
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
|
|
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
|
-
|
|
578
|
-
|
|
579
|
-
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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
|
-
${
|
|
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 (${
|
|
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
|
-
|
|
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
|
};
|