@things-factory/ops-master 10.1.31 → 10.1.34

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 (59) hide show
  1. package/dist-client/index.d.ts +1 -0
  2. package/dist-client/index.js +1 -0
  3. package/dist-client/index.js.map +1 -1
  4. package/dist-client/master-change-approval.d.ts +7 -0
  5. package/dist-client/master-change-approval.js +20 -0
  6. package/dist-client/master-change-approval.js.map +1 -0
  7. package/dist-client/pages/master/test-specification.d.ts +22 -85
  8. package/dist-client/pages/master/test-specification.js +190 -405
  9. package/dist-client/pages/master/test-specification.js.map +1 -1
  10. package/dist-client/tsconfig.tsbuildinfo +1 -1
  11. package/dist-server/service/asset/asset-master-resolver.js +38 -34
  12. package/dist-server/service/asset/asset-master-resolver.js.map +1 -1
  13. package/dist-server/service/equipment/equipment-master-resolver.js +54 -49
  14. package/dist-server/service/equipment/equipment-master-resolver.js.map +1 -1
  15. package/dist-server/service/index.d.ts +8 -2
  16. package/dist-server/service/index.js +8 -0
  17. package/dist-server/service/index.js.map +1 -1
  18. package/dist-server/service/location/location-master-resolver.js +34 -31
  19. package/dist-server/service/location/location-master-resolver.js.map +1 -1
  20. package/dist-server/service/master-change-policy.d.ts +23 -0
  21. package/dist-server/service/master-change-policy.js +129 -0
  22. package/dist-server/service/master-change-policy.js.map +1 -0
  23. package/dist-server/service/master-crud.js +6 -0
  24. package/dist-server/service/master-crud.js.map +1 -1
  25. package/dist-server/service/material/material-master-resolver.js +55 -51
  26. package/dist-server/service/material/material-master-resolver.js.map +1 -1
  27. package/dist-server/service/operation/operation-master-resolver.js +28 -25
  28. package/dist-server/service/operation/operation-master-resolver.js.map +1 -1
  29. package/dist-server/service/personnel/personnel-master-resolver.js +38 -34
  30. package/dist-server/service/personnel/personnel-master-resolver.js.map +1 -1
  31. package/dist-server/service/quality/nonconformance-cause-resolver.js +17 -14
  32. package/dist-server/service/quality/nonconformance-cause-resolver.js.map +1 -1
  33. package/dist-server/service/recipe/recipe-master-resolver.js +32 -28
  34. package/dist-server/service/recipe/recipe-master-resolver.js.map +1 -1
  35. package/dist-server/service/test-spec/index.d.ts +3 -2
  36. package/dist-server/service/test-spec/index.js +4 -2
  37. package/dist-server/service/test-spec/index.js.map +1 -1
  38. package/dist-server/service/test-spec/test-spec-effective-list.d.ts +32 -0
  39. package/dist-server/service/test-spec/test-spec-effective-list.js +40 -0
  40. package/dist-server/service/test-spec/test-spec-effective-list.js.map +1 -0
  41. package/dist-server/service/test-spec/test-spec-master-resolver.d.ts +4 -14
  42. package/dist-server/service/test-spec/test-spec-master-resolver.js +12 -83
  43. package/dist-server/service/test-spec/test-spec-master-resolver.js.map +1 -1
  44. package/dist-server/service/test-spec/test-spec-query.js +7 -1
  45. package/dist-server/service/test-spec/test-spec-query.js.map +1 -1
  46. package/dist-server/service/test-spec/test-spec-revision-resolver.d.ts +52 -0
  47. package/dist-server/service/test-spec/test-spec-revision-resolver.js +76 -0
  48. package/dist-server/service/test-spec/test-spec-revision-resolver.js.map +1 -0
  49. package/dist-server/service/test-spec/test-spec-revision-service.d.ts +117 -0
  50. package/dist-server/service/test-spec/test-spec-revision-service.js +519 -0
  51. package/dist-server/service/test-spec/test-spec-revision-service.js.map +1 -0
  52. package/dist-server/service/test-spec/test-spec-revision.d.ts +82 -0
  53. package/dist-server/service/test-spec/test-spec-revision.js +329 -0
  54. package/dist-server/service/test-spec/test-spec-revision.js.map +1 -0
  55. package/dist-server/service/test-spec/test-specification.d.ts +4 -0
  56. package/dist-server/service/test-spec/test-specification.js +11 -2
  57. package/dist-server/service/test-spec/test-specification.js.map +1 -1
  58. package/dist-server/tsconfig.tsbuildinfo +1 -1
  59. package/package.json +9 -6
@@ -4,6 +4,8 @@ exports.PersonResolver = exports.PersonList = exports.PersonnelClassResolver = e
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const type_graphql_2 = require("type-graphql");
8
+ const shell_2 = require("@things-factory/shell");
7
9
  const master_crud_1 = require("../master-crud");
8
10
  const master_axis_1 = require("../master-axis");
9
11
  const master_list_1 = require("../master-list");
@@ -24,15 +26,15 @@ let PersonnelClassList = class PersonnelClassList {
24
26
  };
25
27
  exports.PersonnelClassList = PersonnelClassList;
26
28
  tslib_1.__decorate([
27
- (0, type_graphql_1.Field)(type => [personnel_class_1.PersonnelClass]),
29
+ (0, type_graphql_2.Field)(type => [personnel_class_1.PersonnelClass]),
28
30
  tslib_1.__metadata("design:type", Array)
29
31
  ], PersonnelClassList.prototype, "items", void 0);
30
32
  tslib_1.__decorate([
31
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
33
+ (0, type_graphql_2.Field)(type => type_graphql_2.Int),
32
34
  tslib_1.__metadata("design:type", Number)
33
35
  ], PersonnelClassList.prototype, "total", void 0);
34
36
  exports.PersonnelClassList = PersonnelClassList = tslib_1.__decorate([
35
- (0, type_graphql_1.ObjectType)({ description: 'A page of personnel classes' })
37
+ (0, type_graphql_2.ObjectType)({ description: 'A page of personnel classes' })
36
38
  ], PersonnelClassList);
