FEAT: add route to get data asset by pipeline and object

This commit is contained in:
Anderson Feitosa
2022-12-22 17:00:56 -03:00
parent 5a23923e53
commit b38e9f26c3
6 changed files with 102 additions and 8 deletions
+54
View File
@@ -88,6 +88,60 @@ export class CatalogController {
return res;
}
@Get('data-asset')
async findByPipelineAndObject(@User() user: RequestUser, @Query() query) {
const { username, user_id, customer_id, customer_name, permissions } = user;
const { pipeline, object } = query;
this.logger.info(`/catalog - ON GET DATA ASSET BY PIPELINE AND OBJECT`, {
username,
customer_name,
});
if (!pipeline || !object) {
throw new HttpException('Query params not provided', 400);
}
const is_data_manager = permissions.includes(
PERMISSIONS_GROUPS.CATALOG.permissions.DATA_MANAGER.seqid,
);
let has_permission = false;
const metadata = PackTheMetadata({
username,
user_id: undefined,
customer_id,
customer_name,
});
const user_roles = await this.catalogService.getUserRolesIds(user_id);
const { data_asset } =
await this.catalogService.getOneDataAssetByPipelineAndObject({
pipeline: query.pipeline,
object: query.object,
customer_id,
metadata,
});
if (data_asset?.owner === username) has_permission = true;
for (const role of user_roles) {
if (data_asset.p_roles.includes(role)) has_permission = true;
}
if (data_asset.p_users.includes(user_id)) has_permission = true;
if (is_data_manager || has_permission) {
delete data_asset.p_roles;
delete data_asset.p_users;
return { data_asset };
}
throw new HttpException(
'You do not have permission to access this data asset.',
403,
);
}
@Get('tags')
@RequireSomePermission(
PERMISSIONS_GROUPS.CATALOG.permissions.GET,
+24
View File
@@ -197,6 +197,30 @@ class CatalogService implements OnModuleInit {
return { data_asset: asset[0] };
}
async getOneDataAssetByPipelineAndObject(data: {
customer_id: string;
pipeline: string;
object: string;
metadata: Metadata;
}) {
const { customer_id, metadata, pipeline, object } = data;
const { data_asset } = await lastValueFrom(
this.catalogReadService.GetOneDataAssetByPipelineAndObject(
{ pipeline, object },
metadata,
),
);
let asset = JSON.parse(data_asset);
asset = {
...asset,
p_roles: asset.roles,
p_users: asset.users,
};
asset = await this.getAssetsUsersAndRoles([asset], customer_id);
return { data_asset: asset[0] };
}
async updateOneDataAsset(data: {
data_asset_id: string;
customer_id: string;
+2
View File
@@ -122,6 +122,7 @@ export class UsersService implements OnModuleInit {
if (roleNames) {
await this.setRoles({ roleNames, userId: id }, customerId);
}
const metabaseUserId = '1';
const { user } = await lastValueFrom(
this.usersClientService.UserUpdate({
name,
@@ -131,6 +132,7 @@ export class UsersService implements OnModuleInit {
hierarchy,
jobTitle,
email,
metabaseUserId,
}),
);
return { user: this.adjustUsersPayload([user])[0] };