Skip to content

Commit

Permalink
Merge pull request #168 from internxt/feat/return-list-of-folders-sha…
Browse files Browse the repository at this point in the history
…red-by-a-user

[PB-533] feat/return list of folders shared by a user
  • Loading branch information
sg-gs authored Jun 27, 2023
2 parents c291d45 + bde36c7 commit 26b7a0c
Show file tree
Hide file tree
Showing 22 changed files with 831 additions and 56 deletions.
58 changes: 58 additions & 0 deletions migrations/20230619014713-create-private-sharing-folder-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
'use strict';

const tableName = 'private_sharing_folder';

module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable(tableName, {
id: {
type: Sequelize.UUID,
defaultValue: Sequelize.UUID,
allowNull: false,
primaryKey: true,
},
folder_id: {
type: Sequelize.UUID,
allowNull: false,
references: {
model: 'folders',
key: 'uuid',
},
},
owner_id: {
type: Sequelize.STRING(36),
allowNull: false,
references: {
model: 'users',
key: 'uuid',
},
},
shared_with: {
type: Sequelize.STRING(36),
allowNull: false,
references: {
model: 'users',
key: 'uuid',
},
},
encryption_key: {
type: Sequelize.STRING,
allowNull: false,
},
created_at: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW,
},
updated_at: {
type: Sequelize.DATE,
allowNull: false,
defaultValue: Sequelize.NOW,
},
});
},