37
39
  /**
38
40
  * **이 등급에 무엇이 드나** — 들어오는 관계.
@@ -84,56 +86,57 @@ let PersonnelClassResolver = class PersonnelClassResolver {
84
86
  };
85
87
  exports.PersonnelClassResolver = PersonnelClassResolver;
86
88
  tslib_1.__decorate([
87
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
88
- (0, type_graphql_1.Query)(returns => PersonnelClassList, { description: 'To fetch personnel classes' }),
89
- tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
90
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
89
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
90
+ (0, type_graphql_2.Query)(returns => PersonnelClassList, { description: 'To fetch personnel classes' }),
91
+ tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
92
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
91
93
  tslib_1.__metadata("design:type", Function),
92
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
94
+ tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
93
95
  tslib_1.__metadata("design:returntype", Promise)
94
96
  ], PersonnelClassResolver.prototype, "personnelClasses", null);
95
97
  tslib_1.__decorate([
96
- (0, type_graphql_1.FieldResolver)(type => [String], { description: 'People holding this class' }),
97
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
98
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
98
+ (0, type_graphql_2.FieldResolver)(type => [String], { description: 'People holding this class' }),
99
+ tslib_1.__param(0, (0, type_graphql_2.Root)()),
100
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
99
101
  tslib_1.__metadata("design:type", Function),
100
102
  tslib_1.__metadata("design:paramtypes", [personnel_class_1.PersonnelClass, Object]),
101
103
  tslib_1.__metadata("design:returntype", Promise)
102
104
  ], PersonnelClassResolver.prototype, "members", null);
103
105
  tslib_1.__decorate([
104
- (0, type_graphql_1.FieldResolver)(type => Boolean, { description: 'True when members were too many to scan fully' }),
105
- tslib_1.__param(0, (0, type_graphql_1.Root)()),
106
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
106
+ (0, type_graphql_2.FieldResolver)(type => Boolean, { description: 'True when members were too many to scan fully' }),
107
+ tslib_1.__param(0, (0, type_graphql_2.Root)()),
108
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
107
109
  tslib_1.__metadata("design:type", Function),
108
110
  tslib_1.__metadata("design:paramtypes", [personnel_class_1.PersonnelClass, Object]),
109
111
  tslib_1.__metadata("design:returntype", Promise)
110
112
  ], PersonnelClassResolver.prototype, "memberScanCapped", null);
111
113
  tslib_1.__decorate([
112
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
113
- (0, type_graphql_1.Directive)('@transaction'),
114
- (0, type_graphql_1.Mutation)(returns => [personnel_class_1.PersonnelClass], { description: 'To create, change or retire personnel classes' }),
115
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.ScalarObject])),
116
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
114
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
115
+ (0, type_graphql_2.Directive)('@transaction'),
116
+ (0, type_graphql_2.Mutation)(returns => [personnel_class_1.PersonnelClass], { description: 'To create, change or retire personnel classes' }),
117
+ tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
118
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
117
119
  tslib_1.__metadata("design:type", Function),
118
120
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
119
121
  tslib_1.__metadata("design:returntype", Promise)
120
122
  ], PersonnelClassResolver.prototype, "updateMultiplePersonnelClass", null);
121
123
  exports.PersonnelClassResolver = PersonnelClassResolver = tslib_1.__decorate([
122
- (0, type_graphql_1.Resolver)(personnel_class_1.PersonnelClass)
124
+ (0, type_graphql_2.Resolver)(personnel_class_1.PersonnelClass),
125
+ (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
123
126
  ], PersonnelClassResolver);
124
127
  let PersonList = class PersonList {
125
128
  };
126
129
  exports.PersonList = PersonList;
127
130
  tslib_1.__decorate([
128
- (0, type_graphql_1.Field)(type => [person_1.Person]),
131
+ (0, type_graphql_2.Field)(type => [person_1.Person]),
129
132
  tslib_1.__metadata("design:type", Array)
130
133
  ], PersonList.prototype, "items", void 0);
131
134
  tslib_1.__decorate([
132
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
135
+ (0, type_graphql_2.Field)(type => type_graphql_2.Int),
133
136
  tslib_1.__metadata("design:type", Number)
134
137
  ], PersonList.prototype, "total", void 0);
135
138
  exports.PersonList = PersonList = tslib_1.__decorate([
136
- (0, type_graphql_1.ObjectType)({ description: 'A page of people' })
139
+ (0, type_graphql_2.ObjectType)({ description: 'A page of people' })
137
140
  ], PersonList);
138
141
  let PersonResolver = class PersonResolver {
139
142
  async persons(params, context) {
@@ -159,25 +162,26 @@ let PersonResolver = class PersonResolver {
159
162
  };
160
163
  exports.PersonResolver = PersonResolver;
161
164
  tslib_1.__decorate([
162
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
163
- (0, type_graphql_1.Query)(returns => PersonList, { description: 'To fetch people' }),
164
- tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
165
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
165
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
166
+ (0, type_graphql_2.Query)(returns => PersonList, { description: 'To fetch people' }),
167
+ tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
168
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
166
169
  tslib_1.__metadata("design:type", Function),
167
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
170
+ tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
168
171
  tslib_1.__metadata("design:returntype", Promise)
169
172
  ], PersonResolver.prototype, "persons", null);
170
173
  tslib_1.__decorate([
171
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
172
- (0, type_graphql_1.Directive)('@transaction'),
173
- (0, type_graphql_1.Mutation)(returns => [person_1.Person], { description: 'To create, change or retire people' }),
174
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.ScalarObject])),
175
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
174
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
175
+ (0, type_graphql_2.Directive)('@transaction'),
176
+ (0, type_graphql_2.Mutation)(returns => [person_1.Person], { description: 'To create, change or retire people' }),
177
+ tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
178
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
176
179
  tslib_1.__metadata("design:type", Function),
177
180
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
178
181
  tslib_1.__metadata("design:returntype", Promise)
179
182
  ], PersonResolver.prototype, "updateMultiplePerson", null);
180
183
  exports.PersonResolver = PersonResolver = tslib_1.__decorate([
181
- (0, type_graphql_1.Resolver)(person_1.Person)
184
+ (0, type_graphql_2.Resolver)(person_1.Person),
185
+ (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
182
186
  ], PersonResolver);
183
187
  //# sourceMappingURL=personnel-master-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"personnel-master-resolver.js","sourceRoot":"","sources":["../../../server/service/personnel/personnel-master-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { FieldResolver, Root, Args, Arg, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\n\nimport { Domain, ListParam, ScalarObject } from '@things-factory/shell'\n\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { ClassMembers, scanClassMembers } from '../resource/class-members'\nimport { PersonnelClass } from './personnel-class'\nimport { Person } from './person'\n\n/**\n * 인원 축을 채우고 고친다.\n *\n * ── 왜 마스터는 그리드에서 고칠 수 있나 ────────────────────────────────────\n * 업무 기록과 달리 마스터는 **선언**이다. 「이 사람이 용접 자격을 갖는다」는 일어난 일이 아니라 지금의\n * 규정이고, 규정은 바뀐다. 없앨 때 행을 지우지 않고 유효 기간의 끝을 채우는 것이 그래서다 —\n * 지우면 그것을 가리키는 지난 기록이 가리킬 것을 잃는다.\n *\n * 규칙은 `master-crud.ts` 한 곳에 있다. 여기는 축의 이름만 붙인다.\n */\n\n@ObjectType({ description: 'A page of personnel classes' })\nexport class PersonnelClassList {\n @Field(type => [PersonnelClass])\n items: PersonnelClass[]\n\n @Field(type => Int)\n total: number\n}\n\n/**\n * **이 등급에 무엇이 드나** — 들어오는 관계.\n *\n * 등급을 만들어 놓고 아무도 안 들어 있는 일이 실제로 있었다. 화면에는 등급 이름만 있어서 그 사실이\n * 안 보였다. 없앨 때 무엇이 딸려 자격을 잃는지도 알 수 없었다.\n *\n * 세는 방식과 상한은 `class-members.ts` 머리말에 적었다 — 등급 넷이 같은 함수를 쓴다.\n */\nfunction personnelClassMembersOf(context: ResolverContext): Promise<ClassMembers> {\n const state = context.state as { domain: Domain; personnelClassMembers?: Promise<ClassMembers> }\n\n state.personnelClassMembers = state.personnelClassMembers || scanClassMembers(Person, 'personnelClassIds', state.domain)\n\n return state.personnelClassMembers\n}\n\n@Resolver(PersonnelClass)\nexport class PersonnelClassResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => PersonnelClassList, { description: 'To fetch personnel classes' })\n async personnelClasses(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<PersonnelClassList> {\n const { domain } = context.state\n const { items, total } = await listMaster('personnelClass', params, domain)\n\n return { items: items as PersonnelClass[], total }\n }\n\n /**\n * 이 등급을 가진 사람들\n *\n * 아무도 안 들면 빈 목록이다. 다만 그것이 「없다」인지 「다 못 봤다」인지는 `memberScanCapped`\n * 가 말한다 — 조용히 자르면 고쳐야 할 선언과 멀쩡한 등급이 같아 보인다.\n */\n @FieldResolver(type => [String], { description: 'People holding this class' })\n async members(@Root() klass: PersonnelClass, @Ctx() context: ResolverContext): Promise<string[]> {\n return (await personnelClassMembersOf(context)).members.get(klass.name) ?? []\n }\n\n /** 소속을 다 보지 못했나. */\n @FieldResolver(type => Boolean, { description: 'True when members were too many to scan fully' })\n async memberScanCapped(@Root() klass: PersonnelClass, @Ctx() context: ResolverContext): Promise<boolean> {\n return (await personnelClassMembersOf(context)).capped\n }\n\n /**\n * 그리드가 보낸 변경을 한 번에 적용한다.\n *\n * 패치를 `ScalarObject` 로 받는다 — 축마다 입력 타입을 따로 만들면 칸을 하나 더할 때마다 두 곳을\n * 고쳐야 하고, 한쪽을 빠뜨리면 그 칸이 오류 보고 없이 저장되지 않는다. 돌려주는 것은 타입이 있는\n * 엔티티라 무엇이 저장됐는지 스키마로 확인할 수 있다.\n */\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [PersonnelClass], { description: 'To create, change or retire personnel classes' })\n async updateMultiplePersonnelClass(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<PersonnelClass[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('personnelClass')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as PersonnelClass[]\n }\n}\n\n@ObjectType({ description: 'A page of people' })\nexport class PersonList {\n @Field(type => [Person])\n items: Person[]\n\n @Field(type => Int)\n total: number\n}\n\n@Resolver(Person)\nexport class PersonResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => PersonList, { description: 'To fetch people' })\n async persons(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<PersonList> {\n const { domain } = context.state\n const { items, total } = await listMaster('person', params, domain)\n\n return { items: items as Person[], total }\n }\n\n /**\n * 그리드가 보낸 변경을 한 번에 적용한다.\n *\n * 패치를 `ScalarObject` 로 받는다 — 축마다 입력 타입을 따로 만들면 칸을 하나 더할 때마다 두 곳을\n * 고쳐야 하고, 한쪽을 빠뜨리면 그 칸이 오류 보고 없이 저장되지 않는다. 돌려주는 것은 타입이 있는\n * 엔티티라 무엇이 저장됐는지 스키마로 확인할 수 있다.\n */\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [Person], { description: 'To create, change or retire people' })\n async updateMultiplePerson(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Person[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('person')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as Person[]\n }\n}\n"]}
