@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.
Files changed (56) hide show
  1. package/dist-client/pages/project/project-detail.d.ts +2 -0
  2. package/dist-client/pages/project/project-detail.js +96 -31
  3. package/dist-client/pages/project/project-detail.js.map +1 -1
  4. package/dist-client/pages/project/project-list.d.ts +7 -0
  5. package/dist-client/pages/project/project-list.js.map +1 -1
  6. package/dist-client/pages/project/project-setting-list.d.ts +2 -0
  7. package/dist-client/pages/project/project-setting-list.js +29 -4
  8. package/dist-client/pages/project/project-setting-list.js.map +1 -1
  9. package/dist-client/pages/project/project-update.d.ts +8 -0
  10. package/dist-client/pages/project/project-update.js +109 -4
  11. package/dist-client/pages/project/project-update.js.map +1 -1
  12. package/dist-client/pages/resource/construction-type-management.js +14 -0
  13. package/dist-client/pages/resource/construction-type-management.js.map +1 -1
  14. package/dist-client/tsconfig.tsbuildinfo +1 -1
  15. package/dist-server/migrations/1723861466414-seed-codes.js +1 -1
  16. package/dist-server/migrations/1723861466414-seed-codes.js.map +1 -1
  17. package/dist-server/service/construction-type/construction-type-query.d.ts +2 -2
  18. package/dist-server/service/construction-type/construction-type-query.js +5 -10
  19. package/dist-server/service/construction-type/construction-type-query.js.map +1 -1
  20. package/dist-server/service/construction-type/construction-type-type.d.ts +1 -0
  21. package/dist-server/service/construction-type/construction-type-type.js +4 -0
  22. package/dist-server/service/construction-type/construction-type-type.js.map +1 -1
  23. package/dist-server/service/construction-type/construction-type.d.ts +1 -0
  24. package/dist-server/service/construction-type/construction-type.js +5 -0
  25. package/dist-server/service/construction-type/construction-type.js.map +1 -1
  26. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.d.ts +2 -2
  27. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js +5 -10
  28. package/dist-server/service/inspection-drawing-type/inspection-drawing-type-query.js.map +1 -1
  29. package/dist-server/service/manager/manager-query.d.ts +1 -1
  30. package/dist-server/service/manager/manager-query.js +2 -6
  31. package/dist-server/service/manager/manager-query.js.map +1 -1
  32. package/dist-server/service/project/issue-project-code.d.ts +7 -0
  33. package/dist-server/service/project/issue-project-code.js +27 -0
  34. package/dist-server/service/project/issue-project-code.js.map +1 -0
  35. package/dist-server/service/project/project-mutation.d.ts +2 -0
  36. package/dist-server/service/project/project-mutation.js +90 -6
  37. package/dist-server/service/project/project-mutation.js.map +1 -1
  38. package/dist-server/service/project/project-query.d.ts +4 -2
  39. package/dist-server/service/project/project-query.js +50 -15
  40. package/dist-server/service/project/project-query.js.map +1 -1
  41. package/dist-server/service/project/project.d.ts +1 -0
  42. package/dist-server/service/project/project.js +9 -0
  43. package/dist-server/service/project/project.js.map +1 -1
  44. package/dist-server/service/resource/resource-mutation.js +5 -6
  45. package/dist-server/service/resource/resource-mutation.js.map +1 -1
  46. package/dist-server/service/resource/resource-query.d.ts +2 -2
  47. package/dist-server/service/resource/resource-query.js +5 -10
  48. package/dist-server/service/resource/resource-query.js.map +1 -1
  49. package/dist-server/service/task-resource/task-resource-query.d.ts +2 -2
  50. package/dist-server/service/task-resource/task-resource-query.js +4 -9
  51. package/dist-server/service/task-resource/task-resource-query.js.map +1 -1
  52. package/dist-server/service/worker-type/worker-type-query.d.ts +2 -2
  53. package/dist-server/service/worker-type/worker-type-query.js +5 -10
  54. package/dist-server/service/worker-type/worker-type-query.js.map +1 -1
  55. package/dist-server/tsconfig.tsbuildinfo +1 -1
  56. package/package.json +4 -4
@@ -83,7 +83,7 @@ const SEED_COMMON_CODES = [
83
83
  rank: 5
84
84
  },
