@sideline/domain 0.9.0 → 0.11.0

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 (195) hide show
  1. package/dist/cjs/api/AgeThresholdApi.js +7 -1
  2. package/dist/cjs/api/AgeThresholdApi.js.map +1 -1
  3. package/dist/cjs/api/Auth.js +9 -8
  4. package/dist/cjs/api/Auth.js.map +1 -1
  5. package/dist/cjs/api/EventApi.js +39 -23
  6. package/dist/cjs/api/EventApi.js.map +1 -1
  7. package/dist/cjs/api/EventRsvpApi.js +11 -9
  8. package/dist/cjs/api/EventRsvpApi.js.map +1 -1
  9. package/dist/cjs/api/EventSeriesApi.js +44 -24
  10. package/dist/cjs/api/EventSeriesApi.js.map +1 -1
  11. package/dist/cjs/api/GroupApi.js +22 -14
  12. package/dist/cjs/api/GroupApi.js.map +1 -1
  13. package/dist/cjs/api/ICalApi.js +25 -0
  14. package/dist/cjs/api/ICalApi.js.map +1 -0
  15. package/dist/cjs/api/RoleApi.js +19 -5
  16. package/dist/cjs/api/RoleApi.js.map +1 -1
  17. package/dist/cjs/api/Roster.js +19 -13
  18. package/dist/cjs/api/Roster.js.map +1 -1
  19. package/dist/cjs/api/TeamSettingsApi.js +13 -12
  20. package/dist/cjs/api/TeamSettingsApi.js.map +1 -1
  21. package/dist/cjs/api/TrainingTypeApi.js +27 -8
  22. package/dist/cjs/api/TrainingTypeApi.js.map +1 -1
  23. package/dist/cjs/index.js +5 -1
  24. package/dist/cjs/models/AgeThresholdRule.js +2 -2
  25. package/dist/cjs/models/AgeThresholdRule.js.map +1 -1
  26. package/dist/cjs/models/ChannelSyncEvent.js +5 -5
  27. package/dist/cjs/models/ChannelSyncEvent.js.map +1 -1
  28. package/dist/cjs/models/Event.js +8 -5
  29. package/dist/cjs/models/Event.js.map +1 -1
  30. package/dist/cjs/models/EventRsvp.js +1 -1
  31. package/dist/cjs/models/EventRsvp.js.map +1 -1
  32. package/dist/cjs/models/EventSeries.js +8 -5
  33. package/dist/cjs/models/EventSeries.js.map +1 -1
  34. package/dist/cjs/models/GroupModel.js +2 -2
  35. package/dist/cjs/models/GroupModel.js.map +1 -1
  36. package/dist/cjs/models/ICalToken.js +17 -0
  37. package/dist/cjs/models/ICalToken.js.map +1 -0
  38. package/dist/cjs/models/OAuthConnection.js +1 -1
  39. package/dist/cjs/models/OAuthConnection.js.map +1 -1
  40. package/dist/cjs/models/RoleSyncEvent.js +5 -5
  41. package/dist/cjs/models/RoleSyncEvent.js.map +1 -1
  42. package/dist/cjs/models/TeamInvite.js +1 -1
  43. package/dist/cjs/models/TeamInvite.js.map +1 -1
  44. package/dist/cjs/models/TeamMember.js +1 -1
  45. package/dist/cjs/models/TeamMember.js.map +1 -1
  46. package/dist/cjs/models/TrainingType.js +2 -1
  47. package/dist/cjs/models/TrainingType.js.map +1 -1
  48. package/dist/cjs/models/User.js +5 -4
  49. package/dist/cjs/models/User.js.map +1 -1
  50. package/dist/cjs/rpc/event/EventRpcEvents.js +14 -12
  51. package/dist/cjs/rpc/event/EventRpcEvents.js.map +1 -1
  52. package/dist/cjs/rpc/event/EventRpcGroup.js +16 -8
  53. package/dist/cjs/rpc/event/EventRpcGroup.js.map +1 -1
  54. package/dist/cjs/rpc/event/EventRpcModels.js +41 -16
  55. package/dist/cjs/rpc/event/EventRpcModels.js.map +1 -1
  56. package/dist/cjs/rpc/guild/GuildRpcGroup.js +3 -3
  57. package/dist/cjs/rpc/guild/GuildRpcGroup.js.map +1 -1
  58. package/dist/dts/api/AgeThresholdApi.d.ts +6 -1
  59. package/dist/dts/api/AgeThresholdApi.d.ts.map +1 -1
  60. package/dist/dts/api/Auth.d.ts +22 -21
  61. package/dist/dts/api/Auth.d.ts.map +1 -1
  62. package/dist/dts/api/EventApi.d.ts +109 -69
  63. package/dist/dts/api/EventApi.d.ts.map +1 -1
  64. package/dist/dts/api/EventRsvpApi.d.ts +25 -25
  65. package/dist/dts/api/EventSeriesApi.d.ts +128 -72
  66. package/dist/dts/api/EventSeriesApi.d.ts.map +1 -1
  67. package/dist/dts/api/GroupApi.d.ts +49 -44
  68. package/dist/dts/api/GroupApi.d.ts.map +1 -1
  69. package/dist/dts/api/ICalApi.d.ts +28 -0
  70. package/dist/dts/api/ICalApi.d.ts.map +1 -0
  71. package/dist/dts/api/RoleApi.d.ts +31 -9
  72. package/dist/dts/api/RoleApi.d.ts.map +1 -1
  73. package/dist/dts/api/Roster.d.ts +50 -33
  74. package/dist/dts/api/Roster.d.ts.map +1 -1
  75. package/dist/dts/api/TeamSettingsApi.d.ts +36 -36
  76. package/dist/dts/api/TeamSettingsApi.d.ts.map +1 -1
  77. package/dist/dts/api/TrainingTypeApi.d.ts +62 -25
  78. package/dist/dts/api/TrainingTypeApi.d.ts.map +1 -1
  79. package/dist/dts/index.d.ts +2 -0
  80. package/dist/dts/index.d.ts.map +1 -1
  81. package/dist/dts/models/AgeThresholdRule.d.ts +22 -22
  82. package/dist/dts/models/ChannelSyncEvent.d.ts +55 -55
  83. package/dist/dts/models/Event.d.ts +81 -55
  84. package/dist/dts/models/Event.d.ts.map +1 -1
  85. package/dist/dts/models/EventRsvp.d.ts +11 -11
  86. package/dist/dts/models/EventSeries.d.ts +81 -55
  87. package/dist/dts/models/EventSeries.d.ts.map +1 -1
  88. package/dist/dts/models/GroupModel.d.ts +22 -22
  89. package/dist/dts/models/ICalToken.d.ts +69 -0
  90. package/dist/dts/models/ICalToken.d.ts.map +1 -0
  91. package/dist/dts/models/OAuthConnection.d.ts +8 -8
  92. package/dist/dts/models/RoleSyncEvent.d.ts +55 -55
  93. package/dist/dts/models/TeamInvite.d.ts +11 -11
  94. package/dist/dts/models/TeamMember.d.ts +22 -22
  95. package/dist/dts/models/TrainingType.d.ts +24 -11
  96. package/dist/dts/models/TrainingType.d.ts.map +1 -1
  97. package/dist/dts/models/User.d.ts +44 -44
  98. package/dist/dts/models/User.d.ts.map +1 -1
  99. package/dist/dts/rpc/SyncRpcs.d.ts +16 -12
  100. package/dist/dts/rpc/SyncRpcs.d.ts.map +1 -1
  101. package/dist/dts/rpc/event/EventRpcEvents.d.ts +12 -12
  102. package/dist/dts/rpc/event/EventRpcEvents.d.ts.map +1 -1
  103. package/dist/dts/rpc/event/EventRpcGroup.d.ts +14 -10
  104. package/dist/dts/rpc/event/EventRpcGroup.d.ts.map +1 -1
  105. package/dist/dts/rpc/event/EventRpcModels.d.ts +113 -45
  106. package/dist/dts/rpc/event/EventRpcModels.d.ts.map +1 -1
  107. package/dist/dts/rpc/guild/GuildRpcGroup.d.ts +3 -3
  108. package/dist/esm/api/AgeThresholdApi.js +5 -0
  109. package/dist/esm/api/AgeThresholdApi.js.map +1 -1
  110. package/dist/esm/api/Auth.js +8 -7
  111. package/dist/esm/api/Auth.js.map +1 -1
  112. package/dist/esm/api/EventApi.js +38 -23
  113. package/dist/esm/api/EventApi.js.map +1 -1
  114. package/dist/esm/api/EventRsvpApi.js +11 -9
  115. package/dist/esm/api/EventRsvpApi.js.map +1 -1
  116. package/dist/esm/api/EventSeriesApi.js +43 -24
  117. package/dist/esm/api/EventSeriesApi.js.map +1 -1
  118. package/dist/esm/api/GroupApi.js +20 -13
  119. package/dist/esm/api/GroupApi.js.map +1 -1
  120. package/dist/esm/api/ICalApi.js +16 -0
  121. package/dist/esm/api/ICalApi.js.map +1 -0
  122. package/dist/esm/api/RoleApi.js +16 -4
  123. package/dist/esm/api/RoleApi.js.map +1 -1
  124. package/dist/esm/api/Roster.js +17 -12
  125. package/dist/esm/api/Roster.js.map +1 -1
  126. package/dist/esm/api/TeamSettingsApi.js +13 -12
  127. package/dist/esm/api/TeamSettingsApi.js.map +1 -1
  128. package/dist/esm/api/TrainingTypeApi.js +25 -7
  129. package/dist/esm/api/TrainingTypeApi.js.map +1 -1
  130. package/dist/esm/index.js +2 -0
  131. package/dist/esm/index.js.map +1 -1
  132. package/dist/esm/models/AgeThresholdRule.js +2 -2
  133. package/dist/esm/models/AgeThresholdRule.js.map +1 -1
  134. package/dist/esm/models/ChannelSyncEvent.js +5 -5
  135. package/dist/esm/models/ChannelSyncEvent.js.map +1 -1
  136. package/dist/esm/models/Event.js +8 -5
  137. package/dist/esm/models/Event.js.map +1 -1
  138. package/dist/esm/models/EventRsvp.js +1 -1
  139. package/dist/esm/models/EventRsvp.js.map +1 -1
  140. package/dist/esm/models/EventSeries.js +8 -5
  141. package/dist/esm/models/EventSeries.js.map +1 -1
  142. package/dist/esm/models/GroupModel.js +2 -2
  143. package/dist/esm/models/GroupModel.js.map +1 -1
  144. package/dist/esm/models/ICalToken.js +10 -0
  145. package/dist/esm/models/ICalToken.js.map +1 -0
  146. package/dist/esm/models/OAuthConnection.js +1 -1
  147. package/dist/esm/models/OAuthConnection.js.map +1 -1
  148. package/dist/esm/models/RoleSyncEvent.js +5 -5
  149. package/dist/esm/models/RoleSyncEvent.js.map +1 -1
  150. package/dist/esm/models/TeamInvite.js +1 -1
  151. package/dist/esm/models/TeamInvite.js.map +1 -1
  152. package/dist/esm/models/TeamMember.js +1 -1
  153. package/dist/esm/models/TeamMember.js.map +1 -1
  154. package/dist/esm/models/TrainingType.js +2 -1
  155. package/dist/esm/models/TrainingType.js.map +1 -1
  156. package/dist/esm/models/User.js +5 -4
  157. package/dist/esm/models/User.js.map +1 -1
  158. package/dist/esm/rpc/event/EventRpcEvents.js +13 -12
  159. package/dist/esm/rpc/event/EventRpcEvents.js.map +1 -1
  160. package/dist/esm/rpc/event/EventRpcGroup.js +17 -9
  161. package/dist/esm/rpc/event/EventRpcGroup.js.map +1 -1
  162. package/dist/esm/rpc/event/EventRpcModels.js +35 -15
  163. package/dist/esm/rpc/event/EventRpcModels.js.map +1 -1
  164. package/dist/esm/rpc/guild/GuildRpcGroup.js +3 -3
  165. package/dist/esm/rpc/guild/GuildRpcGroup.js.map +1 -1
  166. package/package.json +2 -2
  167. package/src/api/AgeThresholdApi.ts +7 -0
  168. package/src/api/Auth.ts +8 -7
  169. package/src/api/EventApi.ts +36 -23
  170. package/src/api/EventRsvpApi.ts +9 -9
  171. package/src/api/EventSeriesApi.ts +41 -24
  172. package/src/api/GroupApi.ts +21 -13
  173. package/src/api/ICalApi.ts +32 -0
  174. package/src/api/RoleApi.ts +17 -3
  175. package/src/api/Roster.ts +17 -11
  176. package/src/api/TeamSettingsApi.ts +13 -12
  177. package/src/api/TrainingTypeApi.ts +22 -7
  178. package/src/index.ts +4 -0
  179. package/src/models/AgeThresholdRule.ts +2 -2
  180. package/src/models/ChannelSyncEvent.ts +5 -5
  181. package/src/models/Event.ts +8 -5
  182. package/src/models/EventRsvp.ts +1 -1
  183. package/src/models/EventSeries.ts +8 -5
  184. package/src/models/GroupModel.ts +2 -2
  185. package/src/models/ICalToken.ts +10 -0
  186. package/src/models/OAuthConnection.ts +1 -1
  187. package/src/models/RoleSyncEvent.ts +5 -5
  188. package/src/models/TeamInvite.ts +1 -1
  189. package/src/models/TeamMember.ts +1 -1
  190. package/src/models/TrainingType.ts +2 -1
  191. package/src/models/User.ts +5 -4
  192. package/src/rpc/event/EventRpcEvents.ts +13 -12
  193. package/src/rpc/event/EventRpcGroup.ts +25 -8
  194. package/src/rpc/event/EventRpcModels.ts +44 -15
  195. package/src/rpc/guild/GuildRpcGroup.ts +3 -3