1
+ {"version":3,"file":"personnel-master-resolver.js","sourceRoot":"","sources":["../../../server/service/personnel/personnel-master-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { UseMiddleware } from 'type-graphql'\nimport { SpeakRefusals } from '@things-factory/shell'\nimport { FieldResolver, Root, Args, Arg, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\n\nimport { Domain, ListParam, ScalarObject } from '@things-factory/shell'\n\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { ClassMembers, scanClassMembers } from '../resource/class-members'\nimport { PersonnelClass } from './personnel-class'\nimport { Person } from './person'\n\n/**\n * 인원 축을 채우고 고친다.\n *\n * ── 왜 마스터는 그리드에서 고칠 수 있나 ────────────────────────────────────\n * 업무 기록과 달리 마스터는 **선언**이다. 「이 사람이 용접 자격을 갖는다」는 일어난 일이 아니라 지금의\n * 규정이고, 규정은 바뀐다. 없앨 때 행을 지우지 않고 유효 기간의 끝을 채우는 것이 그래서다 —\n * 지우면 그것을 가리키는 지난 기록이 가리킬 것을 잃는다.\n *\n * 규칙은 `master-crud.ts` 한 곳에 있다. 여기는 축의 이름만 붙인다.\n */\n\n@ObjectType({ description: 'A page of personnel classes' })\nexport class PersonnelClassList {\n @Field(type => [PersonnelClass])\n items: PersonnelClass[]\n\n @Field(type => Int)\n total: number\n}\n\n/**\n * **이 등급에 무엇이 드나** — 들어오는 관계.\n *\n * 등급을 만들어 놓고 아무도 안 들어 있는 일이 실제로 있었다. 화면에는 등급 이름만 있어서 그 사실이\n * 안 보였다. 없앨 때 무엇이 딸려 자격을 잃는지도 알 수 없었다.\n *\n * 세는 방식과 상한은 `class-members.ts` 머리말에 적었다 — 등급 넷이 같은 함수를 쓴다.\n */\nfunction personnelClassMembersOf(context: ResolverContext): Promise<ClassMembers> {\n const state = context.state as { domain: Domain; personnelClassMembers?: Promise<ClassMembers> }\n\n state.personnelClassMembers = state.personnelClassMembers || scanClassMembers(Person, 'personnelClassIds', state.domain)\n\n return state.personnelClassMembers\n}\n\n@Resolver(PersonnelClass)\n@UseMiddleware(SpeakRefusals)\nexport class PersonnelClassResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => PersonnelClassList, { description: 'To fetch personnel classes' })\n async personnelClasses(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<PersonnelClassList> {\n const { domain } = context.state\n const { items, total } = await listMaster('personnelClass', params, domain)\n\n return { items: items as PersonnelClass[], total }\n }\n\n /**\n * 이 등급을 가진 사람들\n *\n * 아무도 안 들면 빈 목록이다. 다만 그것이 「없다」인지 「다 못 봤다」인지는 `memberScanCapped`\n * 가 말한다 — 조용히 자르면 고쳐야 할 선언과 멀쩡한 등급이 같아 보인다.\n */\n @FieldResolver(type => [String], { description: 'People holding this class' })\n async members(@Root() klass: PersonnelClass, @Ctx() context: ResolverContext): Promise<string[]> {\n return (await personnelClassMembersOf(context)).members.get(klass.name) ?? []\n }\n\n /** 소속을 다 보지 못했나. */\n @FieldResolver(type => Boolean, { description: 'True when members were too many to scan fully' })\n async memberScanCapped(@Root() klass: PersonnelClass, @Ctx() context: ResolverContext): Promise<boolean> {\n return (await personnelClassMembersOf(context)).capped\n }\n\n /**\n * 그리드가 보낸 변경을 한 번에 적용한다.\n *\n * 패치를 `ScalarObject` 로 받는다 — 축마다 입력 타입을 따로 만들면 칸을 하나 더할 때마다 두 곳을\n * 고쳐야 하고, 한쪽을 빠뜨리면 그 칸이 오류 보고 없이 저장되지 않는다. 돌려주는 것은 타입이 있는\n * 엔티티라 무엇이 저장됐는지 스키마로 확인할 수 있다.\n */\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [PersonnelClass], { description: 'To create, change or retire personnel classes' })\n async updateMultiplePersonnelClass(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<PersonnelClass[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('personnelClass')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as PersonnelClass[]\n }\n}\n\n@ObjectType({ description: 'A page of people' })\nexport class PersonList {\n @Field(type => [Person])\n items: Person[]\n\n @Field(type => Int)\n total: number\n}\n\n@Resolver(Person)\n@UseMiddleware(SpeakRefusals)\nexport class PersonResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => PersonList, { description: 'To fetch people' })\n async persons(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<PersonList> {\n const { domain } = context.state\n const { items, total } = await listMaster('person', params, domain)\n\n return { items: items as Person[], total }\n }\n\n /**\n * 그리드가 보낸 변경을 한 번에 적용한다.\n *\n * 패치를 `ScalarObject` 로 받는다 — 축마다 입력 타입을 따로 만들면 칸을 하나 더할 때마다 두 곳을\n * 고쳐야 하고, 한쪽을 빠뜨리면 그 칸이 오류 보고 없이 저장되지 않는다. 돌려주는 것은 타입이 있는\n * 엔티티라 무엇이 저장됐는지 스키마로 확인할 수 있다.\n */\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [Person], { description: 'To create, change or retire people' })\n async updateMultiplePerson(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<Person[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('person')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as Person[]\n }\n}\n"]}
@@ -4,6 +4,8 @@ exports.NonconformanceCauseResolver = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const type_graphql_2 = require("type-graphql");
8
+ const shell_2 = require("@things-factory/shell");
7
9
  const master_crud_1 = require("../master-crud");
8
10
  const master_axis_1 = require("../master-axis");
9
11
  const master_list_1 = require("../master-list");
@@ -11,15 +13,15 @@ const nonconformance_cause_1 = require("./nonconformance-cause");
11
13
  let NonconformanceCauseList = class NonconformanceCauseList {
12
14
  };
13
15
  tslib_1.__decorate([
14
- (0, type_graphql_1.Field)(type => [nonconformance_cause_1.NonconformanceCause]),
16
+ (0, type_graphql_2.Field)(type => [nonconformance_cause_1.NonconformanceCause]),
15
17
  tslib_1.__metadata("design:type", Array)
16
18
  ], NonconformanceCauseList.prototype, "items", void 0);
17
19
  tslib_1.__decorate([
18
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
20
+ (0, type_graphql_2.Field)(type => type_graphql_2.Int),
19
21
  tslib_1.__metadata("design:type", Number)
20
22
  ], NonconformanceCauseList.prototype, "total", void 0);
21
23
  NonconformanceCauseList = tslib_1.__decorate([
22
- (0, type_graphql_1.ObjectType)()
24
+ (0, type_graphql_2.ObjectType)()
23
25
  ], NonconformanceCauseList);
24
26
  let NonconformanceCauseResolver = class NonconformanceCauseResolver {
25
27
  async nonconformanceCauseList(params, context) {
@@ -33,25 +35,26 @@ let NonconformanceCauseResolver = class NonconformanceCauseResolver {
33
35
  };
34
36
  exports.NonconformanceCauseResolver = NonconformanceCauseResolver;
35
37
  tslib_1.__decorate([
36
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
37
- (0, type_graphql_1.Query)(returns => NonconformanceCauseList),
38
- tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
39
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
38
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
39
+ (0, type_graphql_2.Query)(returns => NonconformanceCauseList),
40
+ tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
41
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
40
42
  tslib_1.__metadata("design:type", Function),
41
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
43
+ tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
42
44
  tslib_1.__metadata("design:returntype", Promise)
43
45
  ], NonconformanceCauseResolver.prototype, "nonconformanceCauseList", null);
44
46
  tslib_1.__decorate([
45
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
46
- (0, type_graphql_1.Directive)('@transaction'),
47
- (0, type_graphql_1.Mutation)(returns => [nonconformance_cause_1.NonconformanceCause]),
48
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.ScalarObject])),
49
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
47
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
48
+ (0, type_graphql_2.Directive)('@transaction'),
49
+ (0, type_graphql_2.Mutation)(returns => [nonconformance_cause_1.NonconformanceCause]),
50
+ tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
51
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
50
52
  tslib_1.__metadata("design:type", Function),
51
53
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
52
54
  tslib_1.__metadata("design:returntype", Promise)
53
55
  ], NonconformanceCauseResolver.prototype, "updateMultipleNonconformanceCause", null);