85
85
  {
86
- name: 'DESIGNER',
86
+ name: 'ARCHITECT',
87
87
  description: '설계사',
88
88
  labels: null,
89
89
  rank: 6
@@ -1 +1 @@
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: 'DESIGNER',\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"]}
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, context: ResolverContext): Promise<ConstructionType>;
8
- constructionTypes(params: ListParam, context: ResolverContext): Promise<ConstructionTypeList>;
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, context) {
13
- const { domain } = context.state;
12
+ async constructionType(id) {
14
13
  return await (0, shell_1.getRepository)(construction_type_1.ConstructionType).findOne({
15
- where: { domain: { id: domain.id }, id }
14
+ where: { id }
16
15
  });
17
16
  }
18
- async constructionTypes(params, context) {
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, Object]),
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, Object]),
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":"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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, @Ctx() context: ResolverContext): Promise<ConstructionType> {\n const { domain } = context.state\n\n return await getRepository(ConstructionType).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => ConstructionTypeList, { description: 'To fetch multiple ConstructionTypes' })\n async constructionTypes(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ConstructionTypeList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\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"]}
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"]}
@@ -3,6 +3,7 @@ export declare class ConstructionTypePatch {
3
3
  id?: string;
4
4
  name?: string;
5
5
  description?: string;
6
+ projectType?: string;
6
7
  cuFlag?: string;
7
8
  }
8
9
  export declare class ConstructionTypeList {
@@ -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;CAYjC,CAAA;AAZY,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;;qDACX;gCAXJ,qBAAqB;IADjC,IAAA,wBAAS,GAAE;GACC,qBAAqB,CAYjC;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 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"]}
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"]}
@@ -7,6 +7,7 @@ export declare class ConstructionType {
7
7
  domainId?: string;
8
8
  name?: string;
9
9
  description?: string;
10
+ projectType?: string;
10
11
  constructionDetailTypes?: ConstructionDetailType[];
11
12
  createdAt?: Date;
12
13
  updatedAt?: Date;
@@ -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;CAkD5B,CAAA;AAlDY,4CAAgB;AAGlB;IAFR,IAAA,gCAAsB,EAAC,MAAM,CAAC;IAC9B,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAE,CAAC;;4CACC;AAInB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IACzB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACjB,cAAM;gDAAA;AAGf;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;;kDAC3D;AAIjB;IAFC,IAAA,gBAAM,GAAE;IACR,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACb;AAIb;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACN;AAKpB;IAFC,IAAA,oBAAK,EAAC,GAAG,EAAE,CAAC,CAAC,iDAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACzD,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,iDAAsB,EAAE,sBAAsB,CAAC,EAAE,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;;iEACzD;AAIlD;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,0BAAgB,GAAE;IAClB,IAAA,oBAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCACd,IAAI;mDAAA;AAIhB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;iDAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;;mDAC3D;AAIlB;IAFC,IAAA,mBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;sCAC9B,gBAAI;iDAAA;AAGd;IADC,IAAA,oBAAU,EAAC,CAAC,gBAAkC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC;;mDAC3D;2BAjDP,gBAAgB;IAN5B,IAAA,gBAAM,GAAE;IACR,IAAA,eAAK,EAAC,wBAAwB,EAAE,CAAC,gBAAkC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACzH,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,sBAAsB;KAC9B,CAAC;IACD,IAAA,yBAAU,EAAC,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;GACxB,gBAAgB,CAkD5B","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 // 상세 공종 정보 (하위 테이블 참조)\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"]}
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, context: ResolverContext): Promise<InspectionDrawingType>;
8
- inspectionDrawingTypes(params: ListParam, context: ResolverContext): Promise<InspectionDrawingTypeList>;
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, context) {
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: { domain: { id: domain.id }, id }
14
+ where: { id }
16
15
  });
17
16
  }
18
- async inspectionDrawingTypes(params, context) {
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, Object]),
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, Object]),
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":"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","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, @Ctx() context: ResolverContext): Promise<InspectionDrawingType> {\n const { domain } = context.state\n\n return await getRepository(InspectionDrawingType).findOne({\n where: { domain: { id: domain.id }, id }\n })\n }\n\n @Query(returns => InspectionDrawingTypeList, { description: 'To fetch multiple InspectionDrawingTypes' })\n async inspectionDrawingTypes(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<InspectionDrawingTypeList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n domain,\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"]}
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"]}
@@ -1,4 +1,4 @@
1
1
  import { ManagerOutput } from './manager-type';
2
2
  export declare class ManagerQuery {
3
- managers(context: ResolverContext): Promise<ManagerOutput[]>;
3
+ managers(): Promise<ManagerOutput[]>;
4
4
  }
@@ -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(context) {
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", [Object]),
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,+CAAmD;AACnD,iDAAqD;AACrD,uCAAmC;AACnC,iDAA8C;AAC9C,yDAAgD;AAGzC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEjB,AAAN,KAAK,CAAC,QAAQ,CAAQ,OAAwB;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,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,SAAS,CAAC,eAAe,EAAE,IAAI,EAAE,oBAAoB,CAAC;aACtD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,kBAAkB,CAAC;aAC7C,KAAK,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACvD,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAE5B,OAAO,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;IACxC,CAAC;CACF,CAAA;AApBY,oCAAY;AAEjB;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,4BAAa,CAAC,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC9C,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4CAiBpB;uBAnBU,YAAY;IADxB,IAAA,uBAAQ,EAAC,iBAAO,CAAC;GACL,YAAY,CAoBxB","sourcesContent":["import { Resolver, Query, Ctx } 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(@Ctx() context: ResolverContext): Promise<ManagerOutput[]> {\n const { domain } = context.state\n\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 .innerJoin('users_domains', 'ud', 'u.id = ud.users_id')\n .leftJoin('managers', 'm', 'u.id = m.user_id')\n .where('ud.domains_id = :domain', { domain: domain.id })\n .orderBy('u.name', 'DESC')\n\n return await queryBuilder.getRawMany()\n }\n}\n"]}
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 { domain, user, tx } = context.state;
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: { domain: { id: domain.id }, id: projectId }
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 { domain, tx } = context.state;
204
- await (0, shell_1.getRepository)(project_1.Project, tx).delete({ domain: { id: domain.id }, id });
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 { domain, tx } = context.state;
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: { domain: { id: domain.id }, id: (0, typeorm_1.In)(fileIds) }
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);