@@ -1,13 +1,16 @@
1
1
  import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
2
+ import * as Schemas from '@sideline/effect-lib/Schemas';
2
3
  import { Schema } from 'effect';
3
4
  import { AuthMiddleware } from '~/api/Auth.js';
4
5
  import { Forbidden } from '~/api/EventApi.js';
6
+ import { Snowflake } from '~/models/Discord.js';
5
7
  import {
6
8
  DaysOfWeek,
7
9
  EventSeriesId,
8
10
  EventSeriesStatus,
9
11
  RecurrenceFrequency,
10
12
  } from '~/models/EventSeries.js';
13
+ import { GroupId } from '~/models/GroupModel.js';
11
14
  import { TeamId } from '~/models/Team.js';
12
15
  import { TrainingTypeId } from '~/models/TrainingType.js';
13
16
 
@@ -17,33 +20,41 @@ export class EventSeriesInfo extends Schema.Class<EventSeriesInfo>('EventSeriesI
17
20
  title: Schema.String,
18
21
  frequency: RecurrenceFrequency,
19
22
  daysOfWeek: DaysOfWeek,
20
- startDate: Schema.String,
21
- endDate: Schema.NullOr(Schema.String),
23
+ startDate: Schemas.DateTimeFromIsoString,
24
+ endDate: Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString),
22
25
  status: EventSeriesStatus,