async down(queryInterface) {
await queryInterface.sequelize.query(`DROP TABLE IF EXISTS ${tableName}`);
},
};
35 changes: 17 additions & 18 deletions seeders/20230308180046-test-users.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const testUser = {
user_id: 'JohnDoe userId',
name: 'John',
lastname: 'Doe',
uuid: v4(),
email: '[email protected]',
username: '[email protected]',
bridge_user: '[email protected]',
Expand All @@ -16,7 +17,6 @@ const testUser = {
h_key: 'john doe salt',
referrer: null,
referral_code: referralCode,
uuid: null,
credit: 0,
welcome_pack: true,
register_completed: true,
Expand All @@ -26,6 +26,7 @@ const referredTestUser = {
user_id: 'JohnDoe userId',
name: 'John',
lastname: 'Doe',
uuid: v4(),
email: '[email protected]',
username: '[email protected]',
bridge_user: '[email protected]',
Expand All @@ -34,33 +35,31 @@ const referredTestUser = {
h_key: 'john doe salt',
referrer: referralCode,
referral_code: v4(),
uuid: null,
credit: 0,
welcome_pack: true,
register_completed: true,
};

module.exports = {
async up(queryInterface, Sequelize) {
/**
* Add seed commands here.
*
* Example:
* await queryInterface.bulkInsert('People', [{
* name: 'John Doe',
* isBetaMember: false
* }], {});
*/
await queryInterface.bulkInsert('users', [testUser, referredTestUser]);
const existingUsers = await queryInterface.sequelize.query(
'SELECT email FROM users WHERE email IN (:emails)',
{
replacements: { emails: [testUser.email, referredTestUser.email] },
type: queryInterface.sequelize.QueryTypes.SELECT,
},
);

const newUsers = [testUser, referredTestUser].filter(
(user) => !existingUsers.find((u) => u.email === user.email),
);

if (newUsers.length > 0) {
await queryInterface.bulkInsert('users', newUsers, { returning: true });
}
},

async down(queryInterface, Sequelize) {
/**
* Add commands to revert seed here.
*
* Example:
* await queryInterface.bulkDelete('People', null, {});
*/
await queryInterface.bulkDelete(
'users',
{
Expand Down
94 changes: 60 additions & 34 deletions seeders/20230607000000-create-folders.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,75 @@
'use strict';

const { v4 } = require('uuid');
const { Op } = require('sequelize');

const folderOne = {
id: 1,
parent_id: null,
name: 'FolderOne',
bucket: 'bucketOne',
user_id: '20',
uuid: v4(),
plain_name: 'FolderOne',
encrypt_version: '1.0',
deleted: false,
removed: false,
created_at: new Date(),
updated_at: new Date(),
};

const folderTwo = {
id: 2,
parent_id: null,
name: 'FolderTwo',
bucket: 'bucketTwo',
user_id: '21',
uuid: v4(),
plain_name: 'FolderTwo',
encrypt_version: '1.0',
deleted: false,
removed: false,
created_at: new Date(),
updated_at: new Date(),
};
const { Op, Sequelize } = require('sequelize');

module.exports = {
async up(queryInterface, Sequelize) {
async up(queryInterface) {
const users = await queryInterface.sequelize.query(
`SELECT * FROM users WHERE email IN (:emails)`,
{
replacements: { emails: ['[email protected]', '[email protected]'] },
type: Sequelize.QueryTypes.SELECT,
},
);

if (!users || users.length !== 2) {
throw new Error('No users found');
}

const existingFolders = await queryInterface.sequelize.query(
`SELECT * FROM folders WHERE name IN (:names)`,
{
replacements: { names: ['FolderOne', 'FolderTwo'] },
type: Sequelize.QueryTypes.SELECT,
},
);

if (existingFolders.length > 0) {
console.log(
'Folders with the names "FolderOne" and/or "FolderTwo" already exist. Skipping creation.',
);
return;
}

const folderOne = {
parent_id: null,
name: 'FolderOne',
bucket: 'bucketOne',
user_id: users[0].id,
uuid: v4(),
plain_name: 'FolderOne',
encrypt_version: '1.0',
deleted: false,
removed: false,
created_at: new Date(),
updated_at: new Date(),
};

const folderTwo = {
parent_id: null,
name: 'FolderTwo',
bucket: 'bucketTwo',
user_id: users[1].id,
uuid: v4(),
plain_name: 'FolderTwo',
encrypt_version: '1.0',
deleted: false,
removed: false,
created_at: new Date(),
updated_at: new Date(),
};

await queryInterface.bulkInsert('folders', [folderOne, folderTwo]);
},

async down(queryInterface, Sequelize) {
await queryInterface.bulkDelete(
'folders',
{
id: { [Op.in]: [folderOne.id, folderTwo.id] },
uuid: { [Op.in]: [folderOne.uuid, folderTwo.uuid] },
},
{},
);
},
};
};
43 changes: 43 additions & 0 deletions seeders/20230614000000-create-share.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
'use strict';

const { v4 } = require('uuid');
const { Op } = require('sequelize');

module.exports = {
async up(queryInterface, Sequelize) {
// Obtén los usuarios desde la base de datos
const users = await queryInterface.sequelize.query(
'SELECT * FROM users WHERE email IN (:emails)',
{
replacements: { emails: ['[email protected]', '[email protected]'] },
type: Sequelize.QueryTypes.SELECT,
},
);

const shareOne = {
id: 1,
folder_id: 1,
user_id: users[0].id,
bucket: 'bucketOne',
file_token: v4(),
created_at: new Date(),
updated_at: new Date(),
};

const existingShare = await queryInterface.sequelize.query(
'SELECT * FROM shares WHERE id = :id',
{
replacements: { id: shareOne.id },
type: Sequelize.QueryTypes.SELECT,
},
);

if (existingShare.length === 0) {
await queryInterface.bulkInsert('shares', [shareOne]);
}
},

async down(queryInterface, Sequelize) {
await queryInterface.bulkDelete('shares', null, {});
},
};
66 changes: 66 additions & 0 deletions seeders/20230618000000-create-private-folder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
'use strict';

const { v4 } = require('uuid');
const { Op, Sequelize } = require('sequelize');

module.exports = {
async up(queryInterface) {
const users = await queryInterface.sequelize.query(
`SELECT * FROM users WHERE email IN (:emails)`,
{
replacements: { emails: ['[email protected]', '[email protected]'] },
type: Sequelize.QueryTypes.SELECT,
},
);

const folders = await queryInterface.sequelize.query(
`SELECT * FROM folders WHERE name IN (:names)`,
{
replacements: { names: ['FolderOne', 'FolderTwo'] },
type: Sequelize.QueryTypes.SELECT,
},
);

if (!users || users.length < 2 || !folders || folders.length < 2) {
throw new Error('Required users or folders not found.');
}

const folderOne = folders.find((f) => f.name === 'FolderOne');
const folderTwo = folders.find((f) => f.name === 'FolderTwo');

const sharingFolderOne = {
id: v4(),
folder_id: folderOne.uuid,
owner_id: users[0].uuid,
shared_with: users[1].uuid,
encryption_key: 'clave cifrada',
created_at: new Date(),
updated_at: new Date(),
};

const sharingFolderTwo = {
id: v4(),
folder_id: folderTwo.uuid,
owner_id: users[1].uuid,
shared_with: users[0].uuid,
encryption_key: 'clave cifrada',
created_at: new Date(),
updated_at: new Date(),
};

await queryInterface.bulkInsert('private_sharing_folder', [
sharingFolderOne,
sharingFolderTwo,
]);
},

async down(queryInterface, Sequelize) {
await queryInterface.bulkDelete(
'private_sharing_folder',
{
id: { [Op.in]: [sharingFolderOne.id, sharingFolderTwo.id] },
},
{},
);
},
};
3 changes: 2 additions & 1 deletion src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import { BridgeModule } from './externals/bridge/bridge.module';
import { DeviceModule } from './modules/device/device.module';
import { CryptoModule } from './externals/crypto/crypto.module';
import { SharedWorkspaceModule } from './shared-workspace/shared-workspace.module';

import { PrivateShareModule } from './modules/private-share-folder/private-share.module';
@Module({
imports: [
ConfigModule.forRoot({
Expand Down Expand Up @@ -95,6 +95,7 @@ import { SharedWorkspaceModule } from './shared-workspace/shared-workspace.modul
BridgeModule,
DeviceModule,
CryptoModule,
PrivateShareModule,
SharedWorkspaceModule,
],
controllers: [],
Expand Down
5 changes: 5 additions & 0 deletions src/common/order.type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export type OrderBy =
| 'views:ASC'
| 'views:DESC'
| 'createdAt:ASC'
| 'createdAt:DESC';
Loading

0 comments on commit 26b7a0c

Please sign in to comment.