@things-factory/board-service 10.0.0-beta.71 → 10.0.0-beta.72
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/dist-server/migrations/1762190000000-AddSourceImportSessionToBoard.d.ts +11 -0
- package/dist-server/migrations/1762190000000-AddSourceImportSessionToBoard.js +45 -0
- package/dist-server/migrations/1762190000000-AddSourceImportSessionToBoard.js.map +1 -0
- package/dist-server/service/board/board.d.ts +6 -0
- package/dist-server/service/board/board.js +6 -0
- package/dist-server/service/board/board.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* Board.sourceImportSessionId — zero-to-twin import 로 생성된 보드의 source 추적.
|
|
4
|
+
* board-import 의 ImportSession.id 와 약결합 (string FK 없이).
|
|
5
|
+
* synchronize:true 환경에서는 entity 변경만으로 자동 적용되지만, 명시적 migration 으로
|
|
6
|
+
* synchronize:false 운영 환경도 커버.
|
|
7
|
+
*/
|
|
8
|
+
export declare class AddSourceImportSessionToBoard1762190000000 implements MigrationInterface {
|
|
9
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
10
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AddSourceImportSessionToBoard1762190000000 = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
/**
|
|
6
|
+
* Board.sourceImportSessionId — zero-to-twin import 로 생성된 보드의 source 추적.
|
|
7
|
+
* board-import 의 ImportSession.id 와 약결합 (string FK 없이).
|
|
8
|
+
* synchronize:true 환경에서는 entity 변경만으로 자동 적용되지만, 명시적 migration 으로
|
|
9
|
+
* synchronize:false 운영 환경도 커버.
|
|
10
|
+
*/
|
|
11
|
+
class AddSourceImportSessionToBoard1762190000000 {
|
|
12
|
+
async up(queryRunner) {
|
|
13
|
+
const table = await queryRunner.getTable('board');
|
|
14
|
+
if (!table)
|
|
15
|
+
return;
|
|
16
|
+
if (!table.findColumnByName('source_import_session_id')) {
|
|
17
|
+
await queryRunner.addColumn('board', new typeorm_1.TableColumn({
|
|
18
|
+
name: 'source_import_session_id',
|
|
19
|
+
type: 'varchar',
|
|
20
|
+
isNullable: true
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
const refreshed = await queryRunner.getTable('board');
|
|
24
|
+
if (refreshed && !refreshed.indices.find(i => i.name === 'ix_board_4')) {
|
|
25
|
+
await queryRunner.createIndex('board', new typeorm_1.TableIndex({
|
|
26
|
+
name: 'ix_board_4',
|
|
27
|
+
columnNames: ['source_import_session_id'],
|
|
28
|
+
isUnique: false
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async down(queryRunner) {
|
|
33
|
+
const table = await queryRunner.getTable('board');
|
|
34
|
+
if (!table)
|
|
35
|
+
return;
|
|
36
|
+
if (table.indices.find(i => i.name === 'ix_board_4')) {
|
|
37
|
+
await queryRunner.dropIndex('board', 'ix_board_4');
|
|
38
|
+
}
|
|
39
|
+
if (table.findColumnByName('source_import_session_id')) {
|
|
40
|
+
await queryRunner.dropColumn('board', 'source_import_session_id');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.AddSourceImportSessionToBoard1762190000000 = AddSourceImportSessionToBoard1762190000000;
|
|
45
|
+
//# sourceMappingURL=1762190000000-AddSourceImportSessionToBoard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"1762190000000-AddSourceImportSessionToBoard.js","sourceRoot":"","sources":["../../server/migrations/1762190000000-AddSourceImportSessionToBoard.ts"],"names":[],"mappings":";;;AAAA,qCAAkF;AAElF;;;;;GAKG;AACH,MAAa,0CAA0C;IAC9C,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACxD,MAAM,WAAW,CAAC,SAAS,CACzB,OAAO,EACP,IAAI,qBAAW,CAAC;gBACd,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,IAAI;aACjB,CAAC,CACH,CAAA;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACrD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;YACvE,MAAM,WAAW,CAAC,WAAW,CAC3B,OAAO,EACP,IAAI,oBAAU,CAAC;gBACb,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,CAAC,0BAA0B,CAAC;gBACzC,QAAQ,EAAE,KAAK;aAChB,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;YACrD,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QACpD,CAAC;QACD,IAAI,KAAK,CAAC,gBAAgB,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACvD,MAAM,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;CACF;AAxCD,gGAwCC","sourcesContent":["import { MigrationInterface, QueryRunner, TableColumn, TableIndex } from 'typeorm'\n\n/**\n * Board.sourceImportSessionId — zero-to-twin import 로 생성된 보드의 source 추적.\n * board-import 의 ImportSession.id 와 약결합 (string FK 없이).\n * synchronize:true 환경에서는 entity 변경만으로 자동 적용되지만, 명시적 migration 으로\n * synchronize:false 운영 환경도 커버.\n */\nexport class AddSourceImportSessionToBoard1762190000000 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const table = await queryRunner.getTable('board')\n if (!table) return\n\n if (!table.findColumnByName('source_import_session_id')) {\n await queryRunner.addColumn(\n 'board',\n new TableColumn({\n name: 'source_import_session_id',\n type: 'varchar',\n isNullable: true\n })\n )\n }\n\n const refreshed = await queryRunner.getTable('board')\n if (refreshed && !refreshed.indices.find(i => i.name === 'ix_board_4')) {\n await queryRunner.createIndex(\n 'board',\n new TableIndex({\n name: 'ix_board_4',\n columnNames: ['source_import_session_id'],\n isUnique: false\n })\n )\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const table = await queryRunner.getTable('board')\n if (!table) return\n\n if (table.indices.find(i => i.name === 'ix_board_4')) {\n await queryRunner.dropIndex('board', 'ix_board_4')\n }\n if (table.findColumnByName('source_import_session_id')) {\n await queryRunner.dropColumn('board', 'source_import_session_id')\n }\n }\n}\n"]}
|
|
@@ -14,6 +14,12 @@ export declare class Board {
|
|
|
14
14
|
model?: string;
|
|
15
15
|
thumbnail?: string;
|
|
16
16
|
sortOrder?: number;
|
|
17
|
+
/**
|
|
18
|
+
* 이 보드를 zero-to-twin import 로 만든 경우 source ImportSession.id 참조.
|
|
19
|
+
* 일반 사용자 작성 보드는 null. board-import 패키지의 ImportSession entity 와 약결합 —
|
|
20
|
+
* 모듈 의존을 강제하지 않기 위해 ManyToOne 대신 단순 string id 만 보관.
|
|
21
|
+
*/
|
|
22
|
+
sourceImportSessionId?: string;
|
|
17
23
|
group?: Group;
|
|
18
24
|
groupId?: string;
|
|
19
25
|
playGroups?: PlayGroup[];
|
|
@@ -91,6 +91,12 @@ tslib_1.__decorate([
|
|
|
91
91
|
(0, type_graphql_1.Field)({ nullable: true, description: 'Sort order for display. Lower values appear first. Supports fractional values for insertion.' }),
|
|
92
92
|
tslib_1.__metadata("design:type", Number)
|
|
93
93
|
], Board.prototype, "sortOrder", void 0);
|
|
94
|
+
tslib_1.__decorate([
|
|
95
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
96
|
+
(0, typeorm_1.Index)('ix_board_4', { unique: false }),
|
|
97
|
+
(0, type_graphql_1.Field)({ nullable: true, description: 'Source ImportSession id (board-import) when this board was generated from a drawing/image import.' }),
|
|
98
|
+
tslib_1.__metadata("design:type", String)
|
|
99
|
+
], Board.prototype, "sourceImportSessionId", void 0);
|
|
94
100
|
tslib_1.__decorate([
|
|
95
101
|
(0, typeorm_1.ManyToOne)(type => group_js_1.Group, group => group.boards),
|
|
96
102
|
(0, type_graphql_1.Field)(type => group_js_1.Group, { nullable: true, description: 'The group to which this board belongs.' }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../../server/service/board/board.ts"],"names":[],"mappings":";;;;AAAA,qCAWgB;AAChB,+CAAoD;AAEpD,iDAA8C;AAC9C,gDAAyC;AACzC,+DAAuD;AACvD,yDAAgD;AAChD,6CAA4C;AAE5C,MAAM,SAAS,GAAG,YAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;AAC7C,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAA;AAS7B,IAAM,KAAK,GAAX,MAAM,KAAK;IAAX;QAOL,YAAO,GAAY,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../../server/service/board/board.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToMany,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n DeleteDateColumn,\n UpdateDateColumn\n} from 'typeorm'\nimport { Field, ID, ObjectType } from 'type-graphql'\n\nimport { Domain } from '@things-factory/shell'\nimport { Group } from '../group/group.js'\nimport { PlayGroup } from '../play-group/play-group.js'\nimport { User } from '@things-factory/auth-base'\nimport { config } from '@things-factory/env'\n\nconst ORMCONFIG = config.get('ormconfig', {})\nconst DATABASE_TYPE = ORMCONFIG.type\n\n@Entity()\n@Index('ix_board_1', (board: Board) => [board.domain, board.name], {\n unique: true,\n where: '\"deleted_at\" IS NULL'\n})\n@Index('ix_board_3', (board: Board) => [board.domain, board.group])\n@ObjectType({ description: 'Represents a visual dashboard or display board.' })\nexport class Board {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID, { nullable: true, description: 'Unique identifier for the board.' })\n readonly id?: string\n\n @Column({ nullable: true, default: 1 })\n @Field({ nullable: true, description: 'The version of the board model.' })\n version?: number = 1\n\n @ManyToOne(type => Domain)\n @Field(type => Domain, { nullable: true, description: 'The domain to which this board belongs.' })\n domain?: Domain\n\n @RelationId((board: Board) => board.domain)\n domainId?: string\n\n @Column()\n @Field({ description: 'The name of the board.' })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true, description: 'A detailed description of the board.' })\n description?: string\n\n @Column({ nullable: true, default: 'main' })\n @Field({ nullable: true, description: \"The type of the board, can be 'main', 'sub', or 'popup'.\" })\n type?: 'main' | 'sub' | 'popup'\n\n @Column({ nullable: true, default: 'draft' })\n @Field({ nullable: true, description: \"The state of the board, can be 'draft' or 'released'.\" })\n state?: 'draft' | 'released'\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : DATABASE_TYPE == 'mssql'\n ? 'nvarchar'\n : 'varchar',\n length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined\n })\n @Field({ nullable: true, description: 'The JSON model defining the layout and components of the board.' })\n model?: string\n\n @Column({\n nullable: true,\n type:\n DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'\n ? 'longtext'\n : DATABASE_TYPE == 'oracle'\n ? 'clob'\n : DATABASE_TYPE == 'mssql'\n ? 'nvarchar'\n : 'varchar',\n length: DATABASE_TYPE == 'mssql' ? 'MAX' : undefined\n })\n @Field({ nullable: true, description: 'A base64 encoded thumbnail image of the board.' })\n thumbnail?: string\n\n @Column({ type: 'float', nullable: true, default: 0 })\n @Field({ nullable: true, description: 'Sort order for display. Lower values appear first. Supports fractional values for insertion.' })\n sortOrder?: number\n\n /**\n * 이 보드를 zero-to-twin import 로 만든 경우 source ImportSession.id 참조.\n * 일반 사용자 작성 보드는 null. board-import 패키지의 ImportSession entity 와 약결합 —\n * 모듈 의존을 강제하지 않기 위해 ManyToOne 대신 단순 string id 만 보관.\n */\n @Column({ nullable: true })\n @Index('ix_board_4', { unique: false })\n @Field({ nullable: true, description: 'Source ImportSession id (board-import) when this board was generated from a drawing/image import.' })\n sourceImportSessionId?: string\n\n @ManyToOne(type => Group, group => group.boards)\n @Field(type => Group, { nullable: true, description: 'The group to which this board belongs.' })\n group?: Group\n\n @RelationId((board: Board) => board.group)\n groupId?: string\n\n @ManyToMany(type => PlayGroup, playGroup => playGroup.boards)\n @Field(type => [PlayGroup], { nullable: true, description: 'A list of play groups that this board is a part of.' })\n playGroups?: PlayGroup[]\n\n @CreateDateColumn()\n @Field({ nullable: true, description: 'The timestamp when the board was created.' })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true, description: 'The timestamp when the board was last updated.' })\n updatedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'The user who created the board.' })\n creator?: User\n\n @RelationId((board: Board) => board.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true, description: 'The user who last updated the board.' })\n updater?: User\n\n @RelationId((board: Board) => board.updater)\n updaterId?: string\n\n @DeleteDateColumn()\n @Field({ nullable: true, description: 'The timestamp when the board was soft-deleted.' })\n deletedAt?: Date\n}\n"]}
|