@sideline/domain 0.9.0 → 0.10.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.
- package/dist/cjs/api/AgeThresholdApi.js +7 -1
- package/dist/cjs/api/AgeThresholdApi.js.map +1 -1
- package/dist/cjs/api/Auth.js +9 -8
- package/dist/cjs/api/Auth.js.map +1 -1
- package/dist/cjs/api/EventApi.js +26 -23
- package/dist/cjs/api/EventApi.js.map +1 -1
- package/dist/cjs/api/EventRsvpApi.js +8 -8
- package/dist/cjs/api/EventRsvpApi.js.map +1 -1
- package/dist/cjs/api/EventSeriesApi.js +27 -24
- package/dist/cjs/api/EventSeriesApi.js.map +1 -1
- package/dist/cjs/api/GroupApi.js +22 -14
- package/dist/cjs/api/GroupApi.js.map +1 -1
- package/dist/cjs/api/ICalApi.js +25 -0
- package/dist/cjs/api/ICalApi.js.map +1 -0
- package/dist/cjs/api/RoleApi.js +11 -3
- package/dist/cjs/api/RoleApi.js.map +1 -1
- package/dist/cjs/api/Roster.js +10 -10
- package/dist/cjs/api/Roster.js.map +1 -1
- package/dist/cjs/api/TeamSettingsApi.js +13 -12
- package/dist/cjs/api/TeamSettingsApi.js.map +1 -1
- package/dist/cjs/api/TrainingTypeApi.js +17 -8
- package/dist/cjs/api/TrainingTypeApi.js.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/models/AgeThresholdRule.js +2 -2
- package/dist/cjs/models/AgeThresholdRule.js.map +1 -1
- package/dist/cjs/models/ChannelSyncEvent.js +5 -5
- package/dist/cjs/models/ChannelSyncEvent.js.map +1 -1
- package/dist/cjs/models/Event.js +5 -5
- package/dist/cjs/models/Event.js.map +1 -1
- package/dist/cjs/models/EventRsvp.js +1 -1
- package/dist/cjs/models/EventRsvp.js.map +1 -1
- package/dist/cjs/models/EventSeries.js +5 -5
- package/dist/cjs/models/EventSeries.js.map +1 -1
- package/dist/cjs/models/GroupModel.js +2 -2
- package/dist/cjs/models/GroupModel.js.map +1 -1
- package/dist/cjs/models/ICalToken.js +17 -0
- package/dist/cjs/models/ICalToken.js.map +1 -0
- package/dist/cjs/models/OAuthConnection.js +1 -1
- package/dist/cjs/models/OAuthConnection.js.map +1 -1
- package/dist/cjs/models/RoleSyncEvent.js +5 -5
- package/dist/cjs/models/RoleSyncEvent.js.map +1 -1
- package/dist/cjs/models/TeamInvite.js +1 -1
- package/dist/cjs/models/TeamInvite.js.map +1 -1
- package/dist/cjs/models/TeamMember.js +1 -1
- package/dist/cjs/models/TeamMember.js.map +1 -1
- package/dist/cjs/models/TrainingType.js +1 -1
- package/dist/cjs/models/TrainingType.js.map +1 -1
- package/dist/cjs/models/User.js +5 -4
- package/dist/cjs/models/User.js.map +1 -1
- package/dist/cjs/rpc/event/EventRpcEvents.js +14 -12
- package/dist/cjs/rpc/event/EventRpcEvents.js.map +1 -1
- package/dist/cjs/rpc/event/EventRpcGroup.js +15 -7
- package/dist/cjs/rpc/event/EventRpcGroup.js.map +1 -1
- package/dist/cjs/rpc/event/EventRpcModels.js +39 -16
- package/dist/cjs/rpc/event/EventRpcModels.js.map +1 -1
- package/dist/cjs/rpc/guild/GuildRpcGroup.js +3 -3
- package/dist/cjs/rpc/guild/GuildRpcGroup.js.map +1 -1
- package/dist/dts/api/AgeThresholdApi.d.ts +6 -1
- package/dist/dts/api/AgeThresholdApi.d.ts.map +1 -1
- package/dist/dts/api/Auth.d.ts +22 -21
- package/dist/dts/api/Auth.d.ts.map +1 -1
- package/dist/dts/api/EventApi.d.ts +69 -69
- package/dist/dts/api/EventApi.d.ts.map +1 -1
- package/dist/dts/api/EventRsvpApi.d.ts +24 -24
- package/dist/dts/api/EventSeriesApi.d.ts +72 -72
- package/dist/dts/api/EventSeriesApi.d.ts.map +1 -1
- package/dist/dts/api/GroupApi.d.ts +49 -44
- package/dist/dts/api/GroupApi.d.ts.map +1 -1
- package/dist/dts/api/ICalApi.d.ts +28 -0
- package/dist/dts/api/ICalApi.d.ts.map +1 -0
- package/dist/dts/api/RoleApi.d.ts +13 -8
- package/dist/dts/api/RoleApi.d.ts.map +1 -1
- package/dist/dts/api/Roster.d.ts +32 -32
- package/dist/dts/api/TeamSettingsApi.d.ts +36 -36
- package/dist/dts/api/TeamSettingsApi.d.ts.map +1 -1
- package/dist/dts/api/TrainingTypeApi.d.ts +28 -23
- package/dist/dts/api/TrainingTypeApi.d.ts.map +1 -1
- package/dist/dts/index.d.ts +2 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/models/AgeThresholdRule.d.ts +22 -22
- package/dist/dts/models/ChannelSyncEvent.d.ts +55 -55
- package/dist/dts/models/Event.d.ts +55 -55
- package/dist/dts/models/EventRsvp.d.ts +11 -11
- package/dist/dts/models/EventSeries.d.ts +55 -55
- package/dist/dts/models/GroupModel.d.ts +22 -22
- package/dist/dts/models/ICalToken.d.ts +69 -0
- package/dist/dts/models/ICalToken.d.ts.map +1 -0
- package/dist/dts/models/OAuthConnection.d.ts +8 -8
- package/dist/dts/models/RoleSyncEvent.d.ts +55 -55
- package/dist/dts/models/TeamInvite.d.ts +11 -11
- package/dist/dts/models/TeamMember.d.ts +22 -22
- package/dist/dts/models/TrainingType.d.ts +11 -11
- package/dist/dts/models/User.d.ts +44 -44
- package/dist/dts/models/User.d.ts.map +1 -1
- package/dist/dts/rpc/SyncRpcs.d.ts +15 -11
- package/dist/dts/rpc/SyncRpcs.d.ts.map +1 -1
- package/dist/dts/rpc/event/EventRpcEvents.d.ts +12 -12
- package/dist/dts/rpc/event/EventRpcEvents.d.ts.map +1 -1
- package/dist/dts/rpc/event/EventRpcGroup.d.ts +13 -9
- package/dist/dts/rpc/event/EventRpcGroup.d.ts.map +1 -1
- package/dist/dts/rpc/event/EventRpcModels.d.ts +108 -45
- package/dist/dts/rpc/event/EventRpcModels.d.ts.map +1 -1
- package/dist/dts/rpc/guild/GuildRpcGroup.d.ts +3 -3
- package/dist/esm/api/AgeThresholdApi.js +5 -0
- package/dist/esm/api/AgeThresholdApi.js.map +1 -1
- package/dist/esm/api/Auth.js +8 -7
- package/dist/esm/api/Auth.js.map +1 -1
- package/dist/esm/api/EventApi.js +25 -23
- package/dist/esm/api/EventApi.js.map +1 -1
- package/dist/esm/api/EventRsvpApi.js +8 -8
- package/dist/esm/api/EventRsvpApi.js.map +1 -1
- package/dist/esm/api/EventSeriesApi.js +26 -24
- package/dist/esm/api/EventSeriesApi.js.map +1 -1
- package/dist/esm/api/GroupApi.js +20 -13
- package/dist/esm/api/GroupApi.js.map +1 -1
- package/dist/esm/api/ICalApi.js +16 -0
- package/dist/esm/api/ICalApi.js.map +1 -0
- package/dist/esm/api/RoleApi.js +9 -2
- package/dist/esm/api/RoleApi.js.map +1 -1
- package/dist/esm/api/Roster.js +10 -10
- package/dist/esm/api/Roster.js.map +1 -1
- package/dist/esm/api/TeamSettingsApi.js +13 -12
- package/dist/esm/api/TeamSettingsApi.js.map +1 -1
- package/dist/esm/api/TrainingTypeApi.js +15 -7
- package/dist/esm/api/TrainingTypeApi.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/AgeThresholdRule.js +2 -2
- package/dist/esm/models/AgeThresholdRule.js.map +1 -1
- package/dist/esm/models/ChannelSyncEvent.js +5 -5
- package/dist/esm/models/ChannelSyncEvent.js.map +1 -1
- package/dist/esm/models/Event.js +5 -5
- package/dist/esm/models/Event.js.map +1 -1
- package/dist/esm/models/EventRsvp.js +1 -1
- package/dist/esm/models/EventRsvp.js.map +1 -1
- package/dist/esm/models/EventSeries.js +5 -5
- package/dist/esm/models/EventSeries.js.map +1 -1
- package/dist/esm/models/GroupModel.js +2 -2
- package/dist/esm/models/GroupModel.js.map +1 -1
- package/dist/esm/models/ICalToken.js +10 -0
- package/dist/esm/models/ICalToken.js.map +1 -0
- package/dist/esm/models/OAuthConnection.js +1 -1
- package/dist/esm/models/OAuthConnection.js.map +1 -1
- package/dist/esm/models/RoleSyncEvent.js +5 -5
- package/dist/esm/models/RoleSyncEvent.js.map +1 -1
- package/dist/esm/models/TeamInvite.js +1 -1
- package/dist/esm/models/TeamInvite.js.map +1 -1
- package/dist/esm/models/TeamMember.js +1 -1
- package/dist/esm/models/TeamMember.js.map +1 -1
- package/dist/esm/models/TrainingType.js +1 -1
- package/dist/esm/models/TrainingType.js.map +1 -1
- package/dist/esm/models/User.js +5 -4
- package/dist/esm/models/User.js.map +1 -1
- package/dist/esm/rpc/event/EventRpcEvents.js +13 -12
- package/dist/esm/rpc/event/EventRpcEvents.js.map +1 -1
- package/dist/esm/rpc/event/EventRpcGroup.js +16 -8
- package/dist/esm/rpc/event/EventRpcGroup.js.map +1 -1
- package/dist/esm/rpc/event/EventRpcModels.js +34 -15
- package/dist/esm/rpc/event/EventRpcModels.js.map +1 -1
- package/dist/esm/rpc/guild/GuildRpcGroup.js +3 -3
- package/dist/esm/rpc/guild/GuildRpcGroup.js.map +1 -1
- package/package.json +2 -2
- package/src/api/AgeThresholdApi.ts +7 -0
- package/src/api/Auth.ts +8 -7
- package/src/api/EventApi.ts +27 -23
- package/src/api/EventRsvpApi.ts +8 -8
- package/src/api/EventSeriesApi.ts +28 -24
- package/src/api/GroupApi.ts +21 -13
- package/src/api/ICalApi.ts +32 -0
- package/src/api/RoleApi.ts +10 -2
- package/src/api/Roster.ts +10 -10
- package/src/api/TeamSettingsApi.ts +13 -12
- package/src/api/TrainingTypeApi.ts +16 -7
- package/src/index.ts +4 -0
- package/src/models/AgeThresholdRule.ts +2 -2
- package/src/models/ChannelSyncEvent.ts +5 -5
- package/src/models/Event.ts +5 -5
- package/src/models/EventRsvp.ts +1 -1
- package/src/models/EventSeries.ts +5 -5
- package/src/models/GroupModel.ts +2 -2
- package/src/models/ICalToken.ts +10 -0
- package/src/models/OAuthConnection.ts +1 -1
- package/src/models/RoleSyncEvent.ts +5 -5
- package/src/models/TeamInvite.ts +1 -1
- package/src/models/TeamMember.ts +1 -1
- package/src/models/TrainingType.ts +1 -1
- package/src/models/User.ts +5 -4
- package/src/rpc/event/EventRpcEvents.ts +13 -12
- package/src/rpc/event/EventRpcGroup.ts +18 -7
- package/src/rpc/event/EventRpcModels.ts +39 -15
- package/src/rpc/guild/GuildRpcGroup.ts +3 -3
package/src/api/GroupApi.ts
CHANGED
|
@@ -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.
|
|
13
|
+
parentId: Schema.OptionFromNullOr(GroupId),
|
|
14
14
|
name: Schema.String,
|
|
15
|
-
emoji: Schema.
|
|
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.
|
|
22
|
+
parentId: Schema.OptionFromNullOr(GroupId),
|
|
23
23
|
name: Schema.String,
|
|
24
|
-
emoji: Schema.
|
|
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.
|
|
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.
|
|
43
|
-
emoji: Schema.
|
|
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.
|
|
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.
|
|
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.
|
|
70
|
-
discordRoleId: Schema.
|
|
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.
|
|
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.
|
|
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
|
+
) {}
|
package/src/api/RoleApi.ts
CHANGED
|
@@ -27,8 +27,8 @@ export class CreateRoleRequest extends Schema.Class<CreateRoleRequest>('CreateRo
|
|
|
27
27
|
}) {}
|
|
28
28
|
|
|
29
29
|
export class UpdateRoleRequest extends Schema.Class<UpdateRoleRequest>('UpdateRoleRequest')({
|
|
30
|
-
name: Schema.
|
|
31
|
-
permissions: Schema.
|
|
30
|
+
name: Schema.OptionFromNullOr(Schema.NonEmptyString),
|
|
31
|
+
permissions: Schema.OptionFromNullOr(Schema.Array(Permission)),
|
|
32
32
|
}) {}
|
|
33
33
|
|
|
34
34
|
export class RoleNotFound extends Schema.TaggedError<RoleNotFound>()(
|
|
@@ -65,6 +65,12 @@ export class RoleInUse extends Schema.TaggedError<RoleInUse>()(
|
|
|
65
65
|
HttpApiSchema.annotations({ status: 409 }),
|
|
66
66
|
) {}
|
|
67
67
|
|
|
68
|
+
export class RoleNameAlreadyTaken extends Schema.TaggedError<RoleNameAlreadyTaken>()(
|
|
69
|
+
'RoleNameAlreadyTaken',
|
|
70
|
+
{},
|
|
71
|
+
HttpApiSchema.annotations({ status: 409 }),
|
|
72
|
+
) {}
|
|
73
|
+
|
|
68
74
|
export class RoleApiGroup extends HttpApiGroup.make('role')
|
|
69
75
|
.add(
|
|
70
76
|
HttpApiEndpoint.get('listRoles', '/teams/:teamId/roles')
|
|
@@ -77,6 +83,7 @@ export class RoleApiGroup extends HttpApiGroup.make('role')
|
|
|
77
83
|
HttpApiEndpoint.post('createRole', '/teams/:teamId/roles')
|
|
78
84
|
.addSuccess(RoleDetail, { status: 201 })
|
|
79
85
|
.addError(Forbidden, { status: 403 })
|
|
86
|
+
.addError(RoleNameAlreadyTaken, { status: 409 })
|
|
80
87
|
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
81
88
|
.setPayload(CreateRoleRequest)
|
|
82
89
|
.middleware(AuthMiddleware),
|
|
@@ -95,6 +102,7 @@ export class RoleApiGroup extends HttpApiGroup.make('role')
|
|
|
95
102
|
.addError(Forbidden, { status: 403 })
|
|
96
103
|
.addError(RoleNotFound, { status: 404 })
|
|
97
104
|
.addError(CannotModifyBuiltIn, { status: 400 })
|
|
105
|
+
.addError(RoleNameAlreadyTaken, { status: 409 })
|
|
98
106
|
.setPath(Schema.Struct({ teamId: TeamId, roleId: RoleId }))
|
|
99
107
|
.setPayload(UpdateRoleRequest)
|
|
100
108
|
.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.
|
|
17
|
-
birthDate: Schema.
|
|
18
|
-
gender: Schema.
|
|
19
|
-
jerseyNumber: Schema.
|
|
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.
|
|
21
|
+
avatar: Schema.OptionFromNullOr(Schema.String),
|
|
22
22
|
}) {}
|
|
23
23
|
|
|
24
24
|
export class UpdatePlayerRequest extends Schema.Class<UpdatePlayerRequest>('UpdatePlayerRequest')({
|
|
25
|
-
name: Schema.
|
|
25
|
+
name: Schema.OptionFromNullOr(Schema.String),
|
|
26
26
|
birthDate: Schema.OptionFromNullOr(Schema.String),
|
|
27
|
-
gender: Schema.
|
|
28
|
-
jerseyNumber: Schema.
|
|
27
|
+
gender: Schema.OptionFromNullOr(Gender),
|
|
28
|
+
jerseyNumber: Schema.OptionFromNullOr(Schema.Number),
|
|
29
29
|
}) {}
|
|
30
30
|
|
|
31
31
|
export class PlayerNotFound extends Schema.TaggedError<PlayerNotFound>()(
|
|
@@ -69,8 +69,8 @@ export class CreateRosterRequest extends Schema.Class<CreateRosterRequest>('Crea
|
|
|
69
69
|
}) {}
|
|
70
70
|
|
|
71
71
|
export class UpdateRosterRequest extends Schema.Class<UpdateRosterRequest>('UpdateRosterRequest')({
|
|
72
|
-
name: Schema.
|
|
73
|
-
active: Schema.
|
|
72
|
+
name: Schema.OptionFromNullOr(Schema.String),
|
|
73
|
+
active: Schema.OptionFromNullOr(Schema.Boolean),
|
|
74
74
|
}) {}
|
|
75
75
|
|
|
76
76
|
export class AddRosterMemberRequest extends Schema.Class<AddRosterMemberRequest>(
|
|
@@ -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.
|
|
13
|
-
discordChannelMatch: Schema.
|
|
14
|
-
discordChannelTournament: Schema.
|
|
15
|
-
discordChannelMeeting: Schema.
|
|
16
|
-
discordChannelSocial: Schema.
|
|
17
|
-
discordChannelOther: Schema.
|
|
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(
|
|
31
|
+
discordChannelTraining: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
|
|
31
32
|
as: 'Option',
|
|
32
33
|
}),
|
|
33
|
-
discordChannelMatch: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
34
|
+
discordChannelMatch: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
|
|
34
35
|
as: 'Option',
|
|
35
36
|
}),
|
|
36
|
-
discordChannelTournament: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
37
|
+
discordChannelTournament: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
|
|
37
38
|
as: 'Option',
|
|
38
39
|
}),
|
|
39
|
-
discordChannelMeeting: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
40
|
+
discordChannelMeeting: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
|
|
40
41
|
as: 'Option',
|
|
41
42
|
}),
|
|
42
|
-
discordChannelSocial: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
43
|
+
discordChannelSocial: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), {
|
|
43
44
|
as: 'Option',
|
|
44
45
|
}),
|
|
45
|
-
discordChannelOther: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
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,16 @@ export class TrainingTypeInfo extends Schema.Class<TrainingTypeInfo>('TrainingTy
|
|
|
9
10
|
trainingTypeId: TrainingTypeId,
|
|
10
11
|
teamId: TeamId,
|
|
11
12
|
name: Schema.String,
|
|
12
|
-
groupName: Schema.
|
|
13
|
+
groupName: Schema.OptionFromNullOr(Schema.String),
|
|
13
14
|
}) {}
|
|
14
15
|
|
|
15
16
|
export class TrainingTypeDetail extends Schema.Class<TrainingTypeDetail>('TrainingTypeDetail')({
|
|
16
17
|
trainingTypeId: TrainingTypeId,
|
|
17
18
|
teamId: TeamId,
|
|
18
19
|
name: Schema.String,
|
|
19
|
-
groupId: Schema.
|
|
20
|
-
groupName: Schema.
|
|
21
|
-
discordChannelId: Schema.
|
|
20
|
+
groupId: Schema.OptionFromNullOr(GroupId),
|
|
21
|
+
groupName: Schema.OptionFromNullOr(Schema.String),
|
|
22
|
+
discordChannelId: Schema.OptionFromNullOr(Snowflake),
|
|
22
23
|
canAdmin: Schema.Boolean,
|
|
23
24
|
}) {}
|
|
24
25
|
|
|
@@ -33,15 +34,15 @@ export class CreateTrainingTypeRequest extends Schema.Class<CreateTrainingTypeRe
|
|
|
33
34
|
'CreateTrainingTypeRequest',
|
|
34
35
|
)({
|
|
35
36
|
name: Schema.NonEmptyString,
|
|
36
|
-
groupId: Schema.
|
|
37
|
-
discordChannelId: Schema.
|
|
37
|
+
groupId: Schema.OptionFromNullOr(GroupId),
|
|
38
|
+
discordChannelId: Schema.OptionFromNullOr(Snowflake),
|
|
38
39
|
}) {}
|
|
39
40
|
|
|
40
41
|
export class UpdateTrainingTypeRequest extends Schema.Class<UpdateTrainingTypeRequest>(
|
|
41
42
|
'UpdateTrainingTypeRequest',
|
|
42
43
|
)({
|
|
43
44
|
name: Schema.NonEmptyString,
|
|
44
|
-
discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(
|
|
45
|
+
discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Snowflake), { as: 'Option' }),
|
|
45
46
|
}) {}
|
|
46
47
|
|
|
47
48
|
export class TrainingTypeNotFound extends Schema.TaggedError<TrainingTypeNotFound>()(
|
|
@@ -56,6 +57,12 @@ export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
|
|
56
57
|
HttpApiSchema.annotations({ status: 403 }),
|
|
57
58
|
) {}
|
|
58
59
|
|
|
60
|
+
export class TrainingTypeNameAlreadyTaken extends Schema.TaggedError<TrainingTypeNameAlreadyTaken>()(
|
|
61
|
+
'TrainingTypeNameAlreadyTaken',
|
|
62
|
+
{},
|
|
63
|
+
HttpApiSchema.annotations({ status: 409 }),
|
|
64
|
+
) {}
|
|
65
|
+
|
|
59
66
|
export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
60
67
|
.add(
|
|
61
68
|
HttpApiEndpoint.get('listTrainingTypes', '/teams/:teamId/training-types')
|
|
@@ -68,6 +75,7 @@ export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
|
68
75
|
HttpApiEndpoint.post('createTrainingType', '/teams/:teamId/training-types')
|
|
69
76
|
.addSuccess(TrainingTypeInfo, { status: 201 })
|
|
70
77
|
.addError(Forbidden, { status: 403 })
|
|
78
|
+
.addError(TrainingTypeNameAlreadyTaken, { status: 409 })
|
|
71
79
|
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
72
80
|
.setPayload(CreateTrainingTypeRequest)
|
|
73
81
|
.middleware(AuthMiddleware),
|
|
@@ -85,6 +93,7 @@ export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
|
85
93
|
.addSuccess(TrainingTypeInfo)
|
|
86
94
|
.addError(Forbidden, { status: 403 })
|
|
87
95
|
.addError(TrainingTypeNotFound, { status: 404 })
|
|
96
|
+
.addError(TrainingTypeNameAlreadyTaken, { status: 409 })
|
|
88
97
|
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
89
98
|
.setPayload(UpdateTrainingTypeRequest)
|
|
90
99
|
.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.
|
|
14
|
-
max_age: Schema.
|
|
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.
|
|
25
|
-
team_member_id: Schema.
|
|
26
|
-
discord_user_id: Schema.
|
|
27
|
-
processed_at: Schema.
|
|
28
|
-
error: Schema.
|
|
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
|
}) {}
|
package/src/models/Event.ts
CHANGED
|
@@ -25,14 +25,14 @@ export type EventStatus = typeof EventStatus.Type;
|
|
|
25
25
|
export class Event extends Model.Class<Event>('Event')({
|
|
26
26
|
id: Model.Generated(EventId),
|
|
27
27
|
team_id: TeamId,
|
|
28
|
-
training_type_id: Schema.
|
|
28
|
+
training_type_id: Schema.OptionFromNullOr(TrainingTypeId),
|
|
29
29
|
event_type: EventType,
|
|
30
30
|
title: Schema.String,
|
|
31
|
-
description: Schema.
|
|
31
|
+
description: Schema.OptionFromNullOr(Schema.String),
|
|
32
32
|
start_at: Schemas.DateTimeFromDate,
|
|
33
|
-
end_at: Schema.
|
|
34
|
-
location: Schema.
|
|
35
|
-
series_id: Schema.
|
|
33
|
+
end_at: Schema.OptionFromNullOr(Schemas.DateTimeFromDate),
|
|
34
|
+
location: Schema.OptionFromNullOr(Schema.String),
|
|
35
|
+
series_id: Schema.OptionFromNullOr(EventSeriesId),
|
|
36
36
|
series_modified: Schema.Boolean,
|
|
37
37
|
status: Model.FieldExcept('update')(EventStatus),
|
|
38
38
|
created_by: TeamMemberId,
|
package/src/models/EventRsvp.ts
CHANGED
|
@@ -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.
|
|
17
|
+
message: Schema.OptionFromNullOr(Schema.String),
|
|
18
18
|
created_at: Model.DateTimeInsertFromDate,
|
|
19
19
|
updated_at: Model.DateTimeUpdateFromDate,
|
|
20
20
|
}) {}
|
|
@@ -22,16 +22,16 @@ export type EventSeriesStatus = typeof EventSeriesStatus.Type;
|
|
|
22
22
|
export class EventSeries extends Model.Class<EventSeries>('EventSeries')({
|
|
23
23
|
id: Model.Generated(EventSeriesId),
|
|
24
24
|
team_id: TeamId,
|
|
25
|
-
training_type_id: Schema.
|
|
25
|
+
training_type_id: Schema.OptionFromNullOr(TrainingTypeId),
|
|
26
26
|
title: Schema.String,
|
|
27
|
-
description: Schema.
|
|
27
|
+
description: Schema.OptionFromNullOr(Schema.String),
|
|
28
28
|
start_time: Schema.String,
|
|
29
|
-
end_time: Schema.
|
|
30
|
-
location: Schema.
|
|
29
|
+
end_time: Schema.OptionFromNullOr(Schema.String),
|
|
30
|
+
location: Schema.OptionFromNullOr(Schema.String),
|
|
31
31
|
frequency: RecurrenceFrequency,
|
|
32
32
|
days_of_week: DaysOfWeek,
|
|
33
33
|
start_date: Schema.DateFromSelf,
|
|
34
|
-
end_date: Schema.
|
|
34
|
+
end_date: Schema.OptionFromNullOr(Schema.DateFromSelf),
|
|
35
35
|
status: Model.FieldExcept('update')(EventSeriesStatus),
|
|
36
36
|
created_by: TeamMemberId,
|
|
37
37
|
created_at: Model.DateTimeInsertFromDate,
|
package/src/models/GroupModel.ts
CHANGED
|
@@ -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.
|
|
11
|
+
parent_id: Schema.OptionFromNullOr(GroupId),
|
|
12
12
|
name: Schema.String,
|
|
13
|
-
emoji: Schema.
|
|
13
|
+
emoji: Schema.OptionFromNullOr(Schema.String),
|
|
14
14
|
created_at: Model.DateTimeInsertFromDate,
|
|
15
15
|
}) {}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { UserId } from '~/models/User.js';
|
|
4
|
+
|
|
5
|
+
export class ICalToken extends Model.Class<ICalToken>('ICalToken')({
|
|
6
|
+
id: Model.Generated(Schema.String),
|
|
7
|
+
user_id: UserId,
|
|
8
|
+
token: Schema.String,
|
|
9
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
10
|
+
}) {}
|
|
@@ -10,7 +10,7 @@ export class OAuthConnection extends Model.Class<OAuthConnection>('OAuthConnecti
|
|
|
10
10
|
user_id: UserId,
|
|
11
11
|
provider: Schema.String,
|
|
12
12
|
access_token: Model.Sensitive(Schema.String),
|
|
13
|
-
refresh_token: Model.Sensitive(Schema.
|
|
13
|
+
refresh_token: Model.Sensitive(Schema.OptionFromNullOr(Schema.String)),
|
|
14
14
|
created_at: Model.DateTimeInsertFromDate,
|
|
15
15
|
updated_at: Model.DateTimeUpdateFromDate,
|
|
16
16
|
}) {}
|
|
@@ -21,10 +21,10 @@ export class RoleSyncEvent extends Model.Class<RoleSyncEvent>('RoleSyncEvent')({
|
|
|
21
21
|
guild_id: Schema.String,
|
|
22
22
|
event_type: RoleSyncEventType,
|
|
23
23
|
role_id: RoleId,
|
|
24
|
-
role_name: Schema.
|
|
25
|
-
team_member_id: Schema.
|
|
26
|
-
discord_user_id: Schema.
|
|
27
|
-
processed_at: Schema.
|
|
28
|
-
error: Schema.
|
|
24
|
+
role_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
|
}) {}
|
package/src/models/TeamInvite.ts
CHANGED
|
@@ -14,5 +14,5 @@ export class TeamInvite extends Model.Class<TeamInvite>('TeamInvite')({
|
|
|
14
14
|
active: Schema.Boolean,
|
|
15
15
|
created_by: UserId,
|
|
16
16
|
created_at: Model.DateTimeInsertFromDate,
|
|
17
|
-
expires_at: Schema.
|
|
17
|
+
expires_at: Schema.OptionFromNullOr(Schemas.DateTimeFromDate),
|
|
18
18
|
}) {}
|
package/src/models/TeamMember.ts
CHANGED
|
@@ -11,6 +11,6 @@ export class TeamMember extends Model.Class<TeamMember>('TeamMember')({
|
|
|
11
11
|
team_id: TeamId,
|
|
12
12
|
user_id: UserId,
|
|
13
13
|
active: Schema.Boolean,
|
|
14
|
-
jersey_number: Model.FieldExcept('insert')(Schema.
|
|
14
|
+
jersey_number: Model.FieldExcept('insert')(Schema.OptionFromNullOr(Schema.Number)),
|
|
15
15
|
joined_at: Model.DateTimeInsertFromDate,
|
|
16
16
|
}) {}
|
|
@@ -10,6 +10,6 @@ export class TrainingType extends Model.Class<TrainingType>('TrainingType')({
|
|
|
10
10
|
id: Model.Generated(TrainingTypeId),
|
|
11
11
|
team_id: TeamId,
|
|
12
12
|
name: Schema.String,
|
|
13
|
-
group_id: Schema.
|
|
13
|
+
group_id: Schema.OptionFromNullOr(GroupId),
|
|
14
14
|
created_at: Model.DateTimeInsertFromDate,
|
|
15
15
|
}) {}
|
package/src/models/User.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Model } from '@effect/sql';
|
|
2
2
|
import * as Schemas from '@sideline/effect-lib/Schemas';
|
|
3
3
|
import { Schema } from 'effect';
|
|
4
|
+
import { Snowflake } from '~/models/Discord.js';
|
|
4
5
|
|
|
5
6
|
export const UserId = Schema.String.pipe(Schema.brand('UserId'));
|
|
6
7
|
export type UserId = typeof UserId.Type;
|
|
@@ -13,12 +14,12 @@ export type Locale = typeof Locale.Type;
|
|
|
13
14
|
|
|
14
15
|
export class User extends Model.Class<User>('User')({
|
|
15
16
|
id: Model.Generated(UserId),
|
|
16
|
-
discord_id:
|
|
17
|
+
discord_id: Snowflake,
|
|
17
18
|
username: Schema.String,
|
|
18
|
-
avatar: Schema.
|
|
19
|
-
name: Schema.
|
|
19
|
+
avatar: Schema.OptionFromNullOr(Schema.String),
|
|
20
|
+
name: Schema.OptionFromNullOr(Schema.String),
|
|
20
21
|
birth_date: Schema.OptionFromNullOr(Schemas.DateTimeFromDate),
|
|
21
|
-
gender: Schema.
|
|
22
|
+
gender: Schema.OptionFromNullOr(Gender),
|
|
22
23
|
locale: Locale,
|
|
23
24
|
created_at: Model.DateTimeInsertFromDate,
|
|
24
25
|
is_profile_complete: Schema.Boolean,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Schemas from '@sideline/effect-lib/Schemas';
|
|
1
2
|
import { Schema } from 'effect';
|
|
2
3
|
import { Discord, Event, Team } from '~/index.js';
|
|
3
4
|
|
|
@@ -7,12 +8,12 @@ export class EventCreatedEvent extends Schema.TaggedClass<EventCreatedEvent>()('
|
|
|
7
8
|
guild_id: Discord.Snowflake,
|
|
8
9
|
event_id: Event.EventId,
|
|
9
10
|
title: Schema.String,
|
|
10
|
-
description: Schema.
|
|
11
|
-
start_at:
|
|
12
|
-
end_at: Schema.
|
|
13
|
-
location: Schema.
|
|
11
|
+
description: Schema.OptionFromNullOr(Schema.String),
|
|
12
|
+
start_at: Schemas.DateTimeFromIsoString,
|
|
13
|
+
end_at: Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString),
|
|
14
|
+
location: Schema.OptionFromNullOr(Schema.String),
|
|
14
15
|
event_type: Schema.String,
|
|
15
|
-
discord_channel_id: Schema.
|
|
16
|
+
discord_channel_id: Schema.OptionFromNullOr(Discord.Snowflake),
|
|
16
17
|
}) {}
|
|
17
18
|
|
|
18
19
|
export class EventUpdatedEvent extends Schema.TaggedClass<EventUpdatedEvent>()('event_updated', {
|
|
@@ -21,12 +22,12 @@ export class EventUpdatedEvent extends Schema.TaggedClass<EventUpdatedEvent>()('
|
|
|
21
22
|
guild_id: Discord.Snowflake,
|
|
22
23
|
event_id: Event.EventId,
|
|
23
24
|
title: Schema.String,
|
|
24
|
-
description: Schema.
|
|
25
|
-
start_at:
|
|
26
|
-
end_at: Schema.
|
|
27
|
-
location: Schema.
|
|
25
|
+
description: Schema.OptionFromNullOr(Schema.String),
|
|
26
|
+
start_at: Schemas.DateTimeFromIsoString,
|
|
27
|
+
end_at: Schema.OptionFromNullOr(Schemas.DateTimeFromIsoString),
|
|
28
|
+
location: Schema.OptionFromNullOr(Schema.String),
|
|
28
29
|
event_type: Schema.String,
|
|
29
|
-
discord_channel_id: Schema.
|
|
30
|
+
discord_channel_id: Schema.OptionFromNullOr(Discord.Snowflake),
|
|
30
31
|
}) {}
|
|
31
32
|
|
|
32
33
|
export class EventCancelledEvent extends Schema.TaggedClass<EventCancelledEvent>()(
|
|
@@ -45,8 +46,8 @@ export class RsvpReminderEvent extends Schema.TaggedClass<RsvpReminderEvent>()('
|
|
|
45
46
|
guild_id: Discord.Snowflake,
|
|
46
47
|
event_id: Event.EventId,
|
|
47
48
|
title: Schema.String,
|
|
48
|
-
start_at:
|
|
49
|
-
discord_channel_id: Schema.
|
|
49
|
+
start_at: Schemas.DateTimeFromIsoString,
|
|
50
|
+
discord_channel_id: Schema.OptionFromNullOr(Discord.Snowflake),
|
|
50
51
|
}) {}
|
|
51
52
|
|
|
52
53
|
export const UnprocessedEventSyncEvent = Schema.Union(
|