23
- trainingTypeId: Schema.NullOr(TrainingTypeId),
24
- trainingTypeName: Schema.NullOr(Schema.String),
26
+ trainingTypeId: Schema.OptionFromNullOr(TrainingTypeId),
27
+ trainingTypeName: Schema.OptionFromNullOr(Schema.String),
25
28
  startTime: Schema.String,
26
- endTime: Schema.NullOr(Schema.String),
27
- location: Schema.NullOr(Schema.String),
28
- discordChannelId: Schema.NullOr(Schema.String),
29
+ endTime: Schema.OptionFromNullOr(Schema.String),
30
+ location: Schema.OptionFromNullOr(Schema.String),
31
+ discordChannelId: Schema.OptionFromNullOr(Snowflake),
32
+ ownerGroupId: Schema.OptionFromNullOr(GroupId),
33
+ ownerGroupName: Schema.OptionFromNullOr(Schema.String),
34
+ memberGroupId: Schema.OptionFromNullOr(GroupId),
35
+ memberGroupName: Schema.OptionFromNullOr(Schema.String),
29
36
  }) {}
30
37
 
31
38
  export class EventSeriesDetail extends Schema.Class<EventSeriesDetail>('EventSeriesDetail')({
32
39
  seriesId: EventSeriesId,
33
40
  teamId: TeamId,
34
41
  title: Schema.String,
35
- description: Schema.NullOr(Schema.String),
42
+ description: Schema.OptionFromNullOr(Schema.String),
36
43
  frequency: RecurrenceFrequency,
37
44
  daysOfWeek: DaysOfWeek,
38
- startDate: Schema.String,
39
- endDate: Schema.NullOr(Schema.String),
45
+ startDate: Schemas.DateTimeFromIsoString,
46
+ endDate: Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString),
40
47
  status: EventSeriesStatus,
41
- trainingTypeId: Schema.NullOr(TrainingTypeId),
42
- trainingTypeName: Schema.NullOr(Schema.String),
48
+ trainingTypeId: Schema.OptionFromNullOr(TrainingTypeId),
49
+ trainingTypeName: Schema.OptionFromNullOr(Schema.String),
43
50
  startTime: Schema.String,
44
- endTime: Schema.NullOr(Schema.String),
45
- location: Schema.NullOr(Schema.String),
46
- discordChannelId: Schema.NullOr(Schema.String),
51
+ endTime: Schema.OptionFromNullOr(Schema.String),
52
+ location: Schema.OptionFromNullOr(Schema.String),
53
+ discordChannelId: Schema.OptionFromNullOr(Snowflake),
54
+ ownerGroupId: Schema.OptionFromNullOr(GroupId),
55
+ ownerGroupName: Schema.OptionFromNullOr(Schema.String),
56
+ memberGroupId: Schema.OptionFromNullOr(GroupId),
57
+ memberGroupName: Schema.OptionFromNullOr(Schema.String),
47
58
  canEdit: Schema.Boolean,
48
59
  canCancel: Schema.Boolean,
49
60
  }) {}
@@ -52,16 +63,18 @@ export class CreateEventSeriesRequest extends Schema.Class<CreateEventSeriesRequ
52
63
  'CreateEventSeriesRequest',
53
64
  )({
54
65
  title: Schema.NonEmptyString,
55
- trainingTypeId: Schema.NullOr(TrainingTypeId),
56
- description: Schema.NullOr(Schema.String),
66
+ trainingTypeId: Schema.OptionFromNullOr(TrainingTypeId),
67
+ description: Schema.OptionFromNullOr(Schema.String),
57
68
  frequency: RecurrenceFrequency,
58
69
  daysOfWeek: DaysOfWeek,
59
- startDate: Schema.String,
60
- endDate: Schema.NullOr(Schema.String),
70
+ startDate: Schemas.DateTimeFromIsoString,
71
+ endDate: Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString),
61
72
  startTime: Schema.String,
62
- endTime: Schema.NullOr(Schema.String),
63
- location: Schema.NullOr(Schema.String),
64
- discordChannelId: Schema.NullOr(Schema.String),
73
+ endTime: Schema.OptionFromNullOr(Schema.String),
74
+ location: Schema.OptionFromNullOr(Schema.String),
75
+ discordChannelId: Schema.OptionFromNullOr(Snowflake),
76
+ ownerGroupId: Schema.OptionFromNullOr(GroupId),
77
+ memberGroupId: Schema.OptionFromNullOr(GroupId),
65
78
  }) {}
