@qrvey/assets-sharing 0.0.1
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/.eslintrc +88 -0
- package/README.md +18 -0
- package/dist/cjs/common/common.type.js +3 -0
- package/dist/cjs/common/common.type.js.map +1 -0
- package/dist/cjs/common/constants.js +37 -0
- package/dist/cjs/common/constants.js.map +1 -0
- package/dist/cjs/common/persistence/base.js +15 -0
- package/dist/cjs/common/persistence/base.js.map +1 -0
- package/dist/cjs/common/persistence/poolClient.js +11 -0
- package/dist/cjs/common/persistence/poolClient.js.map +1 -0
- package/dist/cjs/context.js +10 -0
- package/dist/cjs/context.js.map +1 -0
- package/dist/cjs/index.js +23 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/sharing/entities/details.js +109 -0
- package/dist/cjs/sharing/entities/details.js.map +1 -0
- package/dist/cjs/sharing/entities/sharing.js +63 -0
- package/dist/cjs/sharing/entities/sharing.js.map +1 -0
- package/dist/cjs/sharing/entities/types/details.type.js +3 -0
- package/dist/cjs/sharing/entities/types/details.type.js.map +1 -0
- package/dist/cjs/sharing/entities/types/sharing.type.js +3 -0
- package/dist/cjs/sharing/entities/types/sharing.type.js.map +1 -0
- package/dist/cjs/sharing/implementations/details.model.js +93 -0
- package/dist/cjs/sharing/implementations/details.model.js.map +1 -0
- package/dist/cjs/sharing/implementations/details.repository.js +63 -0
- package/dist/cjs/sharing/implementations/details.repository.js.map +1 -0
- package/dist/cjs/sharing/implementations/sharing.model.js +33 -0
- package/dist/cjs/sharing/implementations/sharing.model.js.map +1 -0
- package/dist/cjs/sharing/implementations/sharing.repository.js +31 -0
- package/dist/cjs/sharing/implementations/sharing.repository.js.map +1 -0
- package/dist/cjs/sharing/interfaces/details.interface.js +3 -0
- package/dist/cjs/sharing/interfaces/details.interface.js.map +1 -0
- package/dist/cjs/sharing/interfaces/sharingRepository.interface.js +3 -0
- package/dist/cjs/sharing/interfaces/sharingRepository.interface.js.map +1 -0
- package/dist/cjs/sharing/services/checkUserAccessLevel.js +44 -0
- package/dist/cjs/sharing/services/checkUserAccessLevel.js.map +1 -0
- package/dist/cjs/sharing/services/delete.js +32 -0
- package/dist/cjs/sharing/services/delete.js.map +1 -0
- package/dist/cjs/sharing/services/list.js +39 -0
- package/dist/cjs/sharing/services/list.js.map +1 -0
- package/dist/cjs/sharing/services/upsert.js +80 -0
- package/dist/cjs/sharing/services/upsert.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/index.mjs +631 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/types/index.d.ts +108 -0
- package/package.json +50 -0
- package/src/common/common.type.ts +27 -0
- package/src/common/constants.ts +36 -0
- package/src/common/persistence/base.ts +13 -0
- package/src/common/persistence/poolClient.ts +7 -0
- package/src/context.ts +17 -0
- package/src/index.ts +29 -0
- package/src/sharing/entities/details.ts +143 -0
- package/src/sharing/entities/sharing.ts +84 -0
- package/src/sharing/entities/types/details.type.ts +58 -0
- package/src/sharing/entities/types/sharing.type.ts +24 -0
- package/src/sharing/implementations/details.model.ts +93 -0
- package/src/sharing/implementations/details.repository.ts +85 -0
- package/src/sharing/implementations/sharing.model.ts +33 -0
- package/src/sharing/implementations/sharing.repository.ts +36 -0
- package/src/sharing/interfaces/details.interface.ts +45 -0
- package/src/sharing/interfaces/sharingRepository.interface.ts +32 -0
- package/src/sharing/services/checkUserAccessLevel.ts +40 -0
- package/src/sharing/services/delete.ts +24 -0
- package/src/sharing/services/list.ts +45 -0
- package/src/sharing/services/upsert.ts +111 -0
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +19 -0
- package/tsup.config.cjs.ts +11 -0
- package/tsup.config.esm.ts +12 -0
- package/tsup.config.types.ts +9 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/context.ts","../../src/sharing/implementations/details.model.ts","../../src/common/constants.ts","../../src/common/persistence/base.ts","../../src/common/persistence/poolClient.ts","../../src/sharing/implementations/details.repository.ts","../../src/sharing/implementations/sharing.model.ts","../../src/sharing/implementations/sharing.repository.ts","../../src/sharing/services/checkUserAccessLevel.ts","../../src/sharing/entities/details.ts","../../src/sharing/services/delete.ts","../../src/sharing/services/list.ts","../../src/sharing/services/upsert.ts","../../src/sharing/entities/sharing.ts"],"names":["ASSET_TYPE","SHARED_ORIGIN","SHARE_TYPE","ACCESS_LEVEL","CrudSchema","inject","injectable"],"mappings":"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","sourcesContent":["import 'reflect-metadata';\nimport { Context } from './context';\nimport { CheckUserAccessLevel } from './sharing/services/checkUserAccessLevel';\nimport { DeleteSharing } from './sharing/services/delete';\nimport { ListSharing } from './sharing/services/list';\nimport { UpsertSharing } from './sharing/services/upsert';\n\nexport const api = {\n upsert: (...args: Parameters<UpsertSharing['execute']>) =>\n Context.resolve(UpsertSharing).execute(...args),\n list: (...args: Parameters<ListSharing['execute']>) =>\n Context.resolve(ListSharing).execute(...args),\n delete: (...args: Parameters<DeleteSharing['execute']>) =>\n Context.resolve(DeleteSharing).execute(...args),\n};\n\nexport const checkUserAccessLevel = (\n ...args: Parameters<CheckUserAccessLevel['execute']>\n) => Context.resolve(CheckUserAccessLevel).execute(...args);\n\nexport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from './common/constants';\n\nexport { GetSharingList } from './sharing/entities/types/details.type';\n","import { container } from 'tsyringe';\n\nimport { SharingDetailsRepository } from './sharing/implementations/details.repository';\nimport { SharingRepository } from './sharing/implementations/sharing.repository';\nimport { type SharingDetailsRepositoryInterface } from './sharing/interfaces/details.interface';\nimport { type SharingRepositoryInterface } from './sharing/interfaces/sharingRepository.interface';\n\ncontainer.register<SharingRepositoryInterface>(\n 'SharingRepository',\n SharingRepository,\n);\ncontainer.register<SharingDetailsRepositoryInterface>(\n 'SharingDetailsRepository',\n SharingDetailsRepository,\n);\n\nexport const Context = container;\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingDetailsModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing_details`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing_details`,\n };\n\n static columns = {\n sharing_details_id: { type: 'string', primary: true },\n asset_id: { type: 'string' },\n access_level: { type: 'numeric' },\n org_id: { type: 'string' },\n shared_with: { type: 'string' },\n shared_type: { type: 'string' },\n shared_email: { type: 'string' },\n share_origin: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n };\n\n static indexes = {\n sharingDetailsOrgId: {\n name: 'sharing_details_org_id_index',\n columns: [\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsSharedWithAccessLevel: {\n name: 'sharing_details_shared_with_access_level_index',\n columns: [\n 'shared_with',\n 'access_level',\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelSharedWithOrgId: {\n name: 'sharing_details_access_level_shared_with_org_id_index',\n columns: [\n 'access_level',\n 'shared_with',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAccessLevelOrgId: {\n name: 'sharing_details_access_level_org_id_index',\n columns: [\n 'access_level',\n 'org_id',\n 'asset_id',\n 'sharing_details_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n sharingDetailsAssetId: {\n name: 'sharing_details_asset_id_index',\n columns: [\n 'asset_id',\n 'sharing_details_id',\n 'org_id',\n 'shared_with',\n 'shared_type',\n 'shared_email',\n 'share_origin',\n ],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","export const ENVIRONMENT = {\n SERVER_PREFIX: process.env.SERVER_PREFIX,\n TABLE_PREFIX: process.env.TABLE_PREFIX,\n};\n\nexport const DATABASE_INFO = {\n DATA_PERSISTENCE_SCHEMA: 'admin',\n SERVER_PREFIX: ENVIRONMENT.SERVER_PREFIX,\n TABLE_PREFIX: ENVIRONMENT.TABLE_PREFIX,\n};\n\nexport const ORGANIZATION_QRVEY = 'org:0';\n\nexport enum ASSET_TYPE {\n DX = 'DX',\n}\n\nexport enum SHARED_ORIGIN {\n INTERNAL = 'INTERNAL',\n EXTERNAL = 'EXTERNAL',\n}\n\nexport enum SHARE_TYPE {\n USER = 'USER',\n ROLE = 'ROLE',\n ORGANIZATION = 'ORGANIZATION',\n}\n\nexport enum ACCESS_LEVEL {\n NONE = 0,\n CAN_USE = 1,\n CAN_EDIT = 2,\n ADMIN = 4,\n}\n\nexport const LIMIT_PER_PAGE = 10;\n","import { CrudService, buildFilter } from '@qrvey/data-persistence';\n\nimport { getPoolClient } from './poolClient';\n\nexport class BaseRepository extends CrudService<any> {\n constructor(schema: any) {\n super(schema, getPoolClient());\n }\n\n filter(attribute: string, value: any) {\n return buildFilter(attribute, value);\n }\n}\n","import { getDbPool } from '@qrvey/data-persistence';\n\nlet poolClient: any;\nexport function getPoolClient() {\n if (!poolClient) poolClient = getDbPool();\n return poolClient;\n}\n","import { SharingDetailsModel } from './details.model';\nimport { ListInput, ListOutput, Pagination } from '../../common/common.type';\nimport { LIMIT_PER_PAGE } from '../../common/constants';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingDetailsTable } from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/details.interface';\n\nexport class SharingDetailsRepository\n extends BaseRepository\n implements SharingDetailsRepositoryInterface\n{\n constructor() {\n super(SharingDetailsModel);\n }\n\n async getOne(sharingDetailId: string): Promise<SharingDetailsTable | null> {\n const params = {\n filters: [this.filter('sharing_details_id', sharingDetailId)],\n };\n const response = await super.findItem(params);\n return response as SharingDetailsTable;\n }\n\n async getList(\n options: ListInput<{ assetId: string }>,\n ): Promise<ListOutput<SharingDetailsTable>> {\n const assetIndex = SharingDetailsModel.indexes.sharingDetailsAssetId;\n const pagination = this.getPagination(options.pagination);\n const params: {\n pagination: any;\n index: any;\n filters?: any;\n sorting?: any;\n } = {\n pagination,\n index: {\n indexName: assetIndex.name,\n columns: assetIndex.columns,\n },\n };\n\n const filterList = [this.filter('asset_id', options.data.assetId)];\n if (options.filters) {\n options.filters.forEach((filter) => {\n filterList.push(this.filter(filter.column, filter.value));\n });\n }\n params.filters = filterList;\n\n if (options.sorting) params.sorting = options.sorting;\n\n const response = await super.find(params);\n return response as ListOutput<SharingDetailsTable>;\n }\n\n async create(details: SharingDetailsTable): Promise<SharingDetailsTable> {\n const response = (await super.create(details)) as SharingDetailsTable;\n return response;\n }\n\n async patch(\n sharingDetailId: string,\n details: SharingDetailsTable,\n ): Promise<boolean> {\n await super.update(\n [this.filter('sharing_details_id', sharingDetailId)],\n details,\n );\n return true;\n }\n\n async delete(sharingDetailId: string): Promise<boolean> {\n await super.remove([\n this.filter('sharing_details_id', sharingDetailId),\n ]);\n return true;\n }\n\n private getPagination(options?: Pagination): Pagination {\n return {\n limit: options?.limit ?? LIMIT_PER_PAGE,\n from: options?.from ?? undefined,\n };\n }\n}\n","import { CrudSchema } from '@qrvey/data-persistence';\n\nimport { DATABASE_INFO } from '../../common/constants';\n\nexport class SharingModel extends CrudSchema {\n static table = {\n name: `${DATABASE_INFO.SERVER_PREFIX}_sharing`,\n alias: `${DATABASE_INFO.TABLE_PREFIX}_sharing`,\n };\n\n static columns = {\n asset_id: { type: 'string', primary: true },\n asset_type: { type: 'string' },\n created_at: { type: 'date' },\n updated_at: { type: 'date' },\n deleted_at: { type: 'date' },\n qvAttributes: { type: 'object' },\n };\n\n static indexes = {\n sharingAssetIdAssetType: {\n name: 'sharing_asset_id_asset_type_index',\n columns: ['asset_id', 'asset_type'],\n },\n sharingAssetType: {\n name: 'sharing_asset_type_index',\n columns: ['asset_type'],\n },\n };\n\n static schema = DATABASE_INFO.DATA_PERSISTENCE_SCHEMA;\n static usePool = true;\n}\n","import { SharingModel } from './sharing.model';\nimport { BaseRepository } from '../../common/persistence/base';\nimport { SharingTable } from '../entities/types/sharing.type';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport class SharingRepository\n extends BaseRepository\n implements SharingRepositoryInterface\n{\n constructor() {\n super(SharingModel);\n }\n\n async getOne(assetId: string): Promise<SharingTable | null> {\n const params = {\n filters: [this.filter('asset_id', assetId)],\n };\n const response = await super.findItem(params);\n return response as SharingTable;\n }\n\n async create(sharing: SharingTable): Promise<SharingTable> {\n const response = (await super.create(sharing)) as SharingTable;\n return response;\n }\n\n async patch(assetId: string, sharing: SharingTable): Promise<boolean> {\n await super.update([this.filter('asset_id', assetId)], sharing);\n return true;\n }\n\n async delete(assetId: string): Promise<boolean> {\n await super.remove([this.filter('asset_id', assetId)]);\n return true;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { ACCESS_LEVEL } from '../../common/constants';\nimport { SharingDetail } from '../entities/details';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/details.interface';\n\n@injectable()\nexport class CheckUserAccessLevel {\n constructor(\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n userId,\n orgId,\n assetId,\n }: {\n userId: string;\n orgId: string;\n assetId: string;\n }): Promise<{ level: ACCESS_LEVEL; levelAsText: string }> {\n const details = await this.detailsRepository.getList({\n data: { assetId },\n filters: [\n { column: 'shared_with', value: userId },\n { column: 'org_id', value: orgId },\n ],\n sorting: [{ column: 'access_level', direction: 'DESC' }],\n pagination: { limit: 1 },\n });\n if (details.items.length === 0)\n return { level: ACCESS_LEVEL.NONE, levelAsText: 'NONE' };\n const currentDetail = SharingDetail.parse(details.items[0]);\n return {\n level: currentDetail.getAccessLevel,\n levelAsText: currentDetail.getAccessLevelAsText,\n };\n }\n}\n","import { getId } from '@qrvey/id-generator';\n\nimport {\n BaseSharingDetails,\n CreateSharingDetails,\n ResponseSharingDetails,\n SharingDetailsTable,\n UpdateSharingDetails,\n} from './types/details.type';\nimport {\n ACCESS_LEVEL,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\n\nexport class SharingDetail {\n private sharingDetailsId: string;\n private assetId: string;\n private accessLevel: ACCESS_LEVEL;\n private accessLevelAsText: string;\n private orgId: string;\n private sharedWith: string;\n private sharedType: SHARE_TYPE;\n private sharedOrigin: SHARED_ORIGIN;\n private sharedEmail?: string;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharingDetails) {\n this.sharingDetailsId = params.sharingDetailsId;\n this.assetId = params.assetId;\n this.accessLevel = params.accessLevel;\n this.accessLevelAsText = this.convertAccessLevelToText(\n params.accessLevel,\n );\n this.orgId = params.orgId;\n this.sharedWith = params.sharedWith;\n this.sharedType = params.sharedType;\n this.sharedEmail = params.sharedEmail;\n this.sharedOrigin = params.sharedOrigin;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharingDetails): SharingDetail {\n const now = new Date().toISOString();\n const obj: BaseSharingDetails = {\n ...params,\n sharingDetailsId: params.sharedId ?? getId(),\n createdAt: now,\n updatedAt: now,\n };\n return new SharingDetail(obj);\n }\n\n static parse(params: SharingDetailsTable): SharingDetail {\n return new SharingDetail({\n sharingDetailsId: params.sharing_details_id,\n assetId: params.asset_id,\n accessLevel: params.access_level as ACCESS_LEVEL,\n orgId: params.org_id,\n sharedWith: params.shared_with,\n sharedType: params.shared_type as SHARE_TYPE,\n sharedEmail: params.shared_email,\n sharedOrigin: params.share_origin as SHARED_ORIGIN,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update(params: UpdateSharingDetails) {\n if (params.accessLevel) this.accessLevel = params.accessLevel;\n if (params.sharedEmail) this.sharedEmail = params.sharedEmail;\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingDetailsTable {\n return {\n sharing_details_id: this.sharingDetailsId,\n asset_id: this.assetId,\n access_level: this.accessLevel,\n org_id: this.orgId,\n shared_with: this.sharedWith,\n shared_type: this.sharedType,\n shared_email: this.sharedEmail,\n share_origin: this.sharedOrigin,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharingDetails {\n return {\n sharingDetailsId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharingDetails {\n return {\n sharedId: this.sharingDetailsId,\n assetId: this.assetId,\n accessLevel: this.accessLevel,\n accessLevelAsText: this.accessLevelAsText,\n orgId: this.orgId,\n sharedWith: this.sharedWith,\n sharedType: this.sharedType,\n sharedEmail: this.sharedEmail,\n sharedOrigin: this.sharedOrigin,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getSharingDetailsId(): string {\n return this.sharingDetailsId;\n }\n\n public get getAccessLevel(): ACCESS_LEVEL {\n return this.accessLevel;\n }\n\n public get getAccessLevelAsText(): string {\n return this.accessLevelAsText;\n }\n\n private convertAccessLevelToText(level: number): string {\n return ACCESS_LEVEL[level] ?? 'UNKNOWN';\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport interface Delete {\n assetId: string;\n}\n\n@injectable()\nexport class DeleteSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n ) {}\n\n public async execute({ body }: { body: Delete }): Promise<boolean | null> {\n const { assetId } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n const detailSharing = await this.sharingRepository.delete(assetId);\n return detailSharing;\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport { SharingDetail } from '../entities/details';\nimport {\n GetSharingList,\n ListSharingDetails,\n SharingDetailsTable,\n} from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/details.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\n@injectable()\nexport class ListSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: GetSharingList;\n }): Promise<ListSharingDetails | null> {\n const {\n data: { assetId },\n pagination,\n } = body;\n const sharing = await this.sharingRepository.getOne(assetId);\n\n if (!sharing) return null;\n const detailSharing = await this.detailsRepository.getList({\n data: { assetId },\n pagination,\n });\n const items = detailSharing.items.map((item) =>\n SharingDetail.parse(item as SharingDetailsTable).toJSON(),\n );\n return {\n ...detailSharing,\n items,\n };\n }\n}\n","import { inject, injectable } from 'tsyringe';\n\nimport {\n ACCESS_LEVEL,\n ASSET_TYPE,\n ORGANIZATION_QRVEY,\n SHARED_ORIGIN,\n SHARE_TYPE,\n} from '../../common/constants';\nimport { SharingDetail } from '../entities/details';\nimport { Sharing } from '../entities/sharing';\nimport { ResponseSharingDetails } from '../entities/types/details.type';\nimport { SharingDetailsRepositoryInterface } from '../interfaces/details.interface';\nimport { SharingRepositoryInterface } from '../interfaces/sharingRepository.interface';\n\nexport interface UpsertInterface {\n assetId: string;\n assetType: ASSET_TYPE;\n add?: Array<{\n sharedId?: string;\n sharedWith: string;\n sharedOrigin: SHARED_ORIGIN;\n accessLevel: ACCESS_LEVEL;\n orgId?: string;\n sharedEmail?: string;\n sharedType: SHARE_TYPE;\n }>;\n remove?: Array<{\n sharedId: string;\n }>;\n}\n\n@injectable()\nexport class UpsertSharing {\n constructor(\n @inject('SharingRepository')\n private readonly sharingRepository: SharingRepositoryInterface,\n @inject('SharingDetailsRepository')\n private readonly detailsRepository: SharingDetailsRepositoryInterface,\n ) {}\n\n public async execute({\n body,\n }: {\n body: UpsertInterface;\n }): Promise<ResponseSharingDetails[]> {\n const assetId = body.assetId;\n const sharing = await this.sharingRepository.getOne(assetId);\n let currentSharing: Sharing;\n if (sharing) {\n currentSharing = Sharing.parse(sharing);\n } else {\n const createSharing = {\n assetId: body.assetId,\n assetType: body.assetType,\n };\n currentSharing = Sharing.create(createSharing);\n await this.sharingRepository.create(currentSharing.toTable());\n }\n\n let updatedList: SharingDetail[] = [];\n if (body.add) updatedList = await this.addDetails(assetId, body.add);\n if (body.remove) await this.removeDetails(body.remove);\n\n currentSharing.update();\n await this.sharingRepository.patch(\n currentSharing.getAssetId,\n currentSharing.toTable(),\n );\n return updatedList.map((detail) => detail.toJSON());\n }\n\n private async addDetails(\n assetId: string,\n list: Required<UpsertInterface>['add'],\n ): Promise<SharingDetail[]> {\n const sharingList: SharingDetail[] = [];\n for (const detail of list) {\n let currentDetail: SharingDetail;\n const sharingDetail = !detail.sharedId\n ? null\n : await this.detailsRepository.getOne(detail.sharedId);\n if (sharingDetail) {\n currentDetail = SharingDetail.parse(sharingDetail);\n currentDetail.update(detail);\n await this.detailsRepository.patch(\n currentDetail.getSharingDetailsId,\n currentDetail.toTable(),\n );\n } else {\n const createDetails = {\n assetId: assetId,\n orgId: detail.orgId ?? ORGANIZATION_QRVEY, //TODO If shareOrigin is INTERNAL then `ORGANIZATION_QRVEY` else fail\n ...detail,\n };\n currentDetail = SharingDetail.create(createDetails);\n await this.detailsRepository.create(currentDetail.toTable());\n }\n sharingList.push(currentDetail);\n }\n return sharingList;\n }\n\n private async removeDetails(\n list: Required<UpsertInterface>['remove'],\n ): Promise<void> {\n for (const detail of list) {\n await this.detailsRepository.delete(detail.sharedId);\n }\n }\n}\n","import {\n BaseSharing,\n CreateSharing,\n ResponseSharing,\n SharingTable,\n} from './types/sharing.type';\nimport { ASSET_TYPE } from '../../common/constants';\n\nexport class Sharing {\n private assetId: string;\n private assetType: ASSET_TYPE;\n private createdAt: string;\n private updatedAt: string;\n private deletedAt?: string;\n\n constructor(params: BaseSharing) {\n this.assetId = params.assetId;\n this.assetType = params.assetType;\n this.createdAt = params.createdAt;\n this.updatedAt = params.updatedAt;\n this.deletedAt = params.deletedAt;\n }\n\n static create(params: CreateSharing): Sharing {\n const now = new Date().toISOString();\n const obj: BaseSharing = {\n ...params,\n createdAt: now,\n updatedAt: now,\n };\n return new Sharing(obj);\n }\n\n static parse(params: SharingTable): Sharing {\n return new Sharing({\n assetId: params.asset_id,\n assetType: params.asset_type as ASSET_TYPE,\n createdAt: params.created_at,\n updatedAt: params.updated_at,\n deletedAt: params.deleted_at,\n });\n }\n\n update() {\n this.updatedAt = new Date().toISOString();\n }\n\n toTable(): SharingTable {\n return {\n asset_id: this.assetId,\n asset_type: this.assetType,\n created_at: this.createdAt,\n updated_at: this.updatedAt,\n deleted_at: this.deletedAt,\n };\n }\n\n toPlain(): BaseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n deletedAt: this.deletedAt,\n };\n }\n\n toJSON(): ResponseSharing {\n return {\n assetId: this.assetId,\n assetType: this.assetType,\n createdAt: this.createdAt,\n updatedAt: this.updatedAt,\n };\n }\n\n public get getAssetId(): string {\n return this.assetId;\n }\n\n public get getAssetType(): string {\n return this.assetType;\n }\n}\n"]}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
declare const ORGANIZATION_QRVEY = "org:0";
|
|
2
|
+
declare enum ASSET_TYPE {
|
|
3
|
+
DX = "DX"
|
|
4
|
+
}
|
|
5
|
+
declare enum SHARED_ORIGIN {
|
|
6
|
+
INTERNAL = "INTERNAL",
|
|
7
|
+
EXTERNAL = "EXTERNAL"
|
|
8
|
+
}
|
|
9
|
+
declare enum SHARE_TYPE {
|
|
10
|
+
USER = "USER",
|
|
11
|
+
ROLE = "ROLE",
|
|
12
|
+
ORGANIZATION = "ORGANIZATION"
|
|
13
|
+
}
|
|
14
|
+
declare enum ACCESS_LEVEL {
|
|
15
|
+
NONE = 0,
|
|
16
|
+
CAN_USE = 1,
|
|
17
|
+
CAN_EDIT = 2,
|
|
18
|
+
ADMIN = 4
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
interface Delete {
|
|
22
|
+
assetId: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface Pagination {
|
|
26
|
+
limit: number;
|
|
27
|
+
from?: number;
|
|
28
|
+
}
|
|
29
|
+
interface Filter {
|
|
30
|
+
column: string;
|
|
31
|
+
value: string;
|
|
32
|
+
}
|
|
33
|
+
interface Sorting {
|
|
34
|
+
column: string;
|
|
35
|
+
direction: 'ASC' | 'DESC';
|
|
36
|
+
}
|
|
37
|
+
interface ListInput<T> {
|
|
38
|
+
data: T;
|
|
39
|
+
pagination?: Pagination;
|
|
40
|
+
filters?: Array<Filter>;
|
|
41
|
+
sorting?: Array<Sorting>;
|
|
42
|
+
}
|
|
43
|
+
interface ListOutput<T> {
|
|
44
|
+
count: number;
|
|
45
|
+
items: T[];
|
|
46
|
+
pagination: Pagination;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
interface BaseSharingDetails {
|
|
50
|
+
sharingDetailsId: string;
|
|
51
|
+
assetId: string;
|
|
52
|
+
accessLevel: ACCESS_LEVEL;
|
|
53
|
+
orgId: string;
|
|
54
|
+
sharedWith: string;
|
|
55
|
+
sharedType: SHARE_TYPE;
|
|
56
|
+
sharedOrigin: SHARED_ORIGIN;
|
|
57
|
+
sharedEmail?: string;
|
|
58
|
+
createdAt: string;
|
|
59
|
+
updatedAt: string;
|
|
60
|
+
deletedAt?: string;
|
|
61
|
+
}
|
|
62
|
+
type ResponseSharingDetails = Omit<BaseSharingDetails, 'sharingDetailsId' | 'deletedAt'> & {
|
|
63
|
+
sharedId: string;
|
|
64
|
+
accessLevelAsText: string;
|
|
65
|
+
};
|
|
66
|
+
type GetSharingList = ListInput<{
|
|
67
|
+
assetId: string;
|
|
68
|
+
}>;
|
|
69
|
+
type ListSharingDetails = ListOutput<ResponseSharingDetails>;
|
|
70
|
+
|
|
71
|
+
interface UpsertInterface {
|
|
72
|
+
assetId: string;
|
|
73
|
+
assetType: ASSET_TYPE;
|
|
74
|
+
add?: Array<{
|
|
75
|
+
sharedId?: string;
|
|
76
|
+
sharedWith: string;
|
|
77
|
+
sharedOrigin: SHARED_ORIGIN;
|
|
78
|
+
accessLevel: ACCESS_LEVEL;
|
|
79
|
+
orgId?: string;
|
|
80
|
+
sharedEmail?: string;
|
|
81
|
+
sharedType: SHARE_TYPE;
|
|
82
|
+
}>;
|
|
83
|
+
remove?: Array<{
|
|
84
|
+
sharedId: string;
|
|
85
|
+
}>;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
declare const api: {
|
|
89
|
+
upsert: (args_0: {
|
|
90
|
+
body: UpsertInterface;
|
|
91
|
+
}) => Promise<ResponseSharingDetails[]>;
|
|
92
|
+
list: (args_0: {
|
|
93
|
+
body: GetSharingList;
|
|
94
|
+
}) => Promise<ListSharingDetails | null>;
|
|
95
|
+
delete: (args_0: {
|
|
96
|
+
body: Delete;
|
|
97
|
+
}) => Promise<boolean | null>;
|
|
98
|
+
};
|
|
99
|
+
declare const checkUserAccessLevel: (args_0: {
|
|
100
|
+
userId: string;
|
|
101
|
+
orgId: string;
|
|
102
|
+
assetId: string;
|
|
103
|
+
}) => Promise<{
|
|
104
|
+
level: ACCESS_LEVEL;
|
|
105
|
+
levelAsText: string;
|
|
106
|
+
}>;
|
|
107
|
+
|
|
108
|
+
export { ACCESS_LEVEL, ASSET_TYPE, type GetSharingList, ORGANIZATION_QRVEY, SHARED_ORIGIN, SHARE_TYPE, api, checkUserAccessLevel };
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@qrvey/assets-sharing",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"types": "dist/types/index.d.ts",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": {
|
|
8
|
+
"import": "./dist/esm/index.mjs",
|
|
9
|
+
"require": "./dist/cjs/index.js",
|
|
10
|
+
"default": "./dist/cjs/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
|
|
15
|
+
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
|
16
|
+
"build:clean": "rm -rf dist",
|
|
17
|
+
"build:compile:original": "tsc -b ./tsconfig.cjs.json ./tsconfig.esm.json ./tsconfig.types.json",
|
|
18
|
+
"build:compile:cjs:original": "tsup --config ./tsup.config.cjs.ts",
|
|
19
|
+
"build:compile:cjs": "tsc -b ./tsconfig.cjs.json",
|
|
20
|
+
"build:compile:esm": "tsup --config ./tsup.config.esm.ts",
|
|
21
|
+
"build:compile:types": "tsup --config ./tsup.config.types.ts",
|
|
22
|
+
"build:compile": "yarn build:compile:cjs && yarn build:compile:esm && yarn build:compile:types",
|
|
23
|
+
"build": "yarn build:clean && yarn build:compile",
|
|
24
|
+
"prepare-publish": "yarn install && yarn build",
|
|
25
|
+
"publish-package": "yarn prepare-publish && npm publish"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@qrvey/data-persistence": "0.5.1",
|
|
29
|
+
"@qrvey/id-generator": "1.0.0",
|
|
30
|
+
"reflect-metadata": "0.2.2",
|
|
31
|
+
"tsyringe": "4.8.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"eslint": "8.48.0",
|
|
35
|
+
"eslint-import-resolver-typescript": "3.8.0",
|
|
36
|
+
"eslint-plugin-import": "2.31.0",
|
|
37
|
+
"tsup": "8.0.2",
|
|
38
|
+
"typescript": "5.7.3"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"sharing",
|
|
42
|
+
"qrvey"
|
|
43
|
+
],
|
|
44
|
+
"author": "Qrvey",
|
|
45
|
+
"license": "ISC",
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public",
|
|
48
|
+
"registry": "https://registry.npmjs.org"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface Pagination {
|
|
2
|
+
limit: number;
|
|
3
|
+
from?: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface Filter {
|
|
7
|
+
column: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface Sorting {
|
|
12
|
+
column: string;
|
|
13
|
+
direction: 'ASC' | 'DESC';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface ListInput<T> {
|
|
17
|
+
data: T;
|
|
18
|
+
pagination?: Pagination;
|
|
19
|
+
filters?: Array<Filter>;
|
|
20
|
+
sorting?: Array<Sorting>;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ListOutput<T> {
|
|
24
|
+
count: number;
|
|
25
|
+
items: T[];
|
|
26
|
+
pagination: Pagination;
|
|
27
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const ENVIRONMENT = {
|
|
2
|
+
SERVER_PREFIX: process.env.SERVER_PREFIX,
|
|
3
|
+
TABLE_PREFIX: process.env.TABLE_PREFIX,
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const DATABASE_INFO = {
|
|
7
|
+
DATA_PERSISTENCE_SCHEMA: 'admin',
|
|
8
|
+
SERVER_PREFIX: ENVIRONMENT.SERVER_PREFIX,
|
|
9
|
+
TABLE_PREFIX: ENVIRONMENT.TABLE_PREFIX,
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const ORGANIZATION_QRVEY = 'org:0';
|
|
13
|
+
|
|
14
|
+
export enum ASSET_TYPE {
|
|
15
|
+
DX = 'DX',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export enum SHARED_ORIGIN {
|
|
19
|
+
INTERNAL = 'INTERNAL',
|
|
20
|
+
EXTERNAL = 'EXTERNAL',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export enum SHARE_TYPE {
|
|
24
|
+
USER = 'USER',
|
|
25
|
+
ROLE = 'ROLE',
|
|
26
|
+
ORGANIZATION = 'ORGANIZATION',
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export enum ACCESS_LEVEL {
|
|
30
|
+
NONE = 0,
|
|
31
|
+
CAN_USE = 1,
|
|
32
|
+
CAN_EDIT = 2,
|
|
33
|
+
ADMIN = 4,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export const LIMIT_PER_PAGE = 10;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CrudService, buildFilter } from '@qrvey/data-persistence';
|
|
2
|
+
|
|
3
|
+
import { getPoolClient } from './poolClient';
|
|
4
|
+
|
|
5
|
+
export class BaseRepository extends CrudService<any> {
|
|
6
|
+
constructor(schema: any) {
|
|
7
|
+
super(schema, getPoolClient());
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
filter(attribute: string, value: any) {
|
|
11
|
+
return buildFilter(attribute, value);
|
|
12
|
+
}
|
|
13
|
+
}
|
package/src/context.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { container } from 'tsyringe';
|
|
2
|
+
|
|
3
|
+
import { SharingDetailsRepository } from './sharing/implementations/details.repository';
|
|
4
|
+
import { SharingRepository } from './sharing/implementations/sharing.repository';
|
|
5
|
+
import { type SharingDetailsRepositoryInterface } from './sharing/interfaces/details.interface';
|
|
6
|
+
import { type SharingRepositoryInterface } from './sharing/interfaces/sharingRepository.interface';
|
|
7
|
+
|
|
8
|
+
container.register<SharingRepositoryInterface>(
|
|
9
|
+
'SharingRepository',
|
|
10
|
+
SharingRepository,
|
|
11
|
+
);
|
|
12
|
+
container.register<SharingDetailsRepositoryInterface>(
|
|
13
|
+
'SharingDetailsRepository',
|
|
14
|
+
SharingDetailsRepository,
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export const Context = container;
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { Context } from './context';
|
|
3
|
+
import { CheckUserAccessLevel } from './sharing/services/checkUserAccessLevel';
|
|
4
|
+
import { DeleteSharing } from './sharing/services/delete';
|
|
5
|
+
import { ListSharing } from './sharing/services/list';
|
|
6
|
+
import { UpsertSharing } from './sharing/services/upsert';
|
|
7
|
+
|
|
8
|
+
export const api = {
|
|
9
|
+
upsert: (...args: Parameters<UpsertSharing['execute']>) =>
|
|
10
|
+
Context.resolve(UpsertSharing).execute(...args),
|
|
11
|
+
list: (...args: Parameters<ListSharing['execute']>) =>
|
|
12
|
+
Context.resolve(ListSharing).execute(...args),
|
|
13
|
+
delete: (...args: Parameters<DeleteSharing['execute']>) =>
|
|
14
|
+
Context.resolve(DeleteSharing).execute(...args),
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export const checkUserAccessLevel = (
|
|
18
|
+
...args: Parameters<CheckUserAccessLevel['execute']>
|
|
19
|
+
) => Context.resolve(CheckUserAccessLevel).execute(...args);
|
|
20
|
+
|
|
21
|
+
export {
|
|
22
|
+
ACCESS_LEVEL,
|
|
23
|
+
ASSET_TYPE,
|
|
24
|
+
ORGANIZATION_QRVEY,
|
|
25
|
+
SHARED_ORIGIN,
|
|
26
|
+
SHARE_TYPE,
|
|
27
|
+
} from './common/constants';
|
|
28
|
+
|
|
29
|
+
export { GetSharingList } from './sharing/entities/types/details.type';
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { getId } from '@qrvey/id-generator';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
BaseSharingDetails,
|
|
5
|
+
CreateSharingDetails,
|
|
6
|
+
ResponseSharingDetails,
|
|
7
|
+
SharingDetailsTable,
|
|
8
|
+
UpdateSharingDetails,
|
|
9
|
+
} from './types/details.type';
|
|
10
|
+
import {
|
|
11
|
+
ACCESS_LEVEL,
|
|
12
|
+
SHARED_ORIGIN,
|
|
13
|
+
SHARE_TYPE,
|
|
14
|
+
} from '../../common/constants';
|
|
15
|
+
|
|
16
|
+
export class SharingDetail {
|
|
17
|
+
private sharingDetailsId: string;
|
|
18
|
+
private assetId: string;
|
|
19
|
+
private accessLevel: ACCESS_LEVEL;
|
|
20
|
+
private accessLevelAsText: string;
|
|
21
|
+
private orgId: string;
|
|
22
|
+
private sharedWith: string;
|
|
23
|
+
private sharedType: SHARE_TYPE;
|
|
24
|
+
private sharedOrigin: SHARED_ORIGIN;
|
|
25
|
+
private sharedEmail?: string;
|
|
26
|
+
private createdAt: string;
|
|
27
|
+
private updatedAt: string;
|
|
28
|
+
private deletedAt?: string;
|
|
29
|
+
|
|
30
|
+
constructor(params: BaseSharingDetails) {
|
|
31
|
+
this.sharingDetailsId = params.sharingDetailsId;
|
|
32
|
+
this.assetId = params.assetId;
|
|
33
|
+
this.accessLevel = params.accessLevel;
|
|
34
|
+
this.accessLevelAsText = this.convertAccessLevelToText(
|
|
35
|
+
params.accessLevel,
|
|
36
|
+
);
|
|
37
|
+
this.orgId = params.orgId;
|
|
38
|
+
this.sharedWith = params.sharedWith;
|
|
39
|
+
this.sharedType = params.sharedType;
|
|
40
|
+
this.sharedEmail = params.sharedEmail;
|
|
41
|
+
this.sharedOrigin = params.sharedOrigin;
|
|
42
|
+
this.createdAt = params.createdAt;
|
|
43
|
+
this.updatedAt = params.updatedAt;
|
|
44
|
+
this.deletedAt = params.deletedAt;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static create(params: CreateSharingDetails): SharingDetail {
|
|
48
|
+
const now = new Date().toISOString();
|
|
49
|
+
const obj: BaseSharingDetails = {
|
|
50
|
+
...params,
|
|
51
|
+
sharingDetailsId: params.sharedId ?? getId(),
|
|
52
|
+
createdAt: now,
|
|
53
|
+
updatedAt: now,
|
|
54
|
+
};
|
|
55
|
+
return new SharingDetail(obj);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
static parse(params: SharingDetailsTable): SharingDetail {
|
|
59
|
+
return new SharingDetail({
|
|
60
|
+
sharingDetailsId: params.sharing_details_id,
|
|
61
|
+
assetId: params.asset_id,
|
|
62
|
+
accessLevel: params.access_level as ACCESS_LEVEL,
|
|
63
|
+
orgId: params.org_id,
|
|
64
|
+
sharedWith: params.shared_with,
|
|
65
|
+
sharedType: params.shared_type as SHARE_TYPE,
|
|
66
|
+
sharedEmail: params.shared_email,
|
|
67
|
+
sharedOrigin: params.share_origin as SHARED_ORIGIN,
|
|
68
|
+
createdAt: params.created_at,
|
|
69
|
+
updatedAt: params.updated_at,
|
|
70
|
+
deletedAt: params.deleted_at,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
update(params: UpdateSharingDetails) {
|
|
75
|
+
if (params.accessLevel) this.accessLevel = params.accessLevel;
|
|
76
|
+
if (params.sharedEmail) this.sharedEmail = params.sharedEmail;
|
|
77
|
+
this.updatedAt = new Date().toISOString();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
toTable(): SharingDetailsTable {
|
|
81
|
+
return {
|
|
82
|
+
sharing_details_id: this.sharingDetailsId,
|
|
83
|
+
asset_id: this.assetId,
|
|
84
|
+
access_level: this.accessLevel,
|
|
85
|
+
org_id: this.orgId,
|
|
86
|
+
shared_with: this.sharedWith,
|
|
87
|
+
shared_type: this.sharedType,
|
|
88
|
+
shared_email: this.sharedEmail,
|
|
89
|
+
share_origin: this.sharedOrigin,
|
|
90
|
+
created_at: this.createdAt,
|
|
91
|
+
updated_at: this.updatedAt,
|
|
92
|
+
deleted_at: this.deletedAt,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
toPlain(): BaseSharingDetails {
|
|
97
|
+
return {
|
|
98
|
+
sharingDetailsId: this.sharingDetailsId,
|
|
99
|
+
assetId: this.assetId,
|
|
100
|
+
accessLevel: this.accessLevel,
|
|
101
|
+
orgId: this.orgId,
|
|
102
|
+
sharedWith: this.sharedWith,
|
|
103
|
+
sharedType: this.sharedType,
|
|
104
|
+
sharedEmail: this.sharedEmail,
|
|
105
|
+
sharedOrigin: this.sharedOrigin,
|
|
106
|
+
createdAt: this.createdAt,
|
|
107
|
+
updatedAt: this.updatedAt,
|
|
108
|
+
deletedAt: this.deletedAt,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
toJSON(): ResponseSharingDetails {
|
|
113
|
+
return {
|
|
114
|
+
sharedId: this.sharingDetailsId,
|
|
115
|
+
assetId: this.assetId,
|
|
116
|
+
accessLevel: this.accessLevel,
|
|
117
|
+
accessLevelAsText: this.accessLevelAsText,
|
|
118
|
+
orgId: this.orgId,
|
|
119
|
+
sharedWith: this.sharedWith,
|
|
120
|
+
sharedType: this.sharedType,
|
|
121
|
+
sharedEmail: this.sharedEmail,
|
|
122
|
+
sharedOrigin: this.sharedOrigin,
|
|
123
|
+
createdAt: this.createdAt,
|
|
124
|
+
updatedAt: this.updatedAt,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
public get getSharingDetailsId(): string {
|
|
129
|
+
return this.sharingDetailsId;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
public get getAccessLevel(): ACCESS_LEVEL {
|
|
133
|
+
return this.accessLevel;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
public get getAccessLevelAsText(): string {
|
|
137
|
+
return this.accessLevelAsText;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private convertAccessLevelToText(level: number): string {
|
|
141
|
+
return ACCESS_LEVEL[level] ?? 'UNKNOWN';
|
|
142
|
+
}
|
|
143
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseSharing,
|
|
3
|
+
CreateSharing,
|
|
4
|
+
ResponseSharing,
|
|
5
|
+
SharingTable,
|
|
6
|
+
} from './types/sharing.type';
|
|
7
|
+
import { ASSET_TYPE } from '../../common/constants';
|
|
8
|
+
|
|
9
|
+
export class Sharing {
|
|
10
|
+
private assetId: string;
|
|
11
|
+
private assetType: ASSET_TYPE;
|
|
12
|
+
private createdAt: string;
|
|
13
|
+
private updatedAt: string;
|
|
14
|
+
private deletedAt?: string;
|
|
15
|
+
|
|
16
|
+
constructor(params: BaseSharing) {
|
|
17
|
+
this.assetId = params.assetId;
|
|
18
|
+
this.assetType = params.assetType;
|
|
19
|
+
this.createdAt = params.createdAt;
|
|
20
|
+
this.updatedAt = params.updatedAt;
|
|
21
|
+
this.deletedAt = params.deletedAt;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
static create(params: CreateSharing): Sharing {
|
|
25
|
+
const now = new Date().toISOString();
|
|
26
|
+
const obj: BaseSharing = {
|
|
27
|
+
...params,
|
|
28
|
+
createdAt: now,
|
|
29
|
+
updatedAt: now,
|
|
30
|
+
};
|
|
31
|
+
return new Sharing(obj);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static parse(params: SharingTable): Sharing {
|
|
35
|
+
return new Sharing({
|
|
36
|
+
assetId: params.asset_id,
|
|
37
|
+
assetType: params.asset_type as ASSET_TYPE,
|
|
38
|
+
createdAt: params.created_at,
|
|
39
|
+
updatedAt: params.updated_at,
|
|
40
|
+
deletedAt: params.deleted_at,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
update() {
|
|
45
|
+
this.updatedAt = new Date().toISOString();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
toTable(): SharingTable {
|
|
49
|
+
return {
|
|
50
|
+
asset_id: this.assetId,
|
|
51
|
+
asset_type: this.assetType,
|
|
52
|
+
created_at: this.createdAt,
|
|
53
|
+
updated_at: this.updatedAt,
|
|
54
|
+
deleted_at: this.deletedAt,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
toPlain(): BaseSharing {
|
|
59
|
+
return {
|
|
60
|
+
assetId: this.assetId,
|
|
61
|
+
assetType: this.assetType,
|
|
62
|
+
createdAt: this.createdAt,
|
|
63
|
+
updatedAt: this.updatedAt,
|
|
64
|
+
deletedAt: this.deletedAt,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
toJSON(): ResponseSharing {
|
|
69
|
+
return {
|
|
70
|
+
assetId: this.assetId,
|
|
71
|
+
assetType: this.assetType,
|
|
72
|
+
createdAt: this.createdAt,
|
|
73
|
+
updatedAt: this.updatedAt,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public get getAssetId(): string {
|
|
78
|
+
return this.assetId;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public get getAssetType(): string {
|
|
82
|
+
return this.assetType;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ListInput, ListOutput } from '../../../common/common.type';
|
|
2
|
+
import {
|
|
3
|
+
ACCESS_LEVEL,
|
|
4
|
+
SHARED_ORIGIN,
|
|
5
|
+
SHARE_TYPE,
|
|
6
|
+
} from '../../../common/constants';
|
|
7
|
+
|
|
8
|
+
export interface BaseSharingDetails {
|
|
9
|
+
sharingDetailsId: string;
|
|
10
|
+
assetId: string;
|
|
11
|
+
accessLevel: ACCESS_LEVEL;
|
|
12
|
+
orgId: string;
|
|
13
|
+
sharedWith: string;
|
|
14
|
+
sharedType: SHARE_TYPE;
|
|
15
|
+
sharedOrigin: SHARED_ORIGIN;
|
|
16
|
+
sharedEmail?: string;
|
|
17
|
+
createdAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
deletedAt?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export type CreateSharingDetails = Omit<
|
|
23
|
+
BaseSharingDetails,
|
|
24
|
+
'sharingDetailsId' | 'createdAt' | 'updatedAt' | 'deletedAt'
|
|
25
|
+
> & {
|
|
26
|
+
sharedId?: string; // `sharingDetailsId` is converted to `sharedId` for the API.
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type UpdateSharingDetails = Pick<
|
|
30
|
+
BaseSharingDetails,
|
|
31
|
+
'accessLevel' | 'sharedEmail'
|
|
32
|
+
>;
|
|
33
|
+
|
|
34
|
+
export type ResponseSharingDetails = Omit<
|
|
35
|
+
BaseSharingDetails,
|
|
36
|
+
'sharingDetailsId' | 'deletedAt'
|
|
37
|
+
> & {
|
|
38
|
+
sharedId: string; // `sharingDetailsId` is converted to `sharedId` to better legibility in the API.
|
|
39
|
+
accessLevelAsText: string;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export interface SharingDetailsTable {
|
|
43
|
+
sharing_details_id: string;
|
|
44
|
+
asset_id: string;
|
|
45
|
+
access_level: number;
|
|
46
|
+
org_id: string;
|
|
47
|
+
shared_with: string;
|
|
48
|
+
shared_type: string;
|
|
49
|
+
shared_email?: string;
|
|
50
|
+
share_origin: string;
|
|
51
|
+
created_at: string;
|
|
52
|
+
updated_at: string;
|
|
53
|
+
deleted_at?: string;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type GetSharingList = ListInput<{ assetId: string }>;
|
|
57
|
+
|
|
58
|
+
export type ListSharingDetails = ListOutput<ResponseSharingDetails>;
|