-
Notifications
You must be signed in to change notification settings - Fork 4
BINFR-6408: Add pull/push view-bookmarks commands #372
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
c022d18
c00a32a
981177c
23c406a
333ad7e
eb9122e
9c26621
036ae20
ec908ac
cca98d1
3c19c47
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| /** | ||
| * Commands related to the View feature. | ||
| */ | ||
|
|
||
| import { Configurator, IModule } from "../../core/command/module-handler"; | ||
| import { Context } from "../../core/command/cli-context"; | ||
| import { Command, OptionValues } from "commander"; | ||
| import { ViewBookmarksCommandService } from "./view-bookmarks-command.service"; | ||
|
|
||
| class Module extends IModule { | ||
|
|
||
| public register(context: Context, configurator: Configurator): void { | ||
| const pullCommand = configurator.command("pull"); | ||
| pullCommand | ||
| .command("view-bookmarks") | ||
| .description("Command to pull view bookmarks") | ||
| .option("--type <type>", "Type of view bookmarks to pull: USER (default), SHARED, or ALL") | ||
|
manjindersingh98 marked this conversation as resolved.
|
||
| .requiredOption("--id <id>", "ID of the view (board) to pull bookmarks from") | ||
| .action(this.pullViewBookmarks); | ||
|
|
||
| const pushCommand = configurator.command("push"); | ||
| pushCommand | ||
| .command("view-bookmarks") | ||
| .description("Command to push view bookmarks to a board") | ||
| .requiredOption("--id <id>", "ID of the view (board) to push bookmarks into") | ||
| .requiredOption("-f, --file <file>", "The file to push") | ||
| .action(this.pushViewBookmarks); | ||
| } | ||
|
|
||
| private async pullViewBookmarks(context: Context, command: Command, options: OptionValues): Promise<void> { | ||
| await new ViewBookmarksCommandService(context).pullViewBookmarks(options.id, options.type); | ||
| } | ||
|
|
||
| private async pushViewBookmarks(context: Context, command: Command, options: OptionValues): Promise<void> { | ||
| await new ViewBookmarksCommandService(context).pushViewBookmarks(options.id, options.file); | ||
| } | ||
| } | ||
|
|
||
| export = Module; | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| import { ViewBookmarksManagerFactory } from "./view-bookmarks.manager-factory"; | ||
| import { Context } from "../../core/command/cli-context"; | ||
|
|
||
| export class ViewBookmarksCommandService { | ||
| private viewBookmarksManagerFactory: ViewBookmarksManagerFactory; | ||
|
Check warning on line 5 in src/commands/view/view-bookmarks-command.service.ts
|
||
|
|
||
| constructor(context: Context) { | ||
| this.viewBookmarksManagerFactory = new ViewBookmarksManagerFactory(context); | ||
| } | ||
|
|
||
| public async pullViewBookmarks(boardId: string, type?: string): Promise<void> { | ||
| await this.viewBookmarksManagerFactory.createViewBookmarksManager(null, boardId, type).pull(); | ||
|
cursor[bot] marked this conversation as resolved.
|
||
| } | ||
|
|
||
| public async pushViewBookmarks(boardId: string, filename: string): Promise<void> { | ||
| await this.viewBookmarksManagerFactory.createViewBookmarksManager(filename, boardId).push(); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| import * as fs from "fs"; | ||
|
Check warning on line 1 in src/commands/view/view-bookmarks.manager-factory.ts
|
||
| import * as path from "path"; | ||
|
Check warning on line 2 in src/commands/view/view-bookmarks.manager-factory.ts
|
||
| import { ViewBookmarksManager } from "./view-bookmarks.manager"; | ||
| import { FatalError, logger } from "../../core/utils/logger"; | ||
| import { Context } from "../../core/command/cli-context"; | ||
|
|
||
| export class ViewBookmarksManagerFactory { | ||
|
|
||
| private readonly context: Context; | ||
|
|
||
| constructor(context: Context) { | ||
| this.context = context; | ||
| } | ||
|
|
||
| public createViewBookmarksManager( | ||
| filename: string, | ||
| boardId: string, | ||
| type?: string | ||
|
manjindersingh98 marked this conversation as resolved.
Outdated
|
||
| ): ViewBookmarksManager { | ||
| const viewBookmarksManager = new ViewBookmarksManager(this.context); | ||
| viewBookmarksManager.boardId = boardId; | ||
| type = (type ?? "USER").toUpperCase(); | ||
|
|
||
| viewBookmarksManager.type = type; | ||
| if (filename !== null) { | ||
| viewBookmarksManager.fileName = this.readFile(filename); | ||
| } | ||
| return viewBookmarksManager; | ||
| } | ||
|
|
||
| private readFile(fileName: string): string { | ||
|
manjindersingh98 marked this conversation as resolved.
Outdated
|
||
| if (!fs.existsSync(path.resolve(process.cwd(), fileName))) { | ||
| logger.error(new FatalError("The provided file does not exist")); | ||
| } | ||
| return path.resolve(process.cwd(), fileName); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| import * as fs from "fs"; | ||
|
Check warning on line 1 in src/commands/view/view-bookmarks.manager.ts
|
||
| import * as FormData from "form-data"; | ||
| import { Context } from "../../core/command/cli-context"; | ||
| import { BaseManager } from "../../core/http/http-shared/base.manager"; | ||
| import { ManagerConfig } from "../../core/http/http-shared/manager-config.interface"; | ||
|
|
||
| export class ViewBookmarksManager extends BaseManager { | ||
| private static BASE_URL = "/blueprint/api/bookmarks"; | ||
|
Check warning on line 8 in src/commands/view/view-bookmarks.manager.ts
|
||
| private static VIEW_BOOKMARKS_FILE_PREFIX = "studio_view_bookmarks_"; | ||
|
Check warning on line 9 in src/commands/view/view-bookmarks.manager.ts
|
||
|
|
||
| private _boardId: string; | ||
| private _fileName: string; | ||
| private _type: string; | ||
|
|
||
| constructor(context: Context) { | ||
| super(context); | ||
| } | ||
|
|
||
| public get fileName(): string { | ||
| return this._fileName; | ||
| } | ||
|
|
||
| public set fileName(value: string) { | ||
| this._fileName = value; | ||
| } | ||
|
|
||
| public get boardId(): string { | ||
| return this._boardId; | ||
| } | ||
|
|
||
| public set boardId(value: string) { | ||
| this._boardId = value; | ||
| } | ||
|
|
||
| public get type(): string { | ||
| return this._type; | ||
| } | ||
|
|
||
| public set type(value: string) { | ||
| this._type = value; | ||
| } | ||
|
|
||
| public getConfig(): ManagerConfig { | ||
| return { | ||
| pushUrl: `${ViewBookmarksManager.BASE_URL}/import?boardId=${encodeURIComponent(this.boardId)}`, | ||
| pullUrl: `${ViewBookmarksManager.BASE_URL}/export?boardId=${encodeURIComponent(this.boardId)}&type=${encodeURIComponent(this.type)}`, | ||
| exportFileName: `${ViewBookmarksManager.VIEW_BOOKMARKS_FILE_PREFIX}${this.boardId}.json`, | ||
| onPushSuccessMessage: (): string => { | ||
| return "View Bookmarks were pushed successfully."; | ||
| }, | ||
|
manjindersingh98 marked this conversation as resolved.
|
||
| }; | ||
| } | ||
|
|
||
| public getBody(): any { | ||
| const formData = new FormData(); | ||
| formData.append("file", fs.createReadStream(this.fileName)); | ||
| return formData; | ||
| } | ||
|
|
||
| protected getSerializedFileContent(data: any): string { | ||
| return JSON.stringify(data); | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.