66
79
 
67
80
  export class UpdateEventSeriesRequest extends Schema.Class<UpdateEventSeriesRequest>(
@@ -74,8 +87,12 @@ export class UpdateEventSeriesRequest extends Schema.Class<UpdateEventSeriesRequ
74
87
  startTime: Schema.optionalWith(Schema.String, { as: 'Option' }),
75
88
  endTime: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
76
89
  location: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
77
- endDate: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
78
- discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
90
+ endDate: Schema.optionalWith(Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString), {
91
+ as: 'Option',
92
+ }),
93
+ discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), { as: 'Option' }),
94
+ ownerGroupId: Schema.optionalWith(Schema.OptionFromNullOr(GroupId), { as: 'Option' }),
95
+ memberGroupId: Schema.optionalWith(Schema.OptionFromNullOr(GroupId), { as: 'Option' }),
79
96
  }) {}
80
97
 
81
98
  export class EventSeriesNotFound extends Schema.TaggedError<EventSeriesNotFound>()(
@@ -10,18 +10,18 @@ import { TeamMemberId } from '~/models/TeamMember.js';
10
10
  export class GroupInfo extends Schema.Class<GroupInfo>('GroupInfo')({
11
11
  groupId: GroupId,
12
12
  teamId: TeamId,
13
- parentId: Schema.NullOr(GroupId),
13
+ parentId: Schema.OptionFromNullOr(GroupId),
14
14
  name: Schema.String,
15
- emoji: Schema.NullOr(Schema.String),
15
+ emoji: Schema.OptionFromNullOr(Schema.String),
16
16
  memberCount: Schema.Number,
17
17
  }) {}
18
18
 
19
19
  export class GroupDetail extends Schema.Class<GroupDetail>('GroupDetail')({
20
20
  groupId: GroupId,
21
21
  teamId: TeamId,
22
- parentId: Schema.NullOr(GroupId),
22
+ parentId: Schema.OptionFromNullOr(GroupId),
23
23
  name: Schema.String,
24
- emoji: Schema.NullOr(Schema.String),
24
+ emoji: Schema.OptionFromNullOr(Schema.String),
25
25
  roles: Schema.Array(
26
26
  Schema.Struct({
27
27
  roleId: RoleId,
@@ -31,7 +31,7 @@ export class GroupDetail extends Schema.Class<GroupDetail>('GroupDetail')({
31
31
  members: Schema.Array(
32
32
  Schema.Struct({
33
33
  memberId: TeamMemberId,
34
- name: Schema.NullOr(Schema.String),
34
+ name: Schema.OptionFromNullOr(Schema.String),
35
35
  username: Schema.String,
36
36
  }),
37
37
  ),
@@ -39,13 +39,13 @@ export class GroupDetail extends Schema.Class<GroupDetail>('GroupDetail')({
39
39
 
40
40
  export class CreateGroupRequest extends Schema.Class<CreateGroupRequest>('CreateGroupRequest')({
41
41
  name: Schema.NonEmptyString,
42
- parentId: Schema.NullOr(GroupId),
43
- emoji: Schema.NullOr(Schema.String),
42
+ parentId: Schema.OptionFromNullOr(GroupId),
43
+ emoji: Schema.OptionFromNullOr(Schema.String),
44
44
  }) {}
45
45
 
46
46
  export class UpdateGroupRequest extends Schema.Class<UpdateGroupRequest>('UpdateGroupRequest')({
47
47
  name: Schema.NonEmptyString,
48
- emoji: Schema.NullOr(Schema.String),
48
+ emoji: Schema.OptionFromNullOr(Schema.String),
49
49
  }) {}
50
50
 
51
51
  export class AddGroupMemberRequest extends Schema.Class<AddGroupMemberRequest>(
@@ -61,13 +61,13 @@ export class AssignGroupRoleRequest extends Schema.Class<AssignGroupRoleRequest>
61
61
  }) {}
62
62
 
63
63
  export class MoveGroupRequest extends Schema.Class<MoveGroupRequest>('MoveGroupRequest')({
64
- parentId: Schema.NullOr(GroupId),
64
+ parentId: Schema.OptionFromNullOr(GroupId),
65
65
  }) {}
66
66
 
67
67
  export class ChannelMappingInfo extends Schema.Class<ChannelMappingInfo>('ChannelMappingInfo')({
68
68
  discordChannelId: Snowflake,
69
- discordChannelName: Schema.NullOr(Schema.String),
70
- discordRoleId: Schema.NullOr(Snowflake),
69
+ discordChannelName: Schema.OptionFromNullOr(Schema.String),
70
+ discordRoleId: Schema.OptionFromNullOr(Snowflake),
71
71
  }) {}
72
72
 
73
73
  export class SetChannelMappingRequest extends Schema.Class<SetChannelMappingRequest>(
@@ -80,7 +80,7 @@ export class DiscordChannelInfo extends Schema.Class<DiscordChannelInfo>('Discor
80
80
  id: Snowflake,
81
81
  name: Schema.String,
82
82
  type: Schema.Number,
83
- parentId: Schema.NullOr(Snowflake),
83
+ parentId: Schema.OptionFromNullOr(Snowflake),
84
84
  }) {}
85
85
 
86
86
  export class GroupNotFound extends Schema.TaggedError<GroupNotFound>()(
@@ -101,6 +101,12 @@ export class MemberNotFound extends Schema.TaggedError<MemberNotFound>()(
101
101
  HttpApiSchema.annotations({ status: 404 }),
102
102
  ) {}
103
103
 
104
+ export class GroupNameAlreadyTaken extends Schema.TaggedError<GroupNameAlreadyTaken>()(
105
+ 'GroupNameAlreadyTaken',
106
+ {},
107
+ HttpApiSchema.annotations({ status: 409 }),
108
+ ) {}
109
+
104
110
  export class GroupApiGroup extends HttpApiGroup.make('group')
105
111
  .add(
106
112
  HttpApiEndpoint.get('listGroups', '/teams/:teamId/groups')
@@ -113,6 +119,7 @@ export class GroupApiGroup extends HttpApiGroup.make('group')
113
119
  HttpApiEndpoint.post('createGroup', '/teams/:teamId/groups')
114
120
  .addSuccess(GroupInfo, { status: 201 })
115
121
  .addError(Forbidden, { status: 403 })
122
+ .addError(GroupNameAlreadyTaken, { status: 409 })
116
123
  .setPath(Schema.Struct({ teamId: TeamId }))
117
124
  .setPayload(CreateGroupRequest)
118
125
  .middleware(AuthMiddleware),
@@ -130,6 +137,7 @@ export class GroupApiGroup extends HttpApiGroup.make('group')
130
137
  .addSuccess(GroupInfo)
131
138
  .addError(Forbidden, { status: 403 })
132
139
  .addError(GroupNotFound, { status: 404 })
140
+ .addError(GroupNameAlreadyTaken, { status: 409 })
133
141
  .setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
134
142
  .setPayload(UpdateGroupRequest)
135
143
  .middleware(AuthMiddleware),
@@ -189,7 +197,7 @@ export class GroupApiGroup extends HttpApiGroup.make('group')
189
197
  )
190
198
  .add(
191
199
  HttpApiEndpoint.get('getChannelMapping', '/teams/:teamId/groups/:groupId/channel-mapping')
192
- .addSuccess(Schema.NullOr(ChannelMappingInfo))
200
+ .addSuccess(Schema.OptionFromNullOr(ChannelMappingInfo))
193
201
  .addError(Forbidden, { status: 403 })
194
202
  .addError(GroupNotFound, { status: 404 })
195
203
  .setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
@@ -0,0 +1,32 @@
1
+ import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
2
+ import { Schema } from 'effect';
3
+ import { AuthMiddleware } from '~/api/Auth.js';
4
+
5
+ export class ICalTokenResponse extends Schema.Class<ICalTokenResponse>('ICalTokenResponse')({
6
+ token: Schema.String,
7
+ url: Schema.String,
8
+ }) {}
9
+
10
+ export class ICalTokenNotFound extends Schema.TaggedError<ICalTokenNotFound>()(
11
+ 'ICalTokenNotFound',
12
+ {},
13
+ HttpApiSchema.annotations({ status: 404 }),
14
+ ) {}
15
+
16
+ export class ICalApiGroup extends HttpApiGroup.make('ical')
17
+ .add(
18
+ HttpApiEndpoint.get('getICalToken', '/me/ical-token')
19
+ .addSuccess(ICalTokenResponse)
20
+ .middleware(AuthMiddleware),
21
+ )
22
+ .add(
23
+ HttpApiEndpoint.post('regenerateICalToken', '/me/ical-token/regenerate')
24
+ .addSuccess(ICalTokenResponse)
25
+ .middleware(AuthMiddleware),
26
+ )
27
+ .add(
28
+ HttpApiEndpoint.get('getICalFeed', '/ical/:token')
29
+ .addSuccess(Schema.Void)
30
+ .addError(ICalTokenNotFound, { status: 404 })
31
+ .setPath(Schema.Struct({ token: Schema.String })),
32
+ ) {}
@@ -13,12 +13,18 @@ export class RoleInfo extends Schema.Class<RoleInfo>('RoleInfo')({
13
13
  permissionCount: Schema.Number,
14
14
  }) {}
15
15
 
16
+ export class RoleListResponse extends Schema.Class<RoleListResponse>('RoleListResponse')({
17
+ canManage: Schema.Boolean,
18
+ roles: Schema.Array(RoleInfo),
19
+ }) {}
20
+
16
21
  export class RoleDetail extends Schema.Class<RoleDetail>('RoleDetail')({
17
22
  roleId: RoleId,
18
23
  teamId: TeamId,
19
24
  name: Schema.String,
20
25
  isBuiltIn: Schema.Boolean,
21
26
  permissions: Schema.Array(Permission),
27
+ canManage: Schema.Boolean,
22
28
  }) {}
23
29
 
24
30
  export class CreateRoleRequest extends Schema.Class<CreateRoleRequest>('CreateRoleRequest')({
@@ -27,8 +33,8 @@ export class CreateRoleRequest extends Schema.Class<CreateRoleRequest>('CreateRo
27
33
  }) {}
28
34
 
29
35
  export class UpdateRoleRequest extends Schema.Class<UpdateRoleRequest>('UpdateRoleRequest')({
30
- name: Schema.NullOr(Schema.NonEmptyString),
31
- permissions: Schema.NullOr(Schema.Array(Permission)),
36
+ name: Schema.OptionFromNullOr(Schema.NonEmptyString),
37
+ permissions: Schema.OptionFromNullOr(Schema.Array(Permission)),
32
38
  }) {}
33
39
 
34
40
  export class RoleNotFound extends Schema.TaggedError<RoleNotFound>()(
@@ -65,10 +71,16 @@ export class RoleInUse extends Schema.TaggedError<RoleInUse>()(
65
71
  HttpApiSchema.annotations({ status: 409 }),
66
72
  ) {}
67
73
 
74
+ export class RoleNameAlreadyTaken extends Schema.TaggedError<RoleNameAlreadyTaken>()(
75
+ 'RoleNameAlreadyTaken',
76
+ {},
77
+ HttpApiSchema.annotations({ status: 409 }),
78
+ ) {}
79
+
68
80
  export class RoleApiGroup extends HttpApiGroup.make('role')
69
81
  .add(
70
82
  HttpApiEndpoint.get('listRoles', '/teams/:teamId/roles')
71
- .addSuccess(Schema.Array(RoleInfo))
83
+ .addSuccess(RoleListResponse)
72
84
  .addError(Forbidden, { status: 403 })
73
85
  .setPath(Schema.Struct({ teamId: TeamId }))
74
86
  .middleware(AuthMiddleware),
@@ -77,6 +89,7 @@ export class RoleApiGroup extends HttpApiGroup.make('role')
77
89
  HttpApiEndpoint.post('createRole', '/teams/:teamId/roles')
78
90
  .addSuccess(RoleDetail, { status: 201 })
79
91
  .addError(Forbidden, { status: 403 })
92
+ .addError(RoleNameAlreadyTaken, { status: 409 })
80
93
  .setPath(Schema.Struct({ teamId: TeamId }))
81
94
  .setPayload(CreateRoleRequest)
82
95
  .middleware(AuthMiddleware),
@@ -95,6 +108,7 @@ export class RoleApiGroup extends HttpApiGroup.make('role')
95
108
  .addError(Forbidden, { status: 403 })
96
109
  .addError(RoleNotFound, { status: 404 })
97
110
  .addError(CannotModifyBuiltIn, { status: 400 })
111
+ .addError(RoleNameAlreadyTaken, { status: 409 })
98
112
  .setPath(Schema.Struct({ teamId: TeamId, roleId: RoleId }))
99
113
  .setPayload(UpdateRoleRequest)
100
114
  .middleware(AuthMiddleware),
package/src/api/Roster.ts CHANGED
@@ -13,19 +13,19 @@ export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
13
13
  discordId: Schema.String,
14
14
  roleNames: Schema.Array(Schema.String),
15
15
  permissions: Schema.Array(Permission),
16
- name: Schema.NullOr(Schema.String),
17
- birthDate: Schema.NullOr(Schema.String),
18
- gender: Schema.NullOr(Gender),
19
- jerseyNumber: Schema.NullOr(Schema.Number),
16
+ name: Schema.OptionFromNullOr(Schema.String),
17
+ birthDate: Schema.OptionFromNullOr(Schema.String),
18
+ gender: Schema.OptionFromNullOr(Gender),
19
+ jerseyNumber: Schema.OptionFromNullOr(Schema.Number),
20
20
  username: Schema.String,
21
- avatar: Schema.NullOr(Schema.String),
21
+ avatar: Schema.OptionFromNullOr(Schema.String),
22
22
  }) {}
23
23
 
24
24
  export class UpdatePlayerRequest extends Schema.Class<UpdatePlayerRequest>('UpdatePlayerRequest')({
25
- name: Schema.NullOr(Schema.String),
25
+ name: Schema.OptionFromNullOr(Schema.String),
26
26
  birthDate: Schema.OptionFromNullOr(Schema.String),
27
- gender: Schema.NullOr(Gender),
28
- jerseyNumber: Schema.NullOr(Schema.Number),
27
+ gender: Schema.OptionFromNullOr(Gender),
28
+ jerseyNumber: Schema.OptionFromNullOr(Schema.Number),
29
29
  }) {}
30
30
 
31
31
  export class PlayerNotFound extends Schema.TaggedError<PlayerNotFound>()(
@@ -55,6 +55,11 @@ export class RosterInfo extends Schema.Class<RosterInfo>('RosterInfo')({
55
55
  createdAt: Schema.String,
56
56
  }) {}
57
57
 
58
+ export class RosterListResponse extends Schema.Class<RosterListResponse>('RosterListResponse')({
59
+ canManage: Schema.Boolean,
60
+ rosters: Schema.Array(RosterInfo),
61
+ }) {}
62
+
58
63
  export class RosterDetail extends Schema.Class<RosterDetail>('RosterDetail')({
59
64
  rosterId: RosterId,
60
65
  teamId: TeamId,
@@ -62,6 +67,7 @@ export class RosterDetail extends Schema.Class<RosterDetail>('RosterDetail')({
62
67
  active: Schema.Boolean,
63
68
  createdAt: Schema.String,
64
69
  members: Schema.Array(RosterPlayer),
70
+ canManage: Schema.Boolean,
65
71
  }) {}
66
72
 
67
73
  export class CreateRosterRequest extends Schema.Class<CreateRosterRequest>('CreateRosterRequest')({
@@ -69,8 +75,8 @@ export class CreateRosterRequest extends Schema.Class<CreateRosterRequest>('Crea
69
75
  }) {}
70
76
 
71
77
  export class UpdateRosterRequest extends Schema.Class<UpdateRosterRequest>('UpdateRosterRequest')({
72
- name: Schema.NullOr(Schema.String),
73
- active: Schema.NullOr(Schema.Boolean),
78
+ name: Schema.OptionFromNullOr(Schema.String),
79
+ active: Schema.OptionFromNullOr(Schema.Boolean),
74
80
  }) {}
75
81
 
76
82
  export class AddRosterMemberRequest extends Schema.Class<AddRosterMemberRequest>(
@@ -114,7 +120,7 @@ export class RosterApiGroup extends HttpApiGroup.make('roster')
114
120
  )
115
121
  .add(
116
122
  HttpApiEndpoint.get('listRosters', '/teams/:teamId/rosters')
117
- .addSuccess(Schema.Array(RosterInfo))
123
+ .addSuccess(RosterListResponse)
118
124
  .addError(Forbidden, { status: 403 })
119
125
  .setPath(Schema.Struct({ teamId: TeamId }))
120
126
  .middleware(AuthMiddleware),
@@ -2,6 +2,7 @@ import { HttpApiEndpoint, HttpApiGroup } from '@effect/platform';
2
2
  import { Schema } from 'effect';
3
3
  import { AuthMiddleware } from '~/api/Auth.js';
4
4
  import { Forbidden } from '~/api/EventApi.js';
5
+ import { Snowflake } from '~/models/Discord.js';
5
6
  import { TeamId } from '~/models/Team.js';
6
7
 
7
8
  export class TeamSettingsInfo extends Schema.Class<TeamSettingsInfo>('TeamSettingsInfo')({
@@ -9,12 +10,12 @@ export class TeamSettingsInfo extends Schema.Class<TeamSettingsInfo>('TeamSettin
9
10
  eventHorizonDays: Schema.Int,
10
11
  minPlayersThreshold: Schema.Int,
11
12
  rsvpReminderHours: Schema.Int,
12
- discordChannelTraining: Schema.NullOr(Schema.String),
13
- discordChannelMatch: Schema.NullOr(Schema.String),
14
- discordChannelTournament: Schema.NullOr(Schema.String),
15
- discordChannelMeeting: Schema.NullOr(Schema.String),
16
- discordChannelSocial: Schema.NullOr(Schema.String),
17
- discordChannelOther: Schema.NullOr(Schema.String),
13
+ discordChannelTraining: Schema.OptionFromNullOr(Snowflake),
14
+ discordChannelMatch: Schema.OptionFromNullOr(Snowflake),
15
+ discordChannelTournament: Schema.OptionFromNullOr(Snowflake),
16
+ discordChannelMeeting: Schema.OptionFromNullOr(Snowflake),
17
+ discordChannelSocial: Schema.OptionFromNullOr(Snowflake),
18
+ discordChannelOther: Schema.OptionFromNullOr(Snowflake),
18
19
  }) {}
19
20
 
20
21
  export class UpdateTeamSettingsRequest extends Schema.Class<UpdateTeamSettingsRequest>(
@@ -27,22 +28,22 @@ export class UpdateTeamSettingsRequest extends Schema.Class<UpdateTeamSettingsRe
27
28
  rsvpReminderHours: Schema.optionalWith(Schema.Int.pipe(Schema.between(0, 168)), {
28
29
  as: 'Option',
29
30
  }),
30
- discordChannelTraining: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
31
+ discordChannelTraining: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
31
32
  as: 'Option',
32
33
  }),
33
- discordChannelMatch: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
34
+ discordChannelMatch: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
34
35
  as: 'Option',
35
36
  }),
36
- discordChannelTournament: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
37
+ discordChannelTournament: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
37
38
  as: 'Option',
38
39
  }),
39
- discordChannelMeeting: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
40
+ discordChannelMeeting: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
40
41
  as: 'Option',
41
42
  }),
42
- discordChannelSocial: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
43
+ discordChannelSocial: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
43
44
  as: 'Option',
44
45
  }),
45
- discordChannelOther: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
46
+ discordChannelOther: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
46
47
  as: 'Option',
47
48
  }),
48
49
  }) {}
@@ -1,6 +1,7 @@
1
1
  import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
2
2
  import { Schema } from 'effect';
3
3
  import { AuthMiddleware } from '~/api/Auth.js';
4
+ import { Snowflake } from '~/models/Discord.js';
4
5
  import { GroupId } from '~/models/GroupModel.js';
5
6
  import { TeamId } from '~/models/Team.js';
6
7
  import { TrainingTypeId } from '~/models/TrainingType.js';
@@ -9,16 +10,19 @@ export class TrainingTypeInfo extends Schema.Class<TrainingTypeInfo>('TrainingTy
9
10
  trainingTypeId: TrainingTypeId,
10
11
  teamId: TeamId,
11
12
  name: Schema.String,
12
- groupName: Schema.NullOr(Schema.String),
13
+ ownerGroupName: Schema.OptionFromNullOr(Schema.String),
14
+ memberGroupName: Schema.OptionFromNullOr(Schema.String),
13
15
  }) {}
14
16
 
15
17
  export class TrainingTypeDetail extends Schema.Class<TrainingTypeDetail>('TrainingTypeDetail')({
16
18
  trainingTypeId: TrainingTypeId,
17
19
  teamId: TeamId,
18
20
  name: Schema.String,
19
- groupId: Schema.NullOr(GroupId),
20
- groupName: Schema.NullOr(Schema.String),
21
- discordChannelId: Schema.NullOr(Schema.String),
21
+ ownerGroupId: Schema.OptionFromNullOr(GroupId),
22
+ ownerGroupName: Schema.OptionFromNullOr(Schema.String),
23
+ memberGroupId: Schema.OptionFromNullOr(GroupId),
24
+ memberGroupName: Schema.OptionFromNullOr(Schema.String),
25
+ discordChannelId: Schema.OptionFromNullOr(Snowflake),
22
26
  canAdmin: Schema.Boolean,
23
27
  }) {}
24
28
 
@@ -33,15 +37,18 @@ export class CreateTrainingTypeRequest extends Schema.Class<CreateTrainingTypeRe
33
37
  'CreateTrainingTypeRequest',
34
38
  )({
35
39
  name: Schema.NonEmptyString,
36
- groupId: Schema.NullOr(GroupId),
37
- discordChannelId: Schema.NullOr(Schema.String),
40
+ ownerGroupId: Schema.OptionFromNullOr(GroupId),
41
+ memberGroupId: Schema.OptionFromNullOr(GroupId),
42
+ discordChannelId: Schema.OptionFromNullOr(Snowflake),
38
43
  }) {}
39
44
 
40
45
  export class UpdateTrainingTypeRequest extends Schema.Class<UpdateTrainingTypeRequest>(
41
46
  'UpdateTrainingTypeRequest',
42
47
  )({
43
48
  name: Schema.NonEmptyString,
44
- discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
49
+ ownerGroupId: Schema.optionalWith(Schema.OptionFromNullOr(GroupId), { as: 'Option' }),
50
+ memberGroupId: Schema.optionalWith(Schema.OptionFromNullOr(GroupId), { as: 'Option' }),
51
+ discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), { as: 'Option' }),
45
52
  }) {}
46
53
 
47
54
  export class TrainingTypeNotFound extends Schema.TaggedError<TrainingTypeNotFound>()(
@@ -56,6 +63,12 @@ export class Forbidden extends Schema.TaggedError<Forbidden>()(
56
63
  HttpApiSchema.annotations({ status: 403 }),
57
64
  ) {}
58
65
 
66
+ export class TrainingTypeNameAlreadyTaken extends Schema.TaggedError<TrainingTypeNameAlreadyTaken>()(
67
+ 'TrainingTypeNameAlreadyTaken',
68
+ {},
69
+ HttpApiSchema.annotations({ status: 409 }),
70
+ ) {}
71
+
59
72
  export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
60
73
  .add(
61
74
  HttpApiEndpoint.get('listTrainingTypes', '/teams/:teamId/training-types')
@@ -68,6 +81,7 @@ export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
68
81
  HttpApiEndpoint.post('createTrainingType', '/teams/:teamId/training-types')
69
82
  .addSuccess(TrainingTypeInfo, { status: 201 })
70
83
  .addError(Forbidden, { status: 403 })
84
+ .addError(TrainingTypeNameAlreadyTaken, { status: 409 })
71
85
  .setPath(Schema.Struct({ teamId: TeamId }))
72
86
  .setPayload(CreateTrainingTypeRequest)
73
87
  .middleware(AuthMiddleware),
@@ -85,6 +99,7 @@ export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
85
99
  .addSuccess(TrainingTypeInfo)
86
100
  .addError(Forbidden, { status: 403 })
87
101
  .addError(TrainingTypeNotFound, { status: 404 })
102
+ .addError(TrainingTypeNameAlreadyTaken, { status: 409 })
88
103
  .setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
89
104
  .setPayload(UpdateTrainingTypeRequest)
90
105
  .middleware(AuthMiddleware),
package/src/index.ts CHANGED
@@ -12,6 +12,8 @@ export * as EventSeriesApi from './api/EventSeriesApi.js';
12
12
 
13
13
  export * as GroupApi from './api/GroupApi.js';
14
14
 
15
+ export * as ICalApi from './api/ICalApi.js';
16
+
15
17
  export * as Invite from './api/Invite.js';
16
18
 
17
19
  export * as NotificationApi from './api/NotificationApi.js';
@@ -42,6 +44,8 @@ export * as EventSeries from './models/EventSeries.js';
42
44
 
43
45
  export * as GroupModel from './models/GroupModel.js';
44
46
 
47
+ export * as ICalToken from './models/ICalToken.js';
48
+
45
49
  export * as MemberRole from './models/MemberRole.js';
46
50
 
47
51
  export * as Notification from './models/Notification.js';
@@ -10,7 +10,7 @@ export class AgeThresholdRule extends Model.Class<AgeThresholdRule>('AgeThreshol
10
10
  id: Model.Generated(AgeThresholdRuleId),
11
11
  team_id: TeamId,
12
12
  group_id: GroupId,
13
- min_age: Schema.NullOr(Schema.Number),
14
- max_age: Schema.NullOr(Schema.Number),
13
+ min_age: Schema.OptionFromNullOr(Schema.Number),
14
+ max_age: Schema.OptionFromNullOr(Schema.Number),
15
15
  created_at: Model.DateTimeInsertFromDate,
16
16
  }) {}
@@ -21,10 +21,10 @@ export class ChannelSyncEvent extends Model.Class<ChannelSyncEvent>('ChannelSync
21
21
  guild_id: Schema.String,
22
22
  event_type: ChannelSyncEventType,
23
23
  group_id: GroupId,
24
- group_name: Schema.NullOr(Schema.String),
25
- team_member_id: Schema.NullOr(TeamMemberId),
26
- discord_user_id: Schema.NullOr(Schema.String),
27
- processed_at: Schema.NullOr(Schema.String),
28
- error: Schema.NullOr(Schema.String),
24
+ group_name: Schema.OptionFromNullOr(Schema.String),
25
+ team_member_id: Schema.OptionFromNullOr(TeamMemberId),
26
+ discord_user_id: Schema.OptionFromNullOr(Schema.String),
27
+ processed_at: Schema.OptionFromNullOr(Schema.String),
28
+ error: Schema.OptionFromNullOr(Schema.String),
29
29
  created_at: Model.DateTimeInsertFromDate,
30
30
  }) {}
@@ -2,6 +2,7 @@ import { Model } from '@effect/sql';
2
2
  import * as Schemas from '@sideline/effect-lib/Schemas';
3
3
  import { Schema } from 'effect';
4
4
  import { EventSeriesId } from '~/models/EventSeries.js';
5
+ import { GroupId } from '~/models/GroupModel.js';
5
6
  import { TeamId } from '~/models/Team.js';
6
7
  import { TeamMemberId } from '~/models/TeamMember.js';
7
8
  import { TrainingTypeId } from '~/models/TrainingType.js';
@@ -25,14 +26,16 @@ export type EventStatus = typeof EventStatus.Type;
25
26
  export class Event extends Model.Class<Event>('Event')({
26
27
  id: Model.Generated(EventId),
27
28
  team_id: TeamId,
28
- training_type_id: Schema.NullOr(TrainingTypeId),
29
+ training_type_id: Schema.OptionFromNullOr(TrainingTypeId),
29
30
  event_type: EventType,
30
31
  title: Schema.String,
31
- description: Schema.NullOr(Schema.String),
32
+ description: Schema.OptionFromNullOr(Schema.String),
32
33
  start_at: Schemas.DateTimeFromDate,
33
- end_at: Schema.NullOr(Schemas.DateTimeFromDate),
34
- location: Schema.NullOr(Schema.String),
35
- series_id: Schema.NullOr(EventSeriesId),
34
+ end_at: Schema.OptionFromNullOr(Schemas.DateTimeFromDate),
35
+ location: Schema.OptionFromNullOr(Schema.String),
36
+ owner_group_id: Schema.OptionFromNullOr(GroupId),
37
+ member_group_id: Schema.OptionFromNullOr(GroupId),
38
+ series_id: Schema.OptionFromNullOr(EventSeriesId),
36
39
  series_modified: Schema.Boolean,
37
40
  status: Model.FieldExcept('update')(EventStatus),
38
41
  created_by: TeamMemberId,
@@ -14,7 +14,7 @@ export class EventRsvp extends Model.Class<EventRsvp>('EventRsvp')({
14
14
  event_id: EventId,
15
15
  team_member_id: TeamMemberId,
16
16
  response: RsvpResponse,
17
- message: Schema.NullOr(Schema.String),
17
+ message: Schema.OptionFromNullOr(Schema.String),
18
18
  created_at: Model.DateTimeInsertFromDate,
19
19
  updated_at: Model.DateTimeUpdateFromDate,
20
20
  }) {}
@@ -1,5 +1,6 @@
1
1
  import { Model } from '@effect/sql';
2
2
  import { Schema } from 'effect';
3
+ import { GroupId } from '~/models/GroupModel.js';
3
4
  import { TeamId } from '~/models/Team.js';
4
5
  import { TeamMemberId } from '~/models/TeamMember.js';
5
6
  import { TrainingTypeId } from '~/models/TrainingType.js';
@@ -22,16 +23,18 @@ export type EventSeriesStatus = typeof EventSeriesStatus.Type;
22
23
  export class EventSeries extends Model.Class<EventSeries>('EventSeries')({
23
24
  id: Model.Generated(EventSeriesId),
24
25
  team_id: TeamId,
25
- training_type_id: Schema.NullOr(TrainingTypeId),
26
+ training_type_id: Schema.OptionFromNullOr(TrainingTypeId),
26
27
  title: Schema.String,
27
- description: Schema.NullOr(Schema.String),
28
+ description: Schema.OptionFromNullOr(Schema.String),
28
29
  start_time: Schema.String,
29
- end_time: Schema.NullOr(Schema.String),
30
- location: Schema.NullOr(Schema.String),
30
+ end_time: Schema.OptionFromNullOr(Schema.String),
31
+ location: Schema.OptionFromNullOr(Schema.String),
31
32
  frequency: RecurrenceFrequency,
32
33
  days_of_week: DaysOfWeek,
33
34
  start_date: Schema.DateFromSelf,
34
- end_date: Schema.NullOr(Schema.DateFromSelf),
35
+ end_date: Schema.OptionFromNullOr(Schema.DateFromSelf),
36
+ owner_group_id: Schema.OptionFromNullOr(GroupId),
37
+ member_group_id: Schema.OptionFromNullOr(GroupId),
35
38
  status: Model.FieldExcept('update')(EventSeriesStatus),
36
39
  created_by: TeamMemberId,
37
40
  created_at: Model.DateTimeInsertFromDate,
@@ -8,8 +8,8 @@ export type GroupId = typeof GroupId.Type;
8
8
  export class Group extends Model.Class<Group>('Group')({
9
9
  id: Model.Generated(GroupId),
10
10
  team_id: TeamId,
11
- parent_id: Schema.NullOr(GroupId),
11
+ parent_id: Schema.OptionFromNullOr(GroupId),
12
12
  name: Schema.String,
13
- emoji: Schema.NullOr(Schema.String),
13
+ emoji: Schema.OptionFromNullOr(Schema.String),
14
14
  created_at: Model.DateTimeInsertFromDate,
15
15
  }) {}