54
56
  exports.NonconformanceCauseResolver = NonconformanceCauseResolver = tslib_1.__decorate([
55
- (0, type_graphql_1.Resolver)(nonconformance_cause_1.NonconformanceCause)
57
+ (0, type_graphql_2.Resolver)(nonconformance_cause_1.NonconformanceCause),
58
+ (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
56
59
  ], NonconformanceCauseResolver);
57
60
  //# sourceMappingURL=nonconformance-cause-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nonconformance-cause-resolver.js","sourceRoot":"","sources":["../../../server/service/quality/nonconformance-cause-resolver.ts"],"names":[],"mappings":";;;;AAAA,+CAA2G;AAC3G,iDAA+D;AAC/D,gDAA+D;AAC/D,gDAA6C;AAC7C,gDAA2C;AAC3C,iEAA4D;AAG5D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAA0G,CAAA;AAAjE;IAArC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;;sDAA8B;AAAqB;IAAnB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;sDAAc;AAA/H,uBAAuB;IAD5B,IAAA,yBAAU,GAAE;GACP,uBAAuB,CAA0G;AAGhI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGhC,AAAN,KAAK,CAAC,uBAAuB,CAA0B,MAAiB,EAAS,OAAwB;QACvG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAU,EAAC,qBAAqB,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9F,OAAO,EAAE,KAAK,EAAE,KAA8B,EAAE,KAAK,EAAE,CAAA;IACzD,CAAC;IAIK,AAAN,KAAK,CAAC,iCAAiC,CAAyC,OAAsB,EAAS,OAAwB;QACrI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,OAAO,MAAM,IAAA,+BAAiB,EAAC,EAAE,EAAE,MAAM,EAAE,IAAA,0BAAY,EAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAA0B,CAAA;IAC9J,CAAC;CACF,CAAA;AAdY,kEAA2B;AAGhC;IAFL,IAAA,wBAAS,EAAC,kFAAkF,CAAC;IAC7F,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC;IACX,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;0EAGvE;AAIK;IAHL,IAAA,wBAAS,EAAC,qFAAqF,CAAC;IAChG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;IACF,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAY,CAAC,CAAC,CAAA;IAA0B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oFAG7G;sCAbU,2BAA2B;IADvC,IAAA,uBAAQ,EAAC,0CAAmB,CAAC;GACjB,2BAA2B,CAcvC","sourcesContent":["import { Arg, Args, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\nimport { ListParam, ScalarObject } from '@things-factory/shell'\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { NonconformanceCause } from './nonconformance-cause'\n\n@ObjectType()\nclass NonconformanceCauseList { @Field(type => [NonconformanceCause]) items: NonconformanceCause[]; @Field(type => Int) total: number }\n\n@Resolver(NonconformanceCause)\nexport class NonconformanceCauseResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => NonconformanceCauseList)\n async nonconformanceCauseList(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<NonconformanceCauseList> {\n const { items, total } = await listMaster('nonconformanceCause', params, context.state.domain)\n return { items: items as NonconformanceCause[], total }\n }\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [NonconformanceCause])\n async updateMultipleNonconformanceCause(@Arg('patches', type => [ScalarObject]) patches: MasterPatch[], @Ctx() context: ResolverContext): Promise<NonconformanceCause[]> {\n const { domain, user, tx } = context.state\n return await saveMasterPatches(tx, domain, masterAxisOf('nonconformanceCause').entity, patches, user, { hasEffectivePeriod: true }) as NonconformanceCause[]\n }\n}\n"]}
1
+ {"version":3,"file":"nonconformance-cause-resolver.js","sourceRoot":"","sources":["../../../server/service/quality/nonconformance-cause-resolver.ts"],"names":[],"mappings":";;;;AAAA,+CAA4C;AAC5C,iDAAqD;AACrD,+CAA2G;AAC3G,iDAA+D;AAC/D,gDAA+D;AAC/D,gDAA6C;AAC7C,gDAA2C;AAC3C,iEAA4D;AAG5D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAA0G,CAAA;AAAjE;IAArC,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;;sDAA8B;AAAqB;IAAnB,IAAA,oBAAK,EAAC,IAAI,CAAC,EAAE,CAAC,kBAAG,CAAC;;sDAAc;AAA/H,uBAAuB;IAD5B,IAAA,yBAAU,GAAE;GACP,uBAAuB,CAA0G;AAIhI,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IAGhC,AAAN,KAAK,CAAC,uBAAuB,CAA0B,MAAiB,EAAS,OAAwB;QACvG,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,IAAA,wBAAU,EAAC,qBAAqB,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC9F,OAAO,EAAE,KAAK,EAAE,KAA8B,EAAE,KAAK,EAAE,CAAA;IACzD,CAAC;IAIK,AAAN,KAAK,CAAC,iCAAiC,CAAyC,OAAsB,EAAS,OAAwB;QACrI,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1C,OAAO,MAAM,IAAA,+BAAiB,EAAC,EAAE,EAAE,MAAM,EAAE,IAAA,0BAAY,EAAC,qBAAqB,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAA0B,CAAA;IAC9J,CAAC;CACF,CAAA;AAdY,kEAA2B;AAGhC;IAFL,IAAA,wBAAS,EAAC,kFAAkF,CAAC;IAC7F,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,uBAAuB,CAAC;IACX,mBAAA,IAAA,mBAAI,EAAC,IAAI,CAAC,EAAE,CAAC,iBAAS,CAAC,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;0EAGvE;AAIK;IAHL,IAAA,wBAAS,EAAC,qFAAqF,CAAC;IAChG,IAAA,wBAAS,EAAC,cAAc,CAAC;IACzB,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,CAAC,0CAAmB,CAAC,CAAC;IACF,mBAAA,IAAA,kBAAG,EAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,oBAAY,CAAC,CAAC,CAAA;IAA0B,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;oFAG7G;sCAbU,2BAA2B;IAFvC,IAAA,uBAAQ,EAAC,0CAAmB,CAAC;IAC7B,IAAA,4BAAa,EAAC,qBAAa,CAAC;GAChB,2BAA2B,CAcvC","sourcesContent":["import { UseMiddleware } from 'type-graphql'\nimport { SpeakRefusals } from '@things-factory/shell'\nimport { Arg, Args, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\nimport { ListParam, ScalarObject } from '@things-factory/shell'\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { NonconformanceCause } from './nonconformance-cause'\n\n@ObjectType()\nclass NonconformanceCauseList { @Field(type => [NonconformanceCause]) items: NonconformanceCause[]; @Field(type => Int) total: number }\n\n@Resolver(NonconformanceCause)\n@UseMiddleware(SpeakRefusals)\nexport class NonconformanceCauseResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => NonconformanceCauseList)\n async nonconformanceCauseList(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<NonconformanceCauseList> {\n const { items, total } = await listMaster('nonconformanceCause', params, context.state.domain)\n return { items: items as NonconformanceCause[], total }\n }\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [NonconformanceCause])\n async updateMultipleNonconformanceCause(@Arg('patches', type => [ScalarObject]) patches: MasterPatch[], @Ctx() context: ResolverContext): Promise<NonconformanceCause[]> {\n const { domain, user, tx } = context.state\n return await saveMasterPatches(tx, domain, masterAxisOf('nonconformanceCause').entity, patches, user, { hasEffectivePeriod: true }) as NonconformanceCause[]\n }\n}\n"]}
@@ -4,6 +4,8 @@ exports.RouteDefinitionResolver = exports.RecipeDefinitionResolver = exports.Rou
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
+ const type_graphql_2 = require("type-graphql");
8
+ const shell_2 = require("@things-factory/shell");
7
9
  const master_crud_1 = require("../master-crud");
8
10
  const master_axis_1 = require("../master-axis");
9
11
  const master_list_1 = require("../master-list");
@@ -21,29 +23,29 @@ let RecipeDefinitionList = class RecipeDefinitionList {
21
23
  };
22
24
  exports.RecipeDefinitionList = RecipeDefinitionList;
23
25
  tslib_1.__decorate([
24
- (0, type_graphql_1.Field)(type => [recipe_definition_1.RecipeDefinition]),
26
+ (0, type_graphql_2.Field)(type => [recipe_definition_1.RecipeDefinition]),
25
27
  tslib_1.__metadata("design:type", Array)
26
28
  ], RecipeDefinitionList.prototype, "items", void 0);
27
29
  tslib_1.__decorate([
28
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
30
+ (0, type_graphql_2.Field)(type => type_graphql_2.Int),
29
31
  tslib_1.__metadata("design:type", Number)
30
32
  ], RecipeDefinitionList.prototype, "total", void 0);
31
33
  exports.RecipeDefinitionList = RecipeDefinitionList = tslib_1.__decorate([
32
- (0, type_graphql_1.ObjectType)({ description: 'A page of recipe definitions' })
34
+ (0, type_graphql_2.ObjectType)({ description: 'A page of recipe definitions' })
33
35
  ], RecipeDefinitionList);
34
36
  let RouteDefinitionList = class RouteDefinitionList {
35
37
  };
36
38
  exports.RouteDefinitionList = RouteDefinitionList;
37
39
  tslib_1.__decorate([
38
- (0, type_graphql_1.Field)(type => [route_definition_1.RouteDefinition]),
40
+ (0, type_graphql_2.Field)(type => [route_definition_1.RouteDefinition]),
39
41
  tslib_1.__metadata("design:type", Array)
40
42
  ], RouteDefinitionList.prototype, "items", void 0);
41
43
  tslib_1.__decorate([
42
- (0, type_graphql_1.Field)(type => type_graphql_1.Int),
44
+ (0, type_graphql_2.Field)(type => type_graphql_2.Int),
43
45
  tslib_1.__metadata("design:type", Number)
44
46
  ], RouteDefinitionList.prototype, "total", void 0);
45
47
  exports.RouteDefinitionList = RouteDefinitionList = tslib_1.__decorate([
46
- (0, type_graphql_1.ObjectType)({ description: 'A page of route definitions' })
48
+ (0, type_graphql_2.ObjectType)({ description: 'A page of route definitions' })
47
49
  ], RouteDefinitionList);
48
50
  let RecipeDefinitionResolver = class RecipeDefinitionResolver {
49
51
  async recipeDefinitions(params, context) {
@@ -62,26 +64,27 @@ let RecipeDefinitionResolver = class RecipeDefinitionResolver {
62
64
  };
63
65
  exports.RecipeDefinitionResolver = RecipeDefinitionResolver;
64
66
  tslib_1.__decorate([
65
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
66
- (0, type_graphql_1.Query)(returns => RecipeDefinitionList, { description: 'To fetch recipe definitions' }),
67
- tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
68
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
67
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
68
+ (0, type_graphql_2.Query)(returns => RecipeDefinitionList, { description: 'To fetch recipe definitions' }),
69
+ tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
70
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
69
71
  tslib_1.__metadata("design:type", Function),
70
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
72
+ tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
71
73
  tslib_1.__metadata("design:returntype", Promise)
72
74
  ], RecipeDefinitionResolver.prototype, "recipeDefinitions", null);
73
75
  tslib_1.__decorate([
74
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
75
- (0, type_graphql_1.Directive)('@transaction'),
76
- (0, type_graphql_1.Mutation)(returns => [recipe_definition_1.RecipeDefinition], { description: 'To create, change or retire recipe definitions' }),
77
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.ScalarObject])),
78
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
76
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
77
+ (0, type_graphql_2.Directive)('@transaction'),
78
+ (0, type_graphql_2.Mutation)(returns => [recipe_definition_1.RecipeDefinition], { description: 'To create, change or retire recipe definitions' }),
79
+ tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
80
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
79
81
  tslib_1.__metadata("design:type", Function),
80
82
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
81
83
  tslib_1.__metadata("design:returntype", Promise)
82
84
  ], RecipeDefinitionResolver.prototype, "updateMultipleRecipeDefinition", null);
