@dssp/project 1.0.0-alpha.66 → 1.0.0-alpha.74
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-client/pages/project/project-detail.d.ts +2 -0
- package/dist-client/pages/project/project-detail.js +96 -31
- package/dist-client/pages/project/project-detail.js.map +1 -1
- package/dist-client/pages/project/project-list.d.ts +7 -0
- package/dist-client/pages/project/project-list.js.map +1 -1
- package/dist-client/pages/project/project-setting-list.d.ts +2 -0
- package/dist-client/pages/project/project-setting-list.js +29 -4
- package/dist-client/pages/project/project-setting-list.js.map +1 -1
- package/dist-client/pages/project/project-update.d.ts +8 -0
- package/dist-client/pages/project/project-update.js +109 -4
- package/dist-client/pages/project/project-update.js.map +1 -1
- package/dist-client/pages/resource/construction-type-management.js +14 -0
- package/dist-client/pages/resource/construction-type-management.js.map +1 -1
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
- package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
- package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
- package/dist-server/service/construction-type/construction-type-query.js +5 -10
- package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
- package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
- package/dist-server/service/construction-type/construction-type-type.js +4 -0
- package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
- package/dist-server/service/construction-type/construction-type.d.ts +1 -0
- package/dist-server/service/construction-type/construction-type.js +5 -0
- package/dist-server/service/construction-type/construction-type.js.map +1 -1
- package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
- package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
- package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
- package/dist-server/service/manager/manager-query.d.ts +1 -1
- package/dist-server/service/manager/manager-query.js +2 -6
- package/dist-server/service/manager/manager-query.js.map +1 -1
- package/dist-server/service/project/issue-project-code.d.ts +7 -0
- package/dist-server/service/project/issue-project-code.js +27 -0
- package/dist-server/service/project/issue-project-code.js.map +1 -0
- package/dist-server/service/project/project-mutation.d.ts +2 -0
- package/dist-server/service/project/project-mutation.js +90 -6
- package/dist-server/service/project/project-mutation.js.map +1 -1
- package/dist-server/service/project/project-query.d.ts +4 -2
- package/dist-server/service/project/project-query.js +50 -15
- package/dist-server/service/project/project-query.js.map +1 -1
- package/dist-server/service/project/project.d.ts +1 -0
- package/dist-server/service/project/project.js +9 -0
- package/dist-server/service/project/project.js.map +1 -1
- package/dist-server/service/resource/resource-mutation.js +5 -6
- package/dist-server/service/resource/resource-mutation.js.map +1 -1
- package/dist-server/service/resource/resource-query.d.ts +2 -2
- package/dist-server/service/resource/resource-query.js +5 -10
- package/dist-server/service/resource/resource-query.js.map +1 -1
- package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
- package/dist-server/service/task-resource/task-resource-query.js +4 -9
- package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
- package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
- package/dist-server/service/worker-type/worker-type-query.js +5 -10
- package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":";;;AAEA,6CAA4C;AAC5C,iDAA6D;AAC7D,yDAAgD;AAChD,yDAAwE;AAExE,MAAM,iBAAiB,GAAG;IACxB;QACE,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,SAAS;gBACtB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;SACF;KACF;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI;gBACjB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;SACF;KACF;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,IAAI;QACjB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EAAE,WAAW;gBACxB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,YAAY;gBACzB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EAAE,WAAW;gBACxB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,YAAY;gBACzB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,CAAC;aACR;YACD;gBACE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"1723861466414-seed-codes.js","sourceRoot":"","sources":["../../server/migrations/1723861466414-seed-codes.ts"],"names":[],"mappings":"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","sourcesContent":["import { MigrationInterface, QueryRunner } from 'typeorm'\n\nimport { logger } from '@things-factory/env'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { CommonCode, CommonCodeDetail } from '@things-factory/code-base'\n\nconst SEED_COMMON_CODES = [\n {\n name: 'EMPLOYEE_TYPE',\n description: '직원 유형',\n details: [\n {\n name: 'FULLTIME',\n description: '풀타임 정규직',\n labels: null,\n rank: 1\n },\n {\n name: 'PARTTIME',\n description: '파트타임 정규직',\n labels: null,\n rank: 2\n },\n {\n name: 'TEMPORARY',\n description: '임시직',\n labels: null,\n rank: 3\n }\n ]\n },\n {\n name: 'JOB_POSITION',\n description: '직급',\n details: [\n {\n name: '임원',\n description: '임원',\n labels: null,\n rank: 1\n },\n {\n name: '직원',\n description: '직원',\n labels: null,\n rank: 2\n }\n ]\n },\n {\n name: 'JOB_RESPONSIBILITY',\n description: '직책',\n details: [\n {\n name: 'ADMIN',\n description: '관리자',\n labels: null,\n rank: 1\n },\n {\n name: 'OVERALL_SUPERVISORY',\n description: '총괄 감리 책임자',\n labels: null,\n rank: 2\n },\n {\n name: 'TASK_SUPERVISORY',\n description: '공종별 감리 책임자',\n labels: null,\n rank: 3\n },\n {\n name: 'OVERALL_CONSTRUCTOR',\n description: '총괄 시공 책임자',\n labels: null,\n rank: 4\n },\n {\n name: 'TASK_CONSTRUCTOR',\n description: '공종별 시공 관리자',\n labels: null,\n rank: 5\n },\n {\n name: 'ARCHITECT',\n description: '설계사',\n labels: null,\n rank: 6\n },\n {\n name: 'CONSTRUCTOR',\n description: '시공자',\n labels: null,\n rank: 7\n }\n ]\n }\n]\n\nexport class SeedCodes1723861466414 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n const commonCodeRepository = getRepository(CommonCode)\n const commonCodeDetailRepository = getRepository(CommonCodeDetail)\n const domainRepository = getRepository(Domain)\n const userRepository = getRepository(User)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n const user = await userRepository.findOne({ where: { id: domain.owner } })\n\n try {\n for (let i = 0; i < SEED_COMMON_CODES.length; i++) {\n const { name, description, details } = SEED_COMMON_CODES[i]\n\n const commonCode = await commonCodeRepository.save({\n domain,\n name,\n description,\n creator: user,\n updater: user\n })\n\n for (const commonCodeDetail of details) {\n const { name, description, labels, rank } = commonCodeDetail\n\n await commonCodeDetailRepository.save({\n domain,\n commonCode,\n name,\n description,\n labels,\n rank\n })\n }\n }\n } catch (e) {\n logger.error(e)\n }\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n const domainRepository = getRepository(Domain)\n\n const domain: Domain = await domainRepository.findOne({\n where: { name: 'SYSTEM' }\n })\n\n const repository = getRepository(CommonCode)\n\n SEED_COMMON_CODES.reverse().forEach(async commonCode => {\n let record = await repository.findOne({ where: { name: commonCode.name, domain: { id: domain.id } } })\n record && (await repository.remove(record))\n })\n }\n}\n"]}
|
|
@@ -4,8 +4,8 @@ import { ConstructionType } from './construction-type';
|
|
|
4
4
|
import { ConstructionTypeList } from './construction-type-type';
|
|
5
5
|
import { ConstructionDetailType } from '../construction-detail-type/construction-detail-type';
|
|
6
6
|
export declare class ConstructionTypeQuery {
|
|
7
|
-
constructionType(id: string
|
|
8
|
-
constructionTypes(params: ListParam
|
|
7
|
+
constructionType(id: string): Promise<ConstructionType>;
|
|
8
|
+
constructionTypes(params: ListParam): Promise<ConstructionTypeList>;
|
|
9
9
|
constructionDetailTypes(constructionType: ConstructionType): Promise<ConstructionDetailType[]>;
|
|
10
10
|
domain(constructionType: ConstructionType): Promise<Domain>;
|
|
11
11
|
updater(constructionType: ConstructionType): Promise<User>;
|
|
@@ -9,16 +9,13 @@ const construction_type_1 = require("./construction-type");
|
|
|
9
9
|
const construction_type_type_1 = require("./construction-type-type");
|
|
10
10
|
const construction_detail_type_1 = require("../construction-detail-type/construction-detail-type");
|
|
11
11
|
let ConstructionTypeQuery = class ConstructionTypeQuery {
|
|
12
|
-
async constructionType(id
|
|
13
|
-
const { domain } = context.state;
|
|
12
|
+
async constructionType(id) {
|
|
14
13
|
return await (0, shell_1.getRepository)(construction_type_1.ConstructionType).findOne({
|
|
15
|
-
where: {
|
|
14
|
+
where: { id }
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
|
-
async constructionTypes(params
|
|
19
|
-
const { domain } = context.state;
|
|
17
|
+
async constructionTypes(params) {
|
|
20
18
|
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
21
|
-
domain,
|
|
22
19
|
params,
|
|
23
20
|
repository: await (0, shell_1.getRepository)(construction_type_1.ConstructionType)
|
|
24
21
|
});
|
|
@@ -45,17 +42,15 @@ exports.ConstructionTypeQuery = ConstructionTypeQuery;
|
|
|
45
42
|
tslib_1.__decorate([
|
|
46
43
|
(0, type_graphql_1.Query)(returns => construction_type_1.ConstructionType, { nullable: true, description: 'To fetch a ConstructionType' }),
|
|
47
44
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
48
|
-
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
49
45
|
tslib_1.__metadata("design:type", Function),
|
|
50
|
-
tslib_1.__metadata("design:paramtypes", [String
|
|
46
|
+
tslib_1.__metadata("design:paramtypes", [String]),
|
|
51
47
|
tslib_1.__metadata("design:returntype", Promise)
|
|
52
48
|
], ConstructionTypeQuery.prototype, "constructionType", null);
|
|
53
49
|
tslib_1.__decorate([
|
|
54
50
|
(0, type_graphql_1.Query)(returns => construction_type_type_1.ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' }),
|
|
55
51
|
tslib_1.__param(0, (0, type_graphql_1.Args)()),
|
|
56
|
-
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
57
52
|
tslib_1.__metadata("design:type", Function),
|
|
58
|
-
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam
|
|
53
|
+
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam]),
|
|
59
54
|
tslib_1.__metadata("design:returntype", Promise)
|
|
60
55
|
], ConstructionTypeQuery.prototype, "constructionTypes", null);
|
|
61
56
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construction-type-query.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AACnF,iDAAuG;AACvG,yDAAgD;AAChD,2DAAsD;AACtD,qEAA+D;AAC/D,mGAA6F;AAGtF,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAE1B,AAAN,KAAK,CAAC,gBAAgB,CAAY,EAAU
|
|
1
|
+
{"version":3,"file":"construction-type-query.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionType } from './construction-type'\nimport { ConstructionTypeList } from './construction-type-type'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Resolver(ConstructionType)\nexport class ConstructionTypeQuery {\n @Query(returns => ConstructionType!, { nullable: true, description: 'To fetch a ConstructionType' })\n async constructionType(@Arg('id') id: string): Promise<ConstructionType> {\n return await getRepository(ConstructionType).findOne({\n where: { id }\n })\n }\n\n @Query(returns => ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' })\n async constructionTypes(@Args() params: ListParam): Promise<ConstructionTypeList> {\n const queryBuilder = getQueryBuilderFromListParams({\n params,\n repository: await getRepository(ConstructionType)\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [ConstructionDetailType])\n async constructionDetailTypes(@Root() constructionType: ConstructionType): Promise<ConstructionDetailType[]> {\n return await getRepository(ConstructionDetailType).find({\n where: { constructionType: { id: constructionType.id } },\n order: { sequence: 'ASC' }\n })\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() constructionType: ConstructionType): Promise<Domain> {\n return await getRepository(Domain).findOneBy({ id: constructionType.domainId })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() constructionType: ConstructionType): Promise<User> {\n return await getRepository(User).findOneBy({ id: constructionType.creatorId })\n }\n}\n"]}
|
|
@@ -19,6 +19,10 @@ tslib_1.__decorate([
|
|
|
19
19
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
20
20
|
tslib_1.__metadata("design:type", String)
|
|
21
21
|
], ConstructionTypePatch.prototype, "description", void 0);
|
|
22
|
+
tslib_1.__decorate([
|
|
23
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
24
|
+
tslib_1.__metadata("design:type", String)
|
|
25
|
+
], ConstructionTypePatch.prototype, "projectType", void 0);
|
|
22
26
|
tslib_1.__decorate([
|
|
23
27
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
24
28
|
tslib_1.__metadata("design:type", String)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construction-type-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2DAAsD;AAG/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;
|
|
1
|
+
{"version":3,"file":"construction-type-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type-type.ts"],"names":[],"mappings":";;;;AAAA,+CAAoE;AACpE,2DAAsD;AAG/C,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;CAejC,CAAA;AAfY,sDAAqB;AAEhC;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;iDAC3B;AAGX;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACb;AAGb;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACN;AAGpB;IADC,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACX;gCAdJ,qBAAqB;IADjC,IAAA,wBAAS,GAAE;GACC,qBAAqB,CAejC;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;CAMhC,CAAA;AANY,oDAAoB;AAE/B;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,oCAAgB,CAAC,CAAC;;mDACT;AAGzB;IADC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;mDACN;+BALF,oBAAoB;IADhC,IAAA,yBAAU,GAAE;GACA,oBAAoB,CAMhC","sourcesContent":["import { ObjectType, Field, InputType, Int, ID } from 'type-graphql'\nimport { ConstructionType } from './construction-type'\n\n@InputType()\nexport class ConstructionTypePatch {\n @Field(type => ID, { nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n projectType?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ConstructionTypeList {\n @Field(type => [ConstructionType])\n items: ConstructionType[]\n\n @Field(type => Int)\n total: number\n}\n"]}
|
|
@@ -34,6 +34,11 @@ tslib_1.__decorate([
|
|
|
34
34
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
35
35
|
tslib_1.__metadata("design:type", String)
|
|
36
36
|
], ConstructionType.prototype, "description", void 0);
|
|
37
|
+
tslib_1.__decorate([
|
|
38
|
+
(0, typeorm_1.Column)({ nullable: true, default: 'DSSP' }),
|
|
39
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
40
|
+
tslib_1.__metadata("design:type", String)
|
|
41
|
+
], ConstructionType.prototype, "projectType", void 0);
|
|
37
42
|
tslib_1.__decorate([
|
|
38
43
|
(0, type_graphql_1.Field)(() => [construction_detail_type_1.ConstructionDetailType], { nullable: true }),
|
|
39
44
|
(0, typeorm_1.OneToMany)(() => construction_detail_type_1.ConstructionDetailType, constructionDetailType => constructionDetailType.constructionType),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"construction-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type.ts"],"names":[],"mappings":";;;;AAAA,qCAWgB;AAChB,+CAAoD;AACpD,iDAA8C;AAC9C,yDAAgD;AAChD,mGAA6F;AAQtF,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;
|
|
1
|
+
{"version":3,"file":"construction-type.js","sourceRoot":"","sources":["../../../server/service/construction-type/construction-type.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CreateDateColumn,\n UpdateDateColumn,\n DeleteDateColumn,\n Entity,\n Index,\n Column,\n RelationId,\n ManyToOne,\n PrimaryGeneratedColumn,\n OneToMany\n} from 'typeorm'\nimport { ObjectType, Field, ID } from 'type-graphql'\nimport { Domain } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { ConstructionDetailType } from '../construction-detail-type/construction-detail-type'\n\n@Entity()\n@Index('ix_construction_type_0', (constructionType: ConstructionType) => [constructionType.domain, constructionType.name], {\n unique: true,\n where: '\"deleted_at\" IS NULL'\n})\n@ObjectType({ description: '공종 타입' })\nexport class ConstructionType {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain?: Domain\n\n @RelationId((constructionType: ConstructionType) => constructionType.domain)\n domainId?: string\n\n @Column()\n @Field({ nullable: true })\n name?: string\n\n @Column({ nullable: true })\n @Field({ nullable: true })\n description?: string\n\n @Column({ nullable: true, default: 'DSSP' })\n @Field({ nullable: true })\n projectType?: string\n\n // 상세 공종 정보 (하위 테이블 참조)\n @Field(() => [ConstructionDetailType], { nullable: true })\n @OneToMany(() => ConstructionDetailType, constructionDetailType => constructionDetailType.constructionType)\n constructionDetailTypes?: ConstructionDetailType[]\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt?: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt?: Date\n\n @DeleteDateColumn()\n @Field({ nullable: true })\n deletedAt?: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n creator?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.creator)\n creatorId?: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field(type => User, { nullable: true })\n updater?: User\n\n @RelationId((constructionType: ConstructionType) => constructionType.updater)\n updaterId?: string\n}\n"]}
|
|
@@ -4,8 +4,8 @@ import { InspectionDrawingType } from './inspection-drawing-type';
|
|
|
4
4
|
import { InspectionDrawingTypeList } from './inspection-drawing-type-type';
|
|
5
5
|
import { InspectionPart } from '../inspection-part/inspection-part';
|
|
6
6
|
export declare class InspectionDrawingTypeQuery {
|
|
7
|
-
inspectionDrawingType(id: string
|
|
8
|
-
inspectionDrawingTypes(params: ListParam
|
|
7
|
+
inspectionDrawingType(id: string): Promise<InspectionDrawingType>;
|
|
8
|
+
inspectionDrawingTypes(params: ListParam): Promise<InspectionDrawingTypeList>;
|
|
9
9
|
inspectionParts(inspectionDrawingType: InspectionDrawingType): Promise<InspectionPart[]>;
|
|
10
10
|
updater(inspectionDrawingType: InspectionDrawingType): Promise<User>;
|
|
11
11
|
creator(inspectionDrawingType: InspectionDrawingType): Promise<User>;
|
|
@@ -9,16 +9,13 @@ const inspection_drawing_type_1 = require("./inspection-drawing-type");
|
|
|
9
9
|
const inspection_drawing_type_type_1 = require("./inspection-drawing-type-type");
|
|
10
10
|
const inspection_part_1 = require("../inspection-part/inspection-part");
|
|
11
11
|
let InspectionDrawingTypeQuery = class InspectionDrawingTypeQuery {
|
|
12
|
-
async inspectionDrawingType(id
|
|
13
|
-
const { domain } = context.state;
|
|
12
|
+
async inspectionDrawingType(id) {
|
|
14
13
|
return await (0, shell_1.getRepository)(inspection_drawing_type_1.InspectionDrawingType).findOne({
|
|
15
|
-
where: {
|
|
14
|
+
where: { id }
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
|
-
async inspectionDrawingTypes(params
|
|
19
|
-
const { domain } = context.state;
|
|
17
|
+
async inspectionDrawingTypes(params) {
|
|
20
18
|
const queryBuilder = (0, shell_1.getQueryBuilderFromListParams)({
|
|
21
|
-
domain,
|
|
22
19
|
params,
|
|
23
20
|
repository: await (0, shell_1.getRepository)(inspection_drawing_type_1.InspectionDrawingType),
|
|
24
21
|
searchables: ['name']
|
|
@@ -43,17 +40,15 @@ exports.InspectionDrawingTypeQuery = InspectionDrawingTypeQuery;
|
|
|
43
40
|
tslib_1.__decorate([
|
|
44
41
|
(0, type_graphql_1.Query)(returns => inspection_drawing_type_1.InspectionDrawingType, { nullable: true, description: 'To fetch a InspectionDrawingType' }),
|
|
45
42
|
tslib_1.__param(0, (0, type_graphql_1.Arg)('id')),
|
|
46
|
-
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
47
43
|
tslib_1.__metadata("design:type", Function),
|
|
48
|
-
tslib_1.__metadata("design:paramtypes", [String
|
|
44
|
+
tslib_1.__metadata("design:paramtypes", [String]),
|
|
49
45
|
tslib_1.__metadata("design:returntype", Promise)
|
|
50
46
|
], InspectionDrawingTypeQuery.prototype, "inspectionDrawingType", null);
|
|
51
47
|
tslib_1.__decorate([
|
|
52
48
|
(0, type_graphql_1.Query)(returns => inspection_drawing_type_type_1.InspectionDrawingTypeList, { description: 'To fetch multiple InspectionDrawingTypes' }),
|
|
53
49
|
tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
|
|
54
|
-
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
55
50
|
tslib_1.__metadata("design:type", Function),
|
|
56
|
-
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam
|
|
51
|
+
tslib_1.__metadata("design:paramtypes", [shell_1.ListParam]),
|
|
57
52
|
tslib_1.__metadata("design:returntype", Promise)
|
|
58
53
|
], InspectionDrawingTypeQuery.prototype, "inspectionDrawingTypes", null);
|
|
59
54
|
tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspection-drawing-type-query.js","sourceRoot":"","sources":["../../../server/service/inspection-drawing-type/inspection-drawing-type-query.ts"],"names":[],"mappings":";;;;AAAA,+CAA8F;AAC9F,iDAAuG;AACvG,yDAAgD;AAChD,uEAAiE;AACjE,iFAA0E;AAC1E,wEAAmE;AAG5D,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAE/B,AAAN,KAAK,CAAC,qBAAqB,CAAY,EAAU
|
|
1
|
+
{"version":3,"file":"inspection-drawing-type-query.js","sourceRoot":"","sources":["../../../server/service/inspection-drawing-type/inspection-drawing-type-query.ts"],"names":[],"mappings":";;;;AAAA,+CAA8F;AAC9F,iDAAuG;AACvG,yDAAgD;AAChD,uEAAiE;AACjE,iFAA0E;AAC1E,wEAAmE;AAG5D,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAE/B,AAAN,KAAK,CAAC,qBAAqB,CAAY,EAAU;QAC/C,OAAO,MAAM,IAAA,qBAAa,EAAC,+CAAqB,CAAC,CAAC,OAAO,CAAC;YACxD,KAAK,EAAE,EAAE,EAAE,EAAE;SACd,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,sBAAsB,CAA0B,MAAiB;QACrE,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,MAAM;YACN,UAAU,EAAE,MAAM,IAAA,qBAAa,EAAC,+CAAqB,CAAC;YACtD,WAAW,EAAE,CAAC,MAAM,CAAC;SACtB,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,eAAe,EAAE,CAAA;QAE3D,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGK,AAAN,KAAK,CAAC,eAAe,CAAS,qBAA4C;QACxE,OAAO,MAAM,IAAA,qBAAa,EAAC,gCAAc,CAAC,CAAC,IAAI,CAAC;YAC9C,KAAK,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,EAAE,qBAAqB,CAAC,EAAE,EAAE,EAAE;YAClE,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,qBAA4C;QAChE,OAAO,qBAAqB,CAAC,SAAS,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC1H,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,qBAA4C;QAChE,OAAO,qBAAqB,CAAC,SAAS,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAC1H,CAAC;CACF,CAAA;AAtCY,gEAA0B;AAE/B;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,+CAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,kCAAkC,EAAE,CAAC;IACjF,mBAAA,IAAA,kBAAG,EAAC,IAAI,CAAC,CAAA;;;;uEAIrC;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,wDAAyB,EAAE,EAAE,WAAW,EAAE,0CAA0C,EAAE,CAAC;IAC3E,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;;6CAAS,iBAAS;;wEAUtE;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,gCAAc,CAAC,CAAC;IACjB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAwB,+CAAqB;;iEAKzE;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAwB,+CAAqB;;yDAEjE;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAwB,+CAAqB;;yDAEjE;qCArCU,0BAA0B;IADtC,IAAA,uBAAQ,EAAC,+CAAqB,CAAC;GACnB,0BAA0B,CAsCtC","sourcesContent":["import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport { InspectionDrawingType } from './inspection-drawing-type'\nimport { InspectionDrawingTypeList } from './inspection-drawing-type-type'\nimport { InspectionPart } from '../inspection-part/inspection-part'\n\n@Resolver(InspectionDrawingType)\nexport class InspectionDrawingTypeQuery {\n @Query(returns => InspectionDrawingType!, { nullable: true, description: 'To fetch a InspectionDrawingType' })\n async inspectionDrawingType(@Arg('id') id: string): Promise<InspectionDrawingType> {\n return await getRepository(InspectionDrawingType).findOne({\n where: { id }\n })\n }\n\n @Query(returns => InspectionDrawingTypeList, { description: 'To fetch multiple InspectionDrawingTypes' })\n async inspectionDrawingTypes(@Args(type => ListParam) params: ListParam): Promise<InspectionDrawingTypeList> {\n const queryBuilder = getQueryBuilderFromListParams({\n params,\n repository: await getRepository(InspectionDrawingType),\n searchables: ['name']\n })\n\n const [items, total] = await queryBuilder.getManyAndCount()\n\n return { items, total }\n }\n\n @FieldResolver(type => [InspectionPart])\n async inspectionParts(@Root() inspectionDrawingType: InspectionDrawingType): Promise<InspectionPart[]> {\n return await getRepository(InspectionPart).find({\n where: { inspectionDrawingType: { id: inspectionDrawingType.id } },\n order: { sequence: 'ASC' }\n })\n }\n\n @FieldResolver(type => User)\n async updater(@Root() inspectionDrawingType: InspectionDrawingType): Promise<User> {\n return inspectionDrawingType.updaterId && (await getRepository(User).findOneBy({ id: inspectionDrawingType.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() inspectionDrawingType: InspectionDrawingType): Promise<User> {\n return inspectionDrawingType.creatorId && (await getRepository(User).findOneBy({ id: inspectionDrawingType.creatorId }))\n }\n}\n"]}
|
|
@@ -8,8 +8,7 @@ const manager_1 = require("./manager");
|
|
|
8
8
|
const manager_type_1 = require("./manager-type");
|
|
9
9
|
const auth_base_1 = require("@things-factory/auth-base");
|
|
10
10
|
let ManagerQuery = class ManagerQuery {
|
|
11
|
-
async managers(
|
|
12
|
-
const { domain } = context.state;
|
|
11
|
+
async managers() {
|
|
13
12
|
const queryBuilder = (0, shell_1.getRepository)(auth_base_1.User)
|
|
14
13
|
.createQueryBuilder('u')
|
|
15
14
|
.select('m.id', 'id')
|
|
@@ -18,9 +17,7 @@ let ManagerQuery = class ManagerQuery {
|
|
|
18
17
|
.addSelect('u.id', 'userId')
|
|
19
18
|
.addSelect('u.name', 'name')
|
|
20
19
|
.addSelect('u.updated_at', 'updatedAt')
|
|
21
|
-
.innerJoin('users_domains', 'ud', 'u.id = ud.users_id')
|
|
22
20
|
.leftJoin('managers', 'm', 'u.id = m.user_id')
|
|
23
|
-
.where('ud.domains_id = :domain', { domain: domain.id })
|
|
24
21
|
.orderBy('u.name', 'DESC');
|
|
25
22
|
return await queryBuilder.getRawMany();
|
|
26
23
|
}
|
|
@@ -28,9 +25,8 @@ let ManagerQuery = class ManagerQuery {
|
|
|
28
25
|
exports.ManagerQuery = ManagerQuery;
|
|
29
26
|
tslib_1.__decorate([
|
|
30
27
|
(0, type_graphql_1.Query)(returns => [manager_type_1.ManagerOutput], { description: '담당자 리스트' }),
|
|
31
|
-
tslib_1.__param(0, (0, type_graphql_1.Ctx)()),
|
|
32
28
|
tslib_1.__metadata("design:type", Function),
|
|
33
|
-
tslib_1.__metadata("design:paramtypes", [
|
|
29
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
34
30
|
tslib_1.__metadata("design:returntype", Promise)
|
|
35
31
|
], ManagerQuery.prototype, "managers", null);
|
|
36
32
|
exports.ManagerQuery = ManagerQuery = tslib_1.__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-query.js","sourceRoot":"","sources":["../../../server/service/manager/manager-query.ts"],"names":[],"mappings":";;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"manager-query.js","sourceRoot":"","sources":["../../../server/service/manager/manager-query.ts"],"names":[],"mappings":";;;;AAAA,+CAA8C;AAC9C,iDAAqD;AACrD,uCAAmC;AACnC,iDAA8C;AAC9C,yDAAgD;AAGzC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEjB,AAAN,KAAK,CAAC,QAAQ;QACZ,MAAM,YAAY,GAAG,IAAA,qBAAa,EAAC,gBAAI,CAAC;aACrC,kBAAkB,CAAC,GAAG,CAAC;aACvB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;aACpB,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;aAC7B,SAAS,CAAC,YAAY,EAAE,UAAU,CAAC;aACnC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC;aAC3B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;aAC3B,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC;aACtC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,kBAAkB,CAAC;aAC7C,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE5B,OAAO,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;IACxC,CAAC;CACF,CAAA;AAhBY,oCAAY;AAEjB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,4BAAa,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;;;;4CAc7D;uBAfU,YAAY;IADxB,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,YAAY,CAgBxB","sourcesContent":["import { Resolver, Query } from 'type-graphql'\nimport { getRepository } from '@things-factory/shell'\nimport { Manager } from './manager'\nimport { ManagerOutput } from './manager-type'\nimport { User } from '@things-factory/auth-base'\n\n@Resolver(Manager)\nexport class ManagerQuery {\n @Query(returns => [ManagerOutput], { description: '담당자 리스트' })\n async managers(): Promise<ManagerOutput[]> {\n const queryBuilder = getRepository(User)\n .createQueryBuilder('u')\n .select('m.id', 'id')\n .addSelect('m.phone', 'phone')\n .addSelect('m.position', 'position')\n .addSelect('u.id', 'userId')\n .addSelect('u.name', 'name')\n .addSelect('u.updated_at', 'updatedAt')\n .leftJoin('managers', 'm', 'u.id = m.user_id')\n .orderBy('u.name', 'DESC')\n\n return await queryBuilder.getRawMany()\n }\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm';
|
|
2
|
+
/**
|
|
3
|
+
* 프로젝트 관리번호(YYYY-NNNNN) 를 발번한다.
|
|
4
|
+
* 호출자는 반드시 트랜잭션(EntityManager) 을 넘겨야 한다.
|
|
5
|
+
* 같은 연도 prefix 의 최대값을 pessimistic lock 으로 잠근 뒤 +1 한다.
|
|
6
|
+
*/
|
|
7
|
+
export declare function issueProjectCode(tx: EntityManager, now?: Date): Promise<string>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.issueProjectCode = issueProjectCode;
|
|
4
|
+
const project_1 = require("./project");
|
|
5
|
+
const SEQ_WIDTH = 5;
|
|
6
|
+
const SEQ_MAX = 10 ** SEQ_WIDTH - 1;
|
|
7
|
+
/**
|
|
8
|
+
* 프로젝트 관리번호(YYYY-NNNNN) 를 발번한다.
|
|
9
|
+
* 호출자는 반드시 트랜잭션(EntityManager) 을 넘겨야 한다.
|
|
10
|
+
* 같은 연도 prefix 의 최대값을 pessimistic lock 으로 잠근 뒤 +1 한다.
|
|
11
|
+
*/
|
|
12
|
+
async function issueProjectCode(tx, now = new Date()) {
|
|
13
|
+
const yearPrefix = String(now.getFullYear());
|
|
14
|
+
const last = await tx
|
|
15
|
+
.getRepository(project_1.Project)
|
|
16
|
+
.createQueryBuilder('p')
|
|
17
|
+
.where('p.code LIKE :pattern', { pattern: `${yearPrefix}-%` })
|
|
18
|
+
.setLock('pessimistic_write')
|
|
19
|
+
.orderBy('p.code', 'DESC')
|
|
20
|
+
.getOne();
|
|
21
|
+
const nextSeq = (last === null || last === void 0 ? void 0 : last.code) ? Number(last.code.split('-')[1]) + 1 : 1;
|
|
22
|
+
if (nextSeq > SEQ_MAX) {
|
|
23
|
+
throw new Error(`프로젝트 관리번호 일련번호 한계 초과: ${yearPrefix}-${SEQ_MAX} 이미 사용됨`);
|
|
24
|
+
}
|
|
25
|
+
return `${yearPrefix}-${String(nextSeq).padStart(SEQ_WIDTH, '0')}`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=issue-project-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-project-code.js","sourceRoot":"","sources":["../../../server/service/project/issue-project-code.ts"],"names":[],"mappings":";;AAYA,4CAkBC;AA5BD,uCAAmC;AAEnC,MAAM,SAAS,GAAG,CAAC,CAAA;AACnB,MAAM,OAAO,GAAG,EAAE,IAAI,SAAS,GAAG,CAAC,CAAA;AAEnC;;;;GAIG;AACI,KAAK,UAAU,gBAAgB,CAAC,EAAiB,EAAE,MAAY,IAAI,IAAI,EAAE;IAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;IAE5C,MAAM,IAAI,GAAG,MAAM,EAAE;SAClB,aAAa,CAAC,iBAAO,CAAC;SACtB,kBAAkB,CAAC,GAAG,CAAC;SACvB,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;SAC7D,OAAO,CAAC,mBAAmB,CAAC;SAC5B,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;SACzB,MAAM,EAAE,CAAA;IAEX,MAAM,OAAO,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpE,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,IAAI,OAAO,SAAS,CAAC,CAAA;IAC1E,CAAC;IAED,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAA;AACpE,CAAC","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { Project } from './project'\n\nconst SEQ_WIDTH = 5\nconst SEQ_MAX = 10 ** SEQ_WIDTH - 1\n\n/**\n * 프로젝트 관리번호(YYYY-NNNNN) 를 발번한다.\n * 호출자는 반드시 트랜잭션(EntityManager) 을 넘겨야 한다.\n * 같은 연도 prefix 의 최대값을 pessimistic lock 으로 잠근 뒤 +1 한다.\n */\nexport async function issueProjectCode(tx: EntityManager, now: Date = new Date()): Promise<string> {\n const yearPrefix = String(now.getFullYear())\n\n const last = await tx\n .getRepository(Project)\n .createQueryBuilder('p')\n .where('p.code LIKE :pattern', { pattern: `${yearPrefix}-%` })\n .setLock('pessimistic_write')\n .orderBy('p.code', 'DESC')\n .getOne()\n\n const nextSeq = last?.code ? Number(last.code.split('-')[1]) + 1 : 1\n\n if (nextSeq > SEQ_MAX) {\n throw new Error(`프로젝트 관리번호 일련번호 한계 초과: ${yearPrefix}-${SEQ_MAX} 이미 사용됨`)\n }\n\n return `${yearPrefix}-${String(nextSeq).padStart(SEQ_WIDTH, '0')}`\n}\n"]}
|
|
@@ -8,5 +8,7 @@ export declare class ProjectMutation {
|
|
|
8
8
|
uploadProjectScheduleTable(param: UploadProjectScheduleTable, context: ResolverContext): Promise<boolean>;
|
|
9
9
|
deleteProject(id: string, context: ResolverContext): Promise<boolean>;
|
|
10
10
|
downloadPlanFiles(fileIds: string[], context: ResolverContext): Promise<string>;
|
|
11
|
+
promoteProjectToTenant(projectId: string, context: ResolverContext): Promise<Project>;
|
|
12
|
+
demoteProjectTenant(projectId: string, context: ResolverContext): Promise<boolean>;
|
|
11
13
|
}
|
|
12
14
|
export declare function createAttachmentAfterDelete(context: ResolverContext, file: any, refBy: any, refType: any): Promise<Attachment>;
|
|
@@ -9,6 +9,7 @@ const shell_1 = require("@things-factory/shell");
|
|
|
9
9
|
const attachment_base_1 = require("@things-factory/attachment-base");
|
|
10
10
|
const project_1 = require("./project");
|
|
11
11
|
const project_type_1 = require("./project-type");
|
|
12
|
+
const issue_project_code_1 = require("./issue-project-code");
|
|
12
13
|
const building_complex_1 = require("@dssp/building-complex");
|
|
13
14
|
const headless_pdf_to_image_1 = require("@things-factory/board-service/dist-server/controllers/headless-pdf-to-image");
|
|
14
15
|
const parse_excel_1 = require("../../controllers/parse-excel");
|
|
@@ -16,6 +17,8 @@ const fs = tslib_1.__importStar(require("fs"));
|
|
|
16
17
|
const path = tslib_1.__importStar(require("path"));
|
|
17
18
|
const archiver_1 = tslib_1.__importDefault(require("archiver"));
|
|
18
19
|
const env_1 = require("@things-factory/env");
|
|
20
|
+
const PROJECT_DOMAIN_EXT_TYPE = 'project';
|
|
21
|
+
const PROJECT_TEMPLATE_SUBDOMAIN = 'project-template';
|
|
19
22
|
const projectType = env_1.config.get('projectType', project_1.ProjectType.DSSP);
|
|
20
23
|
let ProjectMutation = class ProjectMutation {
|
|
21
24
|
async createProject(project, context) {
|
|
@@ -170,11 +173,11 @@ let ProjectMutation = class ProjectMutation {
|
|
|
170
173
|
}
|
|
171
174
|
async uploadProjectScheduleTable(param, context) {
|
|
172
175
|
var _a, e_1, _b, _c;
|
|
173
|
-
const {
|
|
176
|
+
const { user, tx } = context.state;
|
|
174
177
|
const { projectId, scheduleTable } = param;
|
|
175
178
|
const projectRepo = (0, shell_1.getRepository)(project_1.Project, tx);
|
|
176
179
|
const project = await projectRepo.findOne({
|
|
177
|
-
where: {
|
|
180
|
+
where: { id: projectId }
|
|
178
181
|
});
|
|
179
182
|
const { createReadStream, filename, mimetype } = await scheduleTable;
|
|
180
183
|
const stream = createReadStream();
|
|
@@ -200,19 +203,19 @@ let ProjectMutation = class ProjectMutation {
|
|
|
200
203
|
return true;
|
|
201
204
|
}
|
|
202
205
|
async deleteProject(id, context) {
|
|
203
|
-
const {
|
|
204
|
-
await (0, shell_1.getRepository)(project_1.Project, tx).delete({
|
|
206
|
+
const { tx } = context.state;
|
|
207
|
+
await (0, shell_1.getRepository)(project_1.Project, tx).delete({ id });
|
|
205
208
|
await (0, attachment_base_1.deleteAttachmentsByRef)(null, { refBys: [id] }, context);
|
|
206
209
|
return true;
|
|
207
210
|
}
|
|
208
211
|
async downloadPlanFiles(fileIds, context) {
|
|
209
|
-
const {
|
|
212
|
+
const { tx } = context.state;
|
|
210
213
|
if (!fileIds || fileIds.length === 0) {
|
|
211
214
|
throw new Error('다운로드할 파일을 선택해주세요.');
|
|
212
215
|
}
|
|
213
216
|
// 첨부파일 정보 조회
|
|
214
217
|
const attachments = await tx.getRepository(attachment_base_1.Attachment).find({
|
|
215
|
-
where: {
|
|
218
|
+
where: { id: (0, typeorm_1.In)(fileIds) }
|
|
216
219
|
});
|
|
217
220
|
if (attachments.length === 0) {
|
|
218
221
|
throw new Error('선택된 파일을 찾을 수 없습니다.');
|
|
@@ -266,6 +269,69 @@ let ProjectMutation = class ProjectMutation {
|
|
|
266
269
|
}
|
|
267
270
|
});
|
|
268
271
|
}
|
|
272
|
+
async promoteProjectToTenant(projectId, context) {
|
|
273
|
+
var _a;
|
|
274
|
+
const { user, tx } = context.state;
|
|
275
|
+
const projectRepo = tx.getRepository(project_1.Project);
|
|
276
|
+
const domainRepo = tx.getRepository(shell_1.Domain);
|
|
277
|
+
const project = await projectRepo.findOne({
|
|
278
|
+
where: { id: projectId }
|
|
279
|
+
});
|
|
280
|
+
if (!project) {
|
|
281
|
+
throw new Error(`프로젝트를 찾을 수 없습니다: ${projectId}`);
|
|
282
|
+
}
|
|
283
|
+
// 이미 활성 테넌트인 경우 차단 (강등 상태는 재승격 허용)
|
|
284
|
+
if (project.code) {
|
|
285
|
+
const existing = await domainRepo.findOne({
|
|
286
|
+
where: { subdomain: project.code, extType: PROJECT_DOMAIN_EXT_TYPE }
|
|
287
|
+
});
|
|
288
|
+
if (existing) {
|
|
289
|
+
throw new Error(`이미 테넌트로 승격된 프로젝트입니다: ${project.code}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// 템플릿 Domain 조회 — 모든 프로젝트 도메인의 parent. Role 상속의 단일 진실.
|
|
293
|
+
const templateDomain = await domainRepo.findOne({
|
|
294
|
+
where: { subdomain: PROJECT_TEMPLATE_SUBDOMAIN, extType: PROJECT_DOMAIN_EXT_TYPE }
|
|
295
|
+
});
|
|
296
|
+
if (!templateDomain) {
|
|
297
|
+
throw new Error('프로젝트 템플릿 Domain 이 존재하지 않습니다. 마이그레이션을 먼저 실행하세요.');
|
|
298
|
+
}
|
|
299
|
+
// 코드가 없으면 발번 (재승격 시에는 기존 코드 재사용)
|
|
300
|
+
const code = (_a = project.code) !== null && _a !== void 0 ? _a : (await (0, issue_project_code_1.issueProjectCode)(tx));
|
|
301
|
+
await domainRepo.save({
|
|
302
|
+
name: project.name,
|
|
303
|
+
subdomain: code,
|
|
304
|
+
extType: PROJECT_DOMAIN_EXT_TYPE,
|
|
305
|
+
parent: templateDomain,
|
|
306
|
+
owner: user.id
|
|
307
|
+
});
|
|
308
|
+
if (!project.code) {
|
|
309
|
+
await projectRepo.update({ id: projectId }, { code });
|
|
310
|
+
project.code = code;
|
|
311
|
+
}
|
|
312
|
+
return project;
|
|
313
|
+
}
|
|
314
|
+
async demoteProjectTenant(projectId, context) {
|
|
315
|
+
const { tx } = context.state;
|
|
316
|
+
const project = await tx.getRepository(project_1.Project).findOne({
|
|
317
|
+
where: { id: projectId }
|
|
318
|
+
});
|
|
319
|
+
if (!project) {
|
|
320
|
+
throw new Error(`프로젝트를 찾을 수 없습니다: ${projectId}`);
|
|
321
|
+
}
|
|
322
|
+
if (!project.code) {
|
|
323
|
+
throw new Error('승격된 적이 없는 프로젝트입니다.');
|
|
324
|
+
}
|
|
325
|
+
const domainRepo = tx.getRepository(shell_1.Domain);
|
|
326
|
+
const tenantDomain = await domainRepo.findOne({
|
|
327
|
+
where: { subdomain: project.code, extType: PROJECT_DOMAIN_EXT_TYPE }
|
|
328
|
+
});
|
|
329
|
+
if (!tenantDomain) {
|
|
330
|
+
throw new Error('이미 강등된 프로젝트입니다.');
|
|
331
|
+
}
|
|
332
|
+
await domainRepo.softDelete({ id: tenantDomain.id });
|
|
333
|
+
return true;
|
|
334
|
+
}
|
|
269
335
|
};
|
|
270
336
|
exports.ProjectMutation = ProjectMutation;
|
|
271
337
|
tslib_1.__decorate([
|
|
@@ -322,6 +388,24 @@ tslib_1.__decorate([
|
|
|
322
388
|
tslib_1.__metadata("design:paramtypes", [Array, Object]),
|
|
323
389
|
tslib_1.__metadata("design:returntype", Promise)
|
|
324
390
|
], ProjectMutation.prototype, "downloadPlanFiles", null);
|
|
391
|
+
tslib_1.__decorate([
|
|
392
|
+
(0, type_graphql_1.Directive)('@transaction'),
|
|
393
|
+
(0, type_graphql_1.Mutation)(returns => project_1.Project, { description: '프로젝트를 테넌트로 승격 (관리번호 발번 + project 카테고리 Domain 생성)' }),
|
|
394
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId')),
|
|
395
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
396
|
+
tslib_1.__metadata("design:type", Function),
|
|
397
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
398
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
399
|
+
], ProjectMutation.prototype, "promoteProjectToTenant", null);
|
|
400
|
+
tslib_1.__decorate([
|
|
401
|
+
(0, type_graphql_1.Directive)('@transaction'),
|
|
402
|
+
(0, type_graphql_1.Mutation)(returns => Boolean, { description: '프로젝트 테넌트 강등 (Domain soft-delete, Project.code 보존)' }),
|
|
403
|
+
tslib_1.__param(0, (0, type_graphql_1.Arg)('projectId')),
|
|
404
|
+
tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
|
|
405
|
+
tslib_1.__metadata("design:type", Function),
|
|
406
|
+
tslib_1.__metadata("design:paramtypes", [String, Object]),
|
|
407
|
+
tslib_1.__metadata("design:returntype", Promise)
|
|
408
|
+
], ProjectMutation.prototype, "demoteProjectTenant", null);
|
|
325
409
|
exports.ProjectMutation = ProjectMutation = tslib_1.__decorate([
|
|
326
410
|
(0, type_graphql_1.Resolver)(project_1.Project)
|
|
327
411
|
], ProjectMutation);
|