@dssp/dssp 1.0.11 → 1.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dssp/dssp",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -42,7 +42,7 @@
42
42
  "@dssp/building-complex": "^1.0.6",
43
43
  "@dssp/integration-allbaro": "^1.0.5",
44
44
  "@dssp/integration-kiscon": "^1.0.5",
45
- "@dssp/project": "^1.0.11",
45
+ "@dssp/project": "^1.0.13",
46
46
  "@material/web": "^2.4.0",
47
47
  "@operato/chart": "^10.0.0",
48
48
  "@operato/gantt": "^10.0.0",
@@ -76,5 +76,5 @@
76
76
  "devDependencies": {
77
77
  "@things-factory/builder": "^10.0.0"
78
78
  },
79
- "gitHead": "4ea87b3582373e86bd108b755c26dbe19be6b123"
79
+ "gitHead": "ca9d4b48096d52c827012ba1fe0411d6825126bf"
80
80
  }
package/schema.graphql CHANGED
@@ -82,6 +82,11 @@ type Activity {
82
82
  multiple: String
83
83
  name: String
84
84
  priority: Float
85
+
86
+ """
87
+ true when a rejection closes the case for good — it cannot be restarted
88
+ """
89
+ rejectionIsFinal: Boolean
85
90
  reportSource: String
86
91
 
87
92
  """The type of report to be shown when a task is approved"""
@@ -126,6 +131,11 @@ type ActivityApproval {
126
131
  approver: User
127
132
  approverRole: Role
128
133
  comment: String
134
+
135
+ """
136
+ When the opinion was said. Empty means nothing was said — silence is not consent.
137
+ """
138
+ commentedAt: DateTimeISO
129
139
  createdAt: DateTimeISO
130
140
  creator: User
131
141
  derivedApprovals: [ActivityApproval!]!
@@ -138,6 +148,11 @@ type ActivityApproval {
138
148
 
139
149
  """delegator approval"""
140
150
  originalApproval: ActivityApproval
151
+
152
+ """
153
+ In what capacity: approval decides, reference only comments. Empty means approval.
154
+ """
155
+ participation: String
141
156
  round: Float
142
157
  terminatedAt: DateTimeISO
143
158
  terminator: User
@@ -152,14 +167,31 @@ type ActivityApprovalList {
152
167
  }
153
168
 
154
169
  type ActivityEvent {
170
+ basis: ActivityEventDateBasis
155
171
  date: DateTimeISO
156
172
  id: String
157
173
  name: String
158
174
  priority: Float
159
- state: String
175
+ state: ActivityEventStatus
160
176
  type: String
161
177
  }
162
178
 
179
+ """what the date of an Activity Event means"""
180
+ enum ActivityEventDateBasis {
181
+ Due
182
+ HandedOver
183
+ Terminated
184
+ }
185
+
186
+ """state enumeration of a Activity Event"""
187
+ enum ActivityEventStatus {
188
+ Aborted
189
+ Approved
190
+ Done
191
+ Pending
192
+ Rejected
193
+ }
194
+
163
195
  """Entity for ActivityInstance"""
164
196
  type ActivityInstance {
165
197
  activity: Activity
@@ -190,6 +222,9 @@ type ActivityInstance {
190
222
  priority: Float
191
223
  reason: String
192
224
  refBy: String
225
+
226
+ """true when a rejection closes this case for good"""
227
+ rejectionIsFinal: Boolean
193
228
  startedAt: DateTimeISO
194
229
  starter: User
195
230
  state: String
@@ -297,6 +332,14 @@ input ActivityInstanceIssue {
297
332
  priority: Float
298
333
  reason: String
299
334
  refBy: String
335
+
336
+ """true when a rejection closes this case for good"""
337
+ rejectionIsFinal: Boolean
338
+
339
+ """
340
+ true when the caller expects this to go through an approval line — issuing fails if the line is empty
341
+ """
342
+ requireApproval: Boolean
300
343
  supervisoryRole: ObjectRef
301
344
  threadsMax: Int
302
345
  threadsMin: Int
@@ -352,6 +395,11 @@ input ActivityPatch {
352
395
  multiple: String
353
396
  name: String
354
397
  priority: Float
398
+
399
+ """
400
+ true when a rejection closes the case for good — it cannot be restarted
401
+ """
402
+ rejectionIsFinal: Boolean
355
403
  reportSource: String
356
404
  reportType: String
357
405
  schedule: String
@@ -369,6 +417,37 @@ input ActivityPatch {
369
417
  viewType: String
370
418
  }
371
419
 
420
+ """What the registering module declares about an installable activity"""
421
+ type ActivityReadiness {
422
+ """What is still missing, when the stage is partial"""
423
+ gaps: [String!]
424
+
425
+ """Result of the last recorded run of those tests"""
426
+ lastRun: ActivityTestRecord
427
+
428
+ """Anything a reader needs that the fields above do not carry"""
429
+ notes: String
430
+
431
+ """Working, partial, or declared only"""
432
+ stage: ActivityReadinessStage
433
+
434
+ """
435
+ Repo-relative test files that cover this activity. Named so the claim can be checked.
436
+ """
437
+ tests: [String!]
438
+ }
439
+
440
+ """
441
+ how far along an installable activity is, as declared by the module that registers it
442
+ """
443
+ enum ActivityReadinessStage {
444
+ Declared
445
+ NotWorklist
446
+ Partial
447
+ Planned
448
+ Working
449
+ }
450
+
372
451
  """Entity for ActivitySearchKeyItem"""
373
452
  type ActivitySearchKeyItem {
374
453
  description: String
@@ -436,6 +515,21 @@ input ActivityTemplatePatch {
436
515
  visibility: String
437
516
  }
438
517
 
518
+ """Recorded result of the test run that covers an installable activity"""
519
+ type ActivityTestRecord {
520
+ """When that run happened, ISO 8601"""
521
+ at: String
522
+
523
+ """The command that produced this record"""
524
+ command: String
525
+
526
+ """How many of the covering tests passed"""
527
+ passed: Float
528
+
529
+ """How many covering tests ran"""
530
+ total: Float
531
+ }
532
+
439
533
  """Entity for ActivityThread"""
440
534
  type ActivityThread {
441
535
  activityApprovals: [ActivityApproval!]!
@@ -778,6 +872,8 @@ type ApprovalLine {
778
872
  """Entity for approval line item"""
779
873
  type ApprovalLineItem {
780
874
  approver: OrgMemberTarget
875
+ notifyAfter: Int
876
+ participation: ApprovalParticipation
781
877
  type: String
782
878
  value: String
783
879
  }
@@ -816,6 +912,14 @@ input ApprovalLinePatch {
816
912
  ownerType: ApprovalLineOwnerType
817
913
  }
818
914
 
915
+ """
916
+ in what capacity this member joins the approval line: approval decides, reference only comments
917
+ """
918
+ enum ApprovalParticipation {
919
+ Approval
920
+ Reference
921
+ }
922
+
819
923
  type AssigneeItem {
820
924
  assignee: OrgMemberTarget
821
925
  type: OrgMemberTargetType
@@ -1934,6 +2038,17 @@ input BuildingPatch {
1934
2038
  name: String
1935
2039
  }
1936
2040
 
2041
+ """채팅 실시간 이벤트"""
2042
+ type ChatEvent {
2043
+ action: String
2044
+ event: String!
2045
+ lastReadAt: DateTimeISO
2046
+ message: ChatRoomMessage
2047
+ messageId: ID
2048
+ roomId: ID!
2049
+ userId: ID
2050
+ }
2051
+
1937
2052
  """A single chat message in a ChatSession."""
1938
2053
  type ChatMessage {
1939
2054
  """Message content"""
@@ -1980,6 +2095,60 @@ type ChatMessage {
1980
2095
  updater: User
1981
2096
  }
1982
2097
 
2098
+ """채팅 대화방"""
2099
+ type ChatRoom {
2100
+ createdAt: DateTimeISO
2101
+ creator: User
2102
+ domain: Domain
2103
+ id: ID!
2104
+ lastMessageAt: DateTimeISO
2105
+ lastMessagePreview: String
2106
+
2107
+ """대화방 멤버 목록"""
2108
+ members: [ChatRoomMember!]!
2109
+ name: String
2110
+
2111
+ """내가 안 읽은 메시지 수"""
2112
+ unreadCount: Float!
2113
+ updatedAt: DateTimeISO
2114
+ }
2115
+
2116
+ """채팅 대화방 멤버"""
2117
+ type ChatRoomMember {
2118
+ createdAt: DateTimeISO
2119
+ domain: Domain
2120
+ id: ID!
2121
+ lastReadAt: DateTimeISO
2122
+
2123
+ """온라인 여부 (하트비트 60초 이내)"""
2124
+ online: Boolean!
2125
+ room: ChatRoom
2126
+ user: User
2127
+ userId: ID
2128
+ }
2129
+
2130
+ """채팅 메시지"""
2131
+ type ChatRoomMessage {
2132
+ """첨부파일 목록"""
2133
+ attachments: [Attachment!]!
2134
+ createdAt: DateTimeISO
2135
+ deletedAt: DateTimeISO
2136
+ domain: Domain
2137
+ editedAt: DateTimeISO
2138
+ id: ID!
2139
+ message: String
2140
+ replyTo: ChatRoomMessage
2141
+ room: ChatRoom
2142
+ sender: User
2143
+ type: ChatRoomMessageType
2144
+ }
2145
+
2146
+ """채팅 메시지 타입 (TEXT=일반, SYSTEM=초대/나가기/이름변경 안내)"""
2147
+ enum ChatRoomMessageType {
2148
+ SYSTEM
2149
+ TEXT
2150
+ }
2151
+
1983
2152
  """AI 협력 세션 — Board 와 결합. 한 보드에 여러 세션 가능 (thread / 사용자별 / 컨텍스트별 등 미래 확장)."""
1984
2153
  type ChatSession {
1985
2154
  aiClientId: String
@@ -4160,6 +4329,46 @@ input DomainUserRoleInput {
4160
4329
  users: [NewUserByDomainWizardInput!]!
4161
4330
  }
4162
4331
 
4332
+ """Entity for DrawingBundle"""
4333
+ type DrawingBundle {
4334
+ analyzedAt: DateTimeISO
4335
+ archPageCount: Float
4336
+ archPdf: Attachment
4337
+ createdAt: DateTimeISO
4338
+ creator: User
4339
+ domain: Domain
4340
+ drawings: Object
4341
+ error: String
4342
+ grid: Object
4343
+ id: ID!
4344
+ manifest: Object
4345
+ packages: Object
4346
+ pages: [Attachment!]
4347
+ project: Project
4348
+ status: DrawingBundleStatus
4349
+ structPageCount: Float
4350
+ structPdf: Attachment
4351
+ updatedAt: DateTimeISO
4352
+ updater: User
4353
+ version: String
4354
+ }
4355
+
4356
+ input DrawingBundlePatch {
4357
+ """건축 도면 PDF 업로드"""
4358
+ archPdfUpload: Upload
4359
+ projectId: String
4360
+
4361
+ """구조 도면 PDF 업로드"""
4362
+ structPdfUpload: Upload
4363
+ }
4364
+
4365
+ enum DrawingBundleStatus {
4366
+ ANALYZING
4367
+ DONE
4368
+ FAILED
4369
+ NONE
4370
+ }
4371
+
4163
4372
  """
4164
4373
  Represents a dynamic data summary with flexible key-value pairs for different summary periods.
4165
4374
  """
@@ -4840,8 +5049,21 @@ input InspectionPartPatch {
4840
5049
  type InstallableActivity {
4841
5050
  activity: Activity
4842
5051
  activityType: String
5052
+
5053
+ """
5054
+ How many approval steps this activity has in this domain. Steps, not people; references excluded.
5055
+ """
5056
+ approvalSteps: Int
4843
5057
  category: String
4844
5058
  description: String
5059
+
5060
+ """
5061
+ What this work is, for the person who receives it. Plain sentences or i18n keys.
5062
+ """
5063
+ guide: [String!]
5064
+
5065
+ """What to call this work on screen, when the key is not readable"""
5066
+ label: String
4845
5067
  model: [ActivityModelItem!]
4846
5068
 
4847
5069
  """
@@ -4853,6 +5075,7 @@ type InstallableActivity {
4853
5075
 
4854
5076
  """Provider information of the Activity"""
4855
5077
  provider: String
5078
+ readiness: ActivityReadiness
4856
5079
 
4857
5080
  """Release information of the Activity"""
4858
5081
  release: String
@@ -6472,6 +6695,9 @@ type Mutation {
6472
6695
  """Add a user as owner of the current domain."""
6473
6696
  addDomainOwner(reason: String, username: String!): DomainOwner!
6474
6697
 
6698
+ """To announce a work shift arrangement that starts later"""
6699
+ announceWorkShift(effectiveFrom: DateTimeISO!, patches: [WorkShiftPatch!]!): WorkShiftRevision!
6700
+
6475
6701
  """
6476
6702
  Append a system note to a session — context that did not come from a participant typing (e.g. a conversation carried over from another surface, an external state change). The AI sees it as part of the shared history.
6477
6703
  """
@@ -6533,6 +6759,12 @@ type Mutation {
6533
6759
  calculateRegionalStatistics(periodType: KpiPeriodType! = MONTH, valueDate: String!): [KpiStatistic!]!
6534
6760
  cancelInvitation(email: EmailAddress!, reference: String!, type: String!): Boolean!
6535
6761
 
6762
+ """To cancel an announced work shift arrangement"""
6763
+ cancelWorkShiftAnnouncement(id: String!): Boolean!
6764
+
6765
+ """온라인 상태 하트비트"""
6766
+ chatHeartbeat: Boolean!
6767
+
6536
6768
  """To clear translations cache"""
6537
6769
  clearTranslationsCache: Boolean!
6538
6770
 
@@ -6609,6 +6841,9 @@ type Mutation {
6609
6841
  """Create Daily Worklog by projectId+date"""
6610
6842
  createBuildingInspectionDailyWorklog(patch: BuildingInspectionDailyWorklogNew!): BuildingInspectionDailyWorklog!
6611
6843
 
6844
+ """대화방 생성 (1:1은 기존 방이 있으면 재사용)"""
6845
+ createChatRoom(name: String, userIds: [String!]!): ChatRoom!
6846
+
6612
6847
  """To create new ChecklistItemComment"""
6613
6848
  createChecklistItemComment(checklistItemComment: NewChecklistItemComment!): ChecklistItemComment!
6614
6849
 
@@ -6934,6 +7169,9 @@ type Mutation {
6934
7169
  """To delete multiple Buildings"""
6935
7170
  deleteBuildings(ids: [String!]!): Boolean!
6936
7171
 
7172
+ """메시지 삭제 (본인 메시지만, 소프트 삭제)"""
7173
+ deleteChatRoomMessage(id: String!): Boolean!
7174
+
6937
7175
  """To delete ChecklistItemComment"""
6938
7176
  deleteChecklistItemComment(id: String!): Boolean!
6939
7177
 
@@ -7570,6 +7808,9 @@ type Mutation {
7570
7808
  """The username or email of the user to inactivate."""
7571
7809
  username: String!
7572
7810
  ): Boolean!
7811
+
7812
+ """대화방에 멤버 초대"""
7813
+ inviteChatMembers(roomId: String!, userIds: [String!]!): Boolean!
7573
7814
  inviteCustomer(customerDomainName: String!): Boolean!
7574
7815
 
7575
7816
  """
@@ -7594,9 +7835,15 @@ type Mutation {
7594
7835
  """Adds one or more boards to a play group."""
7595
7836
  joinPlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
7596
7837
 
7838
+ """대화방 나가기 (마지막 멤버가 나가면 방 삭제)"""
7839
+ leaveChatRoom(roomId: String!): Boolean!
7840
+
7597
7841
  """Removes one or more boards from a play group."""
7598
7842
  leavePlayGroup(boardIds: [String!]!, id: String!): PlayGroup!
7599
7843
 
7844
+ """대화방 읽음 처리 (읽음 워터마크 갱신)"""
7845
+ markChatRoomRead(roomId: String!): Boolean!
7846
+
7600
7847
  """
7601
7848
  Mark a session as read up to now for the current user. Idempotent. Distinct from presence (lastSeenAt) — a window can be open without being read.
7602
7849
  """
@@ -7695,6 +7942,9 @@ type Mutation {
7695
7942
  """
7696
7943
  renameAISession(name: String!, sessionId: String!): Boolean!
7697
7944
 
7945
+ """대화방 이름 변경"""
7946
+ renameChatRoom(name: String!, roomId: String!): ChatRoom!
7947
+
7698
7948
  """Rename a ChatSession (tab label)."""
7699
7949
  renameChatSession(name: String!, sessionId: String!): Boolean!
7700
7950
  renewApplicationAccessToken(id: String!, scope: String!): AccessToken!
@@ -7747,6 +7997,12 @@ type Mutation {
7747
7997
 
7748
7998
  """To save ActivityThread information"""
7749
7999
  saveActivityThread(id: String!, save: ActivityThreadSave!): ActivityThread!
8000
+
8001
+ """도면 PDF 저장 및 분석 요청"""
8002
+ saveAndAnalyzeDrawingBundle(drawingBundle: DrawingBundlePatch!): DrawingBundle!
8003
+
8004
+ """메시지 전송 (텍스트/첨부/답장)"""
8005
+ sendChatRoomMessage(files: [Upload!], message: String, replyToId: String, roomId: String!): ChatRoomMessage!
7750
8006
  sendInvitation(email: EmailAddress!, reference: String!, type: String!): Invitation!
7751
8007
  singleUpload(file: Upload!): Attachment!
7752
8008
 
@@ -7889,6 +8145,9 @@ type Mutation {
7889
8145
  """Update Daily Worklog"""
7890
8146
  updateBuildingInspectionDailyWorklog(patch: BuildingInspectionDailyWorklogPatch!): BuildingInspectionDailyWorklog!
7891
8147
 
8148
+ """메시지 수정 (본인 메시지만)"""
8149
+ updateChatRoomMessage(id: String!, message: String!): ChatRoomMessage!
8150
+
7892
8151
  """To modify ChecklistItemComment information"""
7893
8152
  updateChecklistItemComment(id: String!, patch: ChecklistItemCommentPatch!): ChecklistItemComment!
7894
8153
 
@@ -8361,6 +8620,11 @@ input NewActivity {
8361
8620
  multiple: String
8362
8621
  name: String!
8363
8622
  priority: Float
8623
+
8624
+ """
8625
+ true when a rejection closes the case for good — it cannot be restarted
8626
+ """
8627
+ rejectionIsFinal: Boolean
8364
8628
  reportSource: String
8365
8629
  reportType: String
8366
8630
  schedule: String
@@ -11065,6 +11329,28 @@ type Query {
11065
11329
  """Sorting options for the list query."""
11066
11330
  sortings: [Sorting!]
11067
11331
  ): ActivityApprovalList!
11332
+
11333
+ """
11334
+ To fetch the approvals where I am a reference — I may comment, I do not decide
11335
+ """
11336
+ approvalReferenceList(
11337
+ """An array of filter conditions to apply to the list query."""
11338
+ filters: [Filter!]
11339
+
11340
+ """Inherited value type for the list query."""
11341
+ inherited: InheritedValueType
11342
+
11343
+ """Pagination options for the list query."""
11344
+ pagination: Pagination
11345
+
11346
+ """
11347
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
11348
+ """
11349
+ search: String
11350
+
11351
+ """Sorting options for the list query."""
11352
+ sortings: [Sorting!]
11353
+ ): ActivityApprovalList!
11068
11354
  attachment(id: String!): Attachment!
11069
11355
  attachments(
11070
11356
  """An array of filter conditions to apply to the list query."""
@@ -11349,9 +11635,24 @@ type Query {
11349
11635
  """List chat messages of a session, oldest first."""
11350
11636
  chatMessages(limit: Int = 100, offset: Int = 0, sessionId: String!): [ChatMessage!]!
11351
11637
 
11638
+ """현재 로그인 유저 id (채팅 본인 식별용)"""
11639
+ chatMyUserId: String!
11640
+
11641
+ """현재 온라인인 유저 id 목록 (멤버 탭 온라인 표시용)"""
11642
+ chatOnlineUserIds: [String!]!
11643
+
11352
11644
  """List patch entries of a session, newest first."""
11353
11645
  chatPatches(limit: Int = 100, sessionId: String!): [PatchEntry!]!
11354
11646
 
11647
+ """대화방 단건 조회 (멤버만 가능)"""
11648
+ chatRoom(id: String!): ChatRoom!
11649
+
11650
+ """대화방 메시지 조회 (최신순, before 커서로 과거 페이징, searchText로 검색)"""
11651
+ chatRoomMessages(before: DateTimeISO, limit: Int, roomId: String!, searchText: String): [ChatRoomMessage!]!
11652
+
11653
+ """내가 멤버인 대화방 목록 (최근 메시지순)"""
11654
+ chatRooms: [ChatRoom!]!
11655
+
11355
11656
  """Get AI chat session by id."""
11356
11657
  chatSession(id: String!): ChatSession
11357
11658
 
@@ -11383,6 +11684,9 @@ type Query {
11383
11684
  """
11384
11685
  chatSessionsByBoard(boardId: String!): [ChatSession!]!
11385
11686
 
11687
+ """전체 안읽은 메시지 수 (플로팅 아이콘 뱃지용)"""
11688
+ chatUnreadTotal: Float!
11689
+
11386
11690
  """
11387
11691
  Checks if the system is configured to provide a default password for new users.
11388
11692
  """
@@ -12374,6 +12678,12 @@ type Query {
12374
12678
  sortings: [Sorting!]
12375
12679
  ): ActivityInstanceList!
12376
12680
 
12681
+ """프로젝트의 도면 번들 조회 (links 제외)"""
12682
+ drawingBundle(projectId: String!): DrawingBundle
12683
+
12684
+ """도면 번들의 하이퍼링크 목록"""
12685
+ drawingBundleLinks(projectId: String!): Object
12686
+
12377
12687
  """To fetch multiple appliance"""
12378
12688
  edges(
12379
12689
  """An array of filter conditions to apply to the list query."""
@@ -13168,6 +13478,11 @@ type Query {
13168
13478
  sortings: [Sorting!]
13169
13479
  ): ApprovalLineList!
13170
13480
 
13481
+ """
13482
+ Fetches the caller's own employee records in this domain. Empty when the caller is not an employee.
13483
+ """
13484
+ myEmployees: [Employee!]!
13485
+
13171
13486
  """To fetch current user's Favorites"""
13172
13487
  myFavorites: [Favorite!]!
13173
13488
 
@@ -14056,6 +14371,26 @@ type Query {
14056
14371
  ): UserList!
14057
14372
  vendors: [Domain!]!
14058
14373
 
14374
+ """To fetch work shift arrangements that used to be in force"""
14375
+ workShiftRevisions(
14376
+ """An array of filter conditions to apply to the list query."""
14377
+ filters: [Filter!]
14378
+
14379
+ """Inherited value type for the list query."""
14380
+ inherited: InheritedValueType
14381
+
14382
+ """Pagination options for the list query."""
14383
+ pagination: Pagination
14384
+
14385
+ """
14386
+ A single free-text term matched across the fields the resolver declares as searchable (OR). Additive to filters: both are applied together. Prefer this over hand-assembling one search filter per field.
14387
+ """
14388
+ search: String
14389
+
14390
+ """Sorting options for the list query."""
14391
+ sortings: [Sorting!]
14392
+ ): WorkShiftRevisionList!
14393
+
14059
14394
  """To fetch multiple WorkShifts"""
14060
14395
  workShifts(
14061
14396
  """An array of filter conditions to apply to the list query."""
@@ -14977,6 +15312,9 @@ type Subscription {
14977
15312
  """
14978
15313
  boardPatchActivity(boardId: String!): PatchEntry!
14979
15314
 
15315
+ """채팅 실시간 이벤트 구독 — 내가 멤버인 대화방의 이벤트만 수신"""
15316
+ chatEvent: ChatEvent!
15317
+
14980
15318
  """
14981
15319
  Subscribes to chat messages (user / assistant / system) of a session for real-time group chat.
14982
15320
  """
@@ -15556,6 +15894,11 @@ type UsersAuthProviders {
15556
15894
  type WorkShift {
15557
15895
  createdAt: DateTimeISO
15558
15896
  creator: User
15897
+
15898
+ """
15899
+ Weekdays this shift runs on as a CSV of 0(Sun)..6(Sat). Empty means every day
15900
+ """
15901
+ daysOfWeek: String
15559
15902
  description: String
15560
15903
  domain: Domain!
15561
15904
  fromDate: Float
@@ -15581,6 +15924,10 @@ type WorkShiftList {
15581
15924
  }
15582
15925
 
15583
15926
  input WorkShiftPatch {
15927
+ """
15928
+ Weekdays this shift runs on as a CSV of 0(Sun)..6(Sat). Empty means every day
15929
+ """
15930
+ daysOfWeek: String
15584
15931
  description: String
15585
15932
  fromDate: Float!
15586
15933
  fromTime: String!
@@ -15589,6 +15936,24 @@ input WorkShiftPatch {
15589
15936
  toTime: String!
15590
15937
  }
15591
15938
 
15939
+ """A work shift arrangement that used to be in force"""
15940
+ type WorkShiftRevision {
15941
+ createdAt: DateTimeISO
15942
+ creator: User
15943
+ domain: Domain!
15944
+ effectiveFrom: DateTimeISO!
15945
+ effectiveTo: DateTimeISO
15946
+ id: ID!
15947
+
15948
+ """the shift set that was in force, as JSON text"""
15949
+ shifts: String!
15950
+ }
15951
+
15952
+ type WorkShiftRevisionList {
15953
+ items: [WorkShiftRevision!]!
15954
+ total: Int!
15955
+ }
15956
+
15592
15957
  """작업자 타입"""
15593
15958
  type WorkerType {
15594
15959
  createdAt: DateTimeISO