83
85
  exports.RecipeDefinitionResolver = RecipeDefinitionResolver = tslib_1.__decorate([
84
- (0, type_graphql_1.Resolver)(recipe_definition_1.RecipeDefinition)
86
+ (0, type_graphql_2.Resolver)(recipe_definition_1.RecipeDefinition),
87
+ (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
85
88
  ], RecipeDefinitionResolver);
86
89
  let RouteDefinitionResolver = class RouteDefinitionResolver {
87
90
  async routeDefinitions(params, context) {
@@ -100,25 +103,26 @@ let RouteDefinitionResolver = class RouteDefinitionResolver {
100
103
  };
101
104
  exports.RouteDefinitionResolver = RouteDefinitionResolver;
102
105
  tslib_1.__decorate([
103
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
104
- (0, type_graphql_1.Query)(returns => RouteDefinitionList, { description: 'To fetch route definitions' }),
105
- tslib_1.__param(0, (0, type_graphql_1.Args)(type => shell_1.ListParam)),
106
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
106
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "query", domainOwnerGranted: true)'),
107
+ (0, type_graphql_2.Query)(returns => RouteDefinitionList, { description: 'To fetch route definitions' }),
108
+ tslib_1.__param(0, (0, type_graphql_2.Args)(type => shell_2.ListParam)),
109
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
107
110
  tslib_1.__metadata("design:type", Function),
108
- tslib_1.__metadata("design:paramtypes", [shell_1.ListParam, Object]),
111
+ tslib_1.__metadata("design:paramtypes", [shell_2.ListParam, Object]),
109
112
  tslib_1.__metadata("design:returntype", Promise)
110
113
  ], RouteDefinitionResolver.prototype, "routeDefinitions", null);
111
114
  tslib_1.__decorate([
112
- (0, type_graphql_1.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
113
- (0, type_graphql_1.Directive)('@transaction'),
114
- (0, type_graphql_1.Mutation)(returns => [route_definition_1.RouteDefinition], { description: 'To create, change or retire route definitions' }),
115
- tslib_1.__param(0, (0, type_graphql_1.Arg)('patches', type => [shell_1.ScalarObject])),
116
- tslib_1.__param(1, (0, type_graphql_1.Ctx)()),
115
+ (0, type_graphql_2.Directive)('@privilege(category: "ops-master", privilege: "mutation", domainOwnerGranted: true)'),
116
+ (0, type_graphql_2.Directive)('@transaction'),
117
+ (0, type_graphql_2.Mutation)(returns => [route_definition_1.RouteDefinition], { description: 'To create, change or retire route definitions' }),
118
+ tslib_1.__param(0, (0, type_graphql_2.Arg)('patches', type => [shell_2.ScalarObject])),
119
+ tslib_1.__param(1, (0, type_graphql_2.Ctx)()),
117
120
  tslib_1.__metadata("design:type", Function),
118
121
  tslib_1.__metadata("design:paramtypes", [Array, Object]),
119
122
  tslib_1.__metadata("design:returntype", Promise)
120
123
  ], RouteDefinitionResolver.prototype, "updateMultipleRouteDefinition", null);
121
124
  exports.RouteDefinitionResolver = RouteDefinitionResolver = tslib_1.__decorate([
122
- (0, type_graphql_1.Resolver)(route_definition_1.RouteDefinition)
125
+ (0, type_graphql_2.Resolver)(route_definition_1.RouteDefinition),
126
+ (0, type_graphql_1.UseMiddleware)(shell_1.SpeakRefusals)
123
127
  ], RouteDefinitionResolver);
124
128
  //# sourceMappingURL=recipe-master-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recipe-master-resolver.js","sourceRoot":"","sources":["../../../server/service/recipe/recipe-master-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { Args, Arg, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\n\nimport { ListParam, ScalarObject } from '@things-factory/shell'\n\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { RecipeDefinition } from './recipe-definition'\nimport { RouteDefinition } from './route-definition'\n\n/**\n * 레시피·라우팅 축을 채우고 고친다.\n *\n * 규칙은 `master-crud.ts` 한 곳에 있다. 여기는 축의 이름만 붙인다 — 다른 열셋과 같은 모양이다.\n *\n * **개정할 때 행을 고치지 않고 유효 기간의 끝을 채운다.** 고치면 그 레시피로 만든 지난 실적이 어느\n * 배합으로 만든 것인지 잃는다.\n */\n\n@ObjectType({ description: 'A page of recipe definitions' })\nexport class RecipeDefinitionList {\n @Field(type => [RecipeDefinition])\n items: RecipeDefinition[]\n\n @Field(type => Int)\n total: number\n}\n\n@ObjectType({ description: 'A page of route definitions' })\nexport class RouteDefinitionList {\n @Field(type => [RouteDefinition])\n items: RouteDefinition[]\n\n @Field(type => Int)\n total: number\n}\n\n@Resolver(RecipeDefinition)\nexport class RecipeDefinitionResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => RecipeDefinitionList, { description: 'To fetch recipe definitions' })\n async recipeDefinitions(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<RecipeDefinitionList> {\n const { domain } = context.state\n const { items, total } = await listMaster('recipeDefinition', params, domain)\n\n return { items: items as RecipeDefinition[], total }\n }\n\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [RecipeDefinition], { description: 'To create, change or retire recipe definitions' })\n async updateMultipleRecipeDefinition(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<RecipeDefinition[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('recipeDefinition')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as RecipeDefinition[]\n }\n}\n\n@Resolver(RouteDefinition)\nexport class RouteDefinitionResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => RouteDefinitionList, { description: 'To fetch route definitions' })\n async routeDefinitions(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<RouteDefinitionList> {\n const { domain } = context.state\n const { items, total } = await listMaster('routeDefinition', params, domain)\n\n return { items: items as RouteDefinition[], total }\n }\n\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [RouteDefinition], { description: 'To create, change or retire route definitions' })\n async updateMultipleRouteDefinition(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<RouteDefinition[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('routeDefinition')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as RouteDefinition[]\n }\n}\n"]}
1
+ {"version":3,"file":"recipe-master-resolver.js","sourceRoot":"","sources":["../../../server/service/recipe/recipe-master-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import { UseMiddleware } from 'type-graphql'\nimport { SpeakRefusals } from '@things-factory/shell'\nimport { Args, Arg, Ctx, Directive, Int, Mutation, ObjectType, Field, Query, Resolver } from 'type-graphql'\n\nimport { ListParam, ScalarObject } from '@things-factory/shell'\n\nimport { MasterPatch, saveMasterPatches } from '../master-crud'\nimport { masterAxisOf } from '../master-axis'\nimport { listMaster } from '../master-list'\nimport { RecipeDefinition } from './recipe-definition'\nimport { RouteDefinition } from './route-definition'\n\n/**\n * 레시피·라우팅 축을 채우고 고친다.\n *\n * 규칙은 `master-crud.ts` 한 곳에 있다. 여기는 축의 이름만 붙인다 — 다른 열셋과 같은 모양이다.\n *\n * **개정할 때 행을 고치지 않고 유효 기간의 끝을 채운다.** 고치면 그 레시피로 만든 지난 실적이 어느\n * 배합으로 만든 것인지 잃는다.\n */\n\n@ObjectType({ description: 'A page of recipe definitions' })\nexport class RecipeDefinitionList {\n @Field(type => [RecipeDefinition])\n items: RecipeDefinition[]\n\n @Field(type => Int)\n total: number\n}\n\n@ObjectType({ description: 'A page of route definitions' })\nexport class RouteDefinitionList {\n @Field(type => [RouteDefinition])\n items: RouteDefinition[]\n\n @Field(type => Int)\n total: number\n}\n\n@Resolver(RecipeDefinition)\n@UseMiddleware(SpeakRefusals)\nexport class RecipeDefinitionResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => RecipeDefinitionList, { description: 'To fetch recipe definitions' })\n async recipeDefinitions(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<RecipeDefinitionList> {\n const { domain } = context.state\n const { items, total } = await listMaster('recipeDefinition', params, domain)\n\n return { items: items as RecipeDefinition[], total }\n }\n\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [RecipeDefinition], { description: 'To create, change or retire recipe definitions' })\n async updateMultipleRecipeDefinition(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<RecipeDefinition[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('recipeDefinition')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as RecipeDefinition[]\n }\n}\n\n@Resolver(RouteDefinition)\n@UseMiddleware(SpeakRefusals)\nexport class RouteDefinitionResolver {\n @Directive('@privilege(category: \"ops-master\", privilege: \"query\", domainOwnerGranted: true)')\n @Query(returns => RouteDefinitionList, { description: 'To fetch route definitions' })\n async routeDefinitions(\n @Args(type => ListParam) params: ListParam,\n @Ctx() context: ResolverContext\n ): Promise<RouteDefinitionList> {\n const { domain } = context.state\n const { items, total } = await listMaster('routeDefinition', params, domain)\n\n return { items: items as RouteDefinition[], total }\n }\n\n @Directive('@privilege(category: \"ops-master\", privilege: \"mutation\", domainOwnerGranted: true)')\n @Directive('@transaction')\n @Mutation(returns => [RouteDefinition], { description: 'To create, change or retire route definitions' })\n async updateMultipleRouteDefinition(\n @Arg('patches', type => [ScalarObject]) patches: MasterPatch[],\n @Ctx() context: ResolverContext\n ): Promise<RouteDefinition[]> {\n const { domain, user, tx } = context.state\n const axis = masterAxisOf('routeDefinition')\n\n const saved = await saveMasterPatches(tx, domain, axis.entity, patches, user, {\n hasEffectivePeriod: axis.hasEffectivePeriod\n })\n\n return saved as RouteDefinition[]\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  import { TestSpecification } from './test-specification';
2
2
  import { TestSpecificationQuery } from './test-spec-query';
3
3
  import { TestSpecificationResolver } from './test-spec-master-resolver';
4
- export declare const entities: (typeof TestSpecification)[];
5
- export declare const resolvers: (typeof TestSpecificationResolver | typeof TestSpecificationQuery)[];
4
+ import { TestSpecificationRevisionResolver } from './test-spec-revision-resolver';
5
+ export declare const entities: (typeof TestSpecification | typeof import("./test-spec-revision").TestSpecificationRevision | typeof import("./test-spec-revision").TestSpecificationPlan | typeof import("./test-spec-revision").TestSpecificationSegment | typeof import("./test-spec-revision").TestSpecificationBasis)[];
6
+ export declare const resolvers: (typeof TestSpecificationResolver | typeof TestSpecificationRevisionResolver | typeof TestSpecificationQuery)[];
@@ -4,6 +4,8 @@ exports.resolvers = exports.entities = void 0;
4
4
  const test_specification_1 = require("./test-specification");
5
5
  const test_spec_query_1 = require("./test-spec-query");
6
6
  const test_spec_master_resolver_1 = require("./test-spec-master-resolver");
7
- exports.entities = [test_specification_1.TestSpecification];
8
- exports.resolvers = [test_spec_query_1.TestSpecificationQuery, test_spec_master_resolver_1.TestSpecificationResolver];
7
+ const test_spec_revision_1 = require("./test-spec-revision");
8
+ const test_spec_revision_resolver_1 = require("./test-spec-revision-resolver");
9
+ exports.entities = [test_specification_1.TestSpecification, ...test_spec_revision_1.TEST_SPEC_REVISION_ENTITIES];
10
+ exports.resolvers = [test_spec_query_1.TestSpecificationQuery, test_spec_master_resolver_1.TestSpecificationResolver, test_spec_revision_resolver_1.TestSpecificationRevisionResolver];
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/test-spec/index.ts"],"names":[],"mappings":";;;AAAA,6DAAwD;AACxD,uDAA0D;AAC1D,2EAAuE;AAE1D,QAAA,QAAQ,GAAG,CAAC,sCAAiB,CAAC,CAAA;AAC9B,QAAA,SAAS,GAAG,CAAC,wCAAsB,EAAE,qDAAyB,CAAC,CAAA","sourcesContent":["import { TestSpecification } from './test-specification'\nimport { TestSpecificationQuery } from './test-spec-query'\nimport { TestSpecificationResolver } from './test-spec-master-resolver'\n\nexport const entities = [TestSpecification]\nexport const resolvers = [TestSpecificationQuery, TestSpecificationResolver]\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/service/test-spec/index.ts"],"names":[],"mappings":";;;AAAA,6DAAwD;AACxD,uDAA0D;AAC1D,2EAAuE;AACvE,6DAAkE;AAClE,+EAAiF;AAEpE,QAAA,QAAQ,GAAG,CAAC,sCAAiB,EAAE,GAAG,gDAA2B,CAAC,CAAA;AAC9D,QAAA,SAAS,GAAG,CAAC,wCAAsB,EAAE,qDAAyB,EAAE,+DAAiC,CAAC,CAAA","sourcesContent":["import { TestSpecification } from './test-specification'\nimport { TestSpecificationQuery } from './test-spec-query'\nimport { TestSpecificationResolver } from './test-spec-master-resolver'\nimport { TEST_SPEC_REVISION_ENTITIES } from './test-spec-revision'\nimport { TestSpecificationRevisionResolver } from './test-spec-revision-resolver'\n\nexport const entities = [TestSpecification, ...TEST_SPEC_REVISION_ENTITIES]\nexport const resolvers = [TestSpecificationQuery, TestSpecificationResolver, TestSpecificationRevisionResolver]\n"]}
@@ -0,0 +1,32 @@
1
+ import { EntityManager } from 'typeorm';
2
+ import { Domain, ListParam } from '@things-factory/shell';
3
+ import { TestSpecification } from './test-specification';
4
+ /** Filter, sort, paginate and display the same time projection. No per-row resolution queries. */
5
+ export declare function listEffectiveTestSpecifications(manager: EntityManager, domain: Domain, params: ListParam, at?: Date): Promise<{
6
+ items: (TestSpecification & {
7
+ id: string;
8
+ domain?: Domain;
9
+ domainId?: string;
10
+ planGeneration: number;
11
+ revisionLock: number;
12
+ name: string;
13
+ description?: string;
14
+ version?: string;
15
+ criteria?: Record<string, unknown>[];
16
+ effectiveStart?: Date;
17
+ effectiveEnd?: Date;
18
+ createdAt?: Date;
19
+ updatedAt?: Date;
20
+ creator?: import("@things-factory/auth-base").User;
21
+ creatorId?: string;
22
+ updater?: import("@things-factory/auth-base").User;
23
+ updaterId?: string;
24
+ } & {
25
+ description: string;
26
+ version: string;
27
+ criteria: import("@operato/ops-contract").TestSpecificationCriterion[];
28
+ effectiveStart: Date;
29
+ effectiveEnd: Date;
30
+ })[];
31
+ total: number;
32
+ }>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listEffectiveTestSpecifications = listEffectiveTestSpecifications;
4
+ const shell_1 = require("@things-factory/shell");
5
+ const test_specification_1 = require("./test-specification");
6
+ const test_spec_revision_1 = require("./test-spec-revision");
7
+ /** Filter, sort, paginate and display the same time projection. No per-row resolution queries. */
8
+ async function listEffectiveTestSpecifications(manager, domain, params, at = new Date()) {
9
+ const query = (0, shell_1.getQueryBuilderFromListParams)({
10
+ repository: manager.getRepository(test_specification_1.TestSpecification),
11
+ domain,
12
+ params,
13
+ alias: 'spec',
14
+ searchables: ['name', 'description'],
15
+ sortables: ['id', 'name', 'description', 'version', 'effectiveStart', 'effectiveEnd', 'createdAt', 'updatedAt'],
16
+ columnExpressions: {
17
+ description: 'revision.description',
18
+ version: 'revision.version',
19
+ effectiveStart: 'segment.validFrom',
20
+ effectiveEnd: 'segment.validTo'
21
+ }
22
+ });
23
+ query
24
+ .leftJoin(test_spec_revision_1.TestSpecificationPlan, 'plan', 'plan.spec_id = spec.id AND plan.domain_id = spec.domain_id AND plan.generation = spec.plan_generation')
25
+ .leftJoinAndMapOne('spec.selectedSegment', test_spec_revision_1.TestSpecificationSegment, 'segment', 'segment.plan_id = plan.id AND segment.validFrom <= :at AND (segment.validTo IS NULL OR segment.validTo > :at)', { at })
26
+ .leftJoinAndMapOne('spec.selectedRevision', test_spec_revision_1.TestSpecificationRevision, 'revision', 'revision.id = segment.revision_id');
27
+ const [rows, total] = await query.getManyAndCount();
28
+ const items = rows.map(row => {
29
+ const { selectedRevision, selectedSegment, ...identity } = row;
30
+ return Object.assign(new test_specification_1.TestSpecification(), identity, {
31
+ description: selectedRevision?.description ?? null,
32
+ version: selectedRevision?.version ?? null,
33
+ criteria: selectedRevision?.criteria ?? [],
34
+ effectiveStart: selectedSegment?.validFrom ?? null,
35
+ effectiveEnd: selectedSegment?.validTo ?? null
36
+ });
37
+ });
38
+ return { items, total };
39
+ }
40
+ //# sourceMappingURL=test-spec-effective-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-spec-effective-list.js","sourceRoot":"","sources":["../../../server/service/test-spec/test-spec-effective-list.ts"],"names":[],"mappings":";;AAWA,0EAmDC;AA7DD,iDAAwF;AACxF,6DAAwD;AACxD,6DAAiH;AAOjH,kGAAkG;AAC3F,KAAK,UAAU,+BAA+B,CACnD,OAAsB,EACtB,MAAc,EACd,MAAiB,EACjB,EAAE,GAAG,IAAI,IAAI,EAAE;IAEf,MAAM,KAAK,GAAG,IAAA,qCAA6B,EAAC;QAC1C,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,sCAAiB,CAAC;QACpD,MAAM;QACN,MAAM;QACN,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;QACpC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC;QAC/G,iBAAiB,EAAE;YACjB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,kBAAkB;YAC3B,cAAc,EAAE,mBAAmB;YACnC,YAAY,EAAE,iBAAiB;SAChC;KACF,CAAC,CAAA;IACF,KAAK;SACF,QAAQ,CACP,0CAAqB,EACrB,MAAM,EACN,uGAAuG,CACxG;SACA,iBAAiB,CAChB,sBAAsB,EACtB,6CAAwB,EACxB,SAAS,EACT,+GAA+G,EAC/G,EAAE,EAAE,EAAE,CACP;SACA,iBAAiB,CAChB,uBAAuB,EACvB,8CAAyB,EACzB,UAAU,EACV,mCAAmC,CACpC,CAAA;IACH,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,eAAe,EAAE,CAAA;IACnD,MAAM,KAAK,GAAI,IAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/C,MAAM,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,CAAA;QAC9D,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,sCAAiB,EAAE,EAAE,QAAQ,EAAE;YACtD,WAAW,EAAE,gBAAgB,EAAE,WAAW,IAAI,IAAI;YAClD,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,IAAI;YAC1C,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,IAAI,EAAE;YAC1C,cAAc,EAAE,eAAe,EAAE,SAAS,IAAI,IAAI;YAClD,YAAY,EAAE,eAAe,EAAE,OAAO,IAAI,IAAI;SAC/C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AACzB,CAAC","sourcesContent":["import { EntityManager } from 'typeorm'\nimport { Domain, getQueryBuilderFromListParams, ListParam } from '@things-factory/shell'\nimport { TestSpecification } from './test-specification'\nimport { TestSpecificationPlan, TestSpecificationRevision, TestSpecificationSegment } from './test-spec-revision'\n\ntype EffectiveRow = TestSpecification & {\n selectedRevision?: TestSpecificationRevision\n selectedSegment?: TestSpecificationSegment\n}\n\n/** Filter, sort, paginate and display the same time projection. No per-row resolution queries. */\nexport async function listEffectiveTestSpecifications(\n manager: EntityManager,\n domain: Domain,\n params: ListParam,\n at = new Date()\n) {\n const query = getQueryBuilderFromListParams({\n repository: manager.getRepository(TestSpecification),\n domain,\n params,\n alias: 'spec',\n searchables: ['name', 'description'],\n sortables: ['id', 'name', 'description', 'version', 'effectiveStart', 'effectiveEnd', 'createdAt', 'updatedAt'],\n columnExpressions: {\n description: 'revision.description',\n version: 'revision.version',\n effectiveStart: 'segment.validFrom',\n effectiveEnd: 'segment.validTo'\n }\n })\n query\n .leftJoin(\n TestSpecificationPlan,\n 'plan',\n 'plan.spec_id = spec.id AND plan.domain_id = spec.domain_id AND plan.generation = spec.plan_generation'\n )\n .leftJoinAndMapOne(\n 'spec.selectedSegment',\n TestSpecificationSegment,\n 'segment',\n 'segment.plan_id = plan.id AND segment.validFrom <= :at AND (segment.validTo IS NULL OR segment.validTo > :at)',\n { at }\n )\n .leftJoinAndMapOne(\n 'spec.selectedRevision',\n TestSpecificationRevision,\n 'revision',\n 'revision.id = segment.revision_id'\n )\n const [rows, total] = await query.getManyAndCount()\n const items = (rows as EffectiveRow[]).map(row => {\n const { selectedRevision, selectedSegment, ...identity } = row\n return Object.assign(new TestSpecification(), identity, {\n description: selectedRevision?.description ?? null,\n version: selectedRevision?.version ?? null,\n criteria: selectedRevision?.criteria ?? [],\n effectiveStart: selectedSegment?.validFrom ?? null,\n effectiveEnd: selectedSegment?.validTo ?? null\n })\n })\n return { items, total }\n}\n"]}
@@ -1,7 +1,8 @@
1
1
  import { ListParam } from '@things-factory/shell';
2
- import { MasterPatch } from '../master-crud';
2
+ import type { MasterPatch } from '../master-crud';
3
3
  import { CriterionPatch } from './criteria-rows';
4
4
  import { TestSpecification } from './test-specification';
5
+ /** Reads project the effective revision. Changes go through the revision draft resolver. */
5
6
  /**
6
7
  * 기준 한 줄 — **화면이 받는 모양.**
7
8
  *
@@ -29,13 +30,7 @@ export declare class TestSpecificationList {
29
30
  }
30
31
  export declare class TestSpecificationResolver {
31
32
  testSpecifications(params: ListParam, context: ResolverContext): Promise<TestSpecificationList>;
32
- /**
33
- * 그리드가 보낸 변경을 한 번에 적용한다.
34
- *
35
- * 패치를 `ScalarObject` 로 받는다 — 축마다 입력 타입을 따로 만들면 칸을 하나 더할 때마다 두 곳을
36
- * 고쳐야 하고, 한쪽을 빠뜨리면 그 칸이 오류 보고 없이 저장되지 않는다. 돌려주는 것은 타입이 있는
37
- * 엔티티라 무엇이 저장됐는지 스키마로 확인할 수 있다.
38
- */
33
+ /** Explicitly closed old write door: even non-regulated publication must retain a revision. */
39
34
  updateMultipleTestSpecification(patches: MasterPatch[], context: ResolverContext): Promise<TestSpecification[]>;
40
35
  /**
41
36
  * 명세 하나의 기준을 **행으로** 낸다.
@@ -44,11 +39,6 @@ export declare class TestSpecificationResolver {
44
39
  * 「기준이 없는 명세」와 같아 보이고, 그러면 사람이 기준을 다시 적는다.
45
40
  */
46
41
  testSpecificationCriteria(name: string, context: ResolverContext): Promise<TestSpecificationCriterionRow[]>;
47
- /**
48
- * 기준을 **바뀐 줄만** 받아 얹는다.
49
- *
50
- * 목록 전체를 받으면 두 사람이 같은 명세를 열어 각자 한 줄씩 고쳤을 때 나중에 저장한 쪽이 앞사람의
51
- * 줄을 지운다. 판단은 `criteria-rows.ts` 와 `criteria-check.ts` 가 든다.
52
- */
42
+ /** Criteria belong to a draft, not to the stable identity row. */
53
43
  updateTestSpecificationCriteria(name: string, patches: CriterionPatch[], context: ResolverContext): Promise<TestSpecificationCriterionRow[]>;
54
44
  }