@sideline/domain 0.4.0 → 0.6.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 +14 -14
- package/dist/cjs/api/AgeThresholdApi.js.map +1 -1
- package/dist/cjs/api/Auth.js +31 -7
- package/dist/cjs/api/Auth.js.map +1 -1
- package/dist/cjs/api/EventApi.js +141 -0
- package/dist/cjs/api/EventApi.js.map +1 -0
- package/dist/cjs/api/EventRsvpApi.js +66 -0
- package/dist/cjs/api/EventRsvpApi.js.map +1 -0
- package/dist/cjs/api/EventSeriesApi.js +139 -0
- package/dist/cjs/api/EventSeriesApi.js.map +1 -0
- package/dist/cjs/api/GroupApi.js +205 -0
- package/dist/cjs/api/GroupApi.js.map +1 -0
- package/dist/cjs/api/NotificationApi.js +6 -2
- package/dist/cjs/api/NotificationApi.js.map +1 -1
- package/dist/cjs/api/Roster.js +3 -2
- package/dist/cjs/api/Roster.js.map +1 -1
- package/dist/cjs/api/TeamSettingsApi.js +55 -0
- package/dist/cjs/api/TeamSettingsApi.js.map +1 -0
- package/dist/cjs/api/TrainingTypeApi.js +15 -41
- package/dist/cjs/api/TrainingTypeApi.js.map +1 -1
- package/dist/cjs/index.js +31 -5
- package/dist/cjs/models/AgeThresholdRule.js +2 -2
- package/dist/cjs/models/AgeThresholdRule.js.map +1 -1
- package/dist/cjs/models/ChannelSyncEvent.js +3 -3
- package/dist/cjs/models/ChannelSyncEvent.js.map +1 -1
- package/dist/cjs/models/DiscordChannelMapping.js +2 -2
- package/dist/cjs/models/DiscordChannelMapping.js.map +1 -1
- package/dist/cjs/models/Event.js +36 -0
- package/dist/cjs/models/Event.js.map +1 -0
- package/dist/cjs/models/EventRsvp.js +23 -0
- package/dist/cjs/models/EventRsvp.js.map +1 -0
- package/dist/cjs/models/EventSeries.js +35 -0
- package/dist/cjs/models/EventSeries.js.map +1 -0
- package/dist/cjs/models/GroupModel.js +20 -0
- package/dist/cjs/models/GroupModel.js.map +1 -0
- package/dist/cjs/models/Notification.js +1 -1
- package/dist/cjs/models/Notification.js.map +1 -1
- package/dist/cjs/models/Role.js +3 -3
- package/dist/cjs/models/Role.js.map +1 -1
- package/dist/cjs/models/RoleGroup.js +15 -0
- package/dist/cjs/models/RoleGroup.js.map +1 -0
- package/dist/cjs/models/Session.js +3 -5
- package/dist/cjs/models/Session.js.map +1 -1
- package/dist/cjs/models/Team.js +2 -0
- package/dist/cjs/models/Team.js.map +1 -1
- package/dist/cjs/models/TeamInvite.js +3 -5
- package/dist/cjs/models/TeamInvite.js.map +1 -1
- package/dist/cjs/models/TeamSettings.js +17 -0
- package/dist/cjs/models/TeamSettings.js.map +1 -0
- package/dist/cjs/models/TrainingType.js +2 -0
- package/dist/cjs/models/TrainingType.js.map +1 -1
- package/dist/cjs/models/User.js +3 -1
- package/dist/cjs/models/User.js.map +1 -1
- package/dist/cjs/rpc/SyncRpcs.js +3 -1
- package/dist/cjs/rpc/SyncRpcs.js.map +1 -1
- package/dist/cjs/rpc/channel/ChannelRpcEvents.js +6 -6
- package/dist/cjs/rpc/channel/ChannelRpcEvents.js.map +1 -1
- package/dist/cjs/rpc/channel/ChannelRpcGroup.js +3 -3
- package/dist/cjs/rpc/channel/ChannelRpcGroup.js.map +1 -1
- package/dist/cjs/rpc/channel/ChannelRpcModels.js +1 -1
- package/dist/cjs/rpc/channel/ChannelRpcModels.js.map +1 -1
- package/dist/cjs/rpc/event/EventRpcEvents.js +45 -0
- package/dist/cjs/rpc/event/EventRpcEvents.js.map +1 -0
- package/dist/cjs/rpc/event/EventRpcGroup.js +65 -0
- package/dist/cjs/rpc/event/EventRpcGroup.js.map +1 -0
- package/dist/cjs/rpc/event/EventRpcModels.js +47 -0
- package/dist/cjs/rpc/event/EventRpcModels.js.map +1 -0
- package/dist/cjs/rpc/guild/GuildRpcGroup.js +35 -0
- package/dist/cjs/rpc/guild/GuildRpcGroup.js.map +1 -0
- package/dist/dts/api/AgeThresholdApi.d.ts +25 -25
- package/dist/dts/api/AgeThresholdApi.d.ts.map +1 -1
- package/dist/dts/api/Auth.d.ts +42 -13
- package/dist/dts/api/Auth.d.ts.map +1 -1
- package/dist/dts/api/EventApi.d.ts +273 -0
- package/dist/dts/api/EventApi.d.ts.map +1 -0
- package/dist/dts/api/EventRsvpApi.d.ts +96 -0
- package/dist/dts/api/EventRsvpApi.d.ts.map +1 -0
- package/dist/dts/api/EventSeriesApi.d.ts +284 -0
- package/dist/dts/api/EventSeriesApi.d.ts.map +1 -0
- package/dist/dts/api/GroupApi.d.ts +254 -0
- package/dist/dts/api/GroupApi.d.ts.map +1 -0
- package/dist/dts/api/NotificationApi.d.ts +10 -6
- package/dist/dts/api/NotificationApi.d.ts.map +1 -1
- package/dist/dts/api/RoleApi.d.ts +10 -10
- package/dist/dts/api/Roster.d.ts +15 -11
- package/dist/dts/api/Roster.d.ts.map +1 -1
- package/dist/dts/api/TeamSettingsApi.d.ts +107 -0
- package/dist/dts/api/TeamSettingsApi.d.ts.map +1 -0
- package/dist/dts/api/TrainingTypeApi.d.ts +33 -42
- package/dist/dts/api/TrainingTypeApi.d.ts.map +1 -1
- package/dist/dts/index.d.ts +15 -2
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/models/AgeThresholdRule.d.ts +13 -13
- package/dist/dts/models/ChannelSyncEvent.d.ts +32 -32
- package/dist/dts/models/DiscordChannelMapping.d.ts +11 -11
- package/dist/dts/models/Event.d.ts +233 -0
- package/dist/dts/models/Event.d.ts.map +1 -0
- package/dist/dts/models/EventRsvp.d.ts +110 -0
- package/dist/dts/models/EventRsvp.d.ts.map +1 -0
- package/dist/dts/models/EventSeries.d.ts +248 -0
- package/dist/dts/models/EventSeries.d.ts.map +1 -0
- package/dist/dts/models/GroupModel.d.ts +97 -0
- package/dist/dts/models/GroupModel.d.ts.map +1 -0
- package/dist/dts/models/Notification.d.ts +14 -14
- package/dist/dts/models/Notification.d.ts.map +1 -1
- package/dist/dts/models/Role.d.ts +4 -4
- package/dist/dts/models/Role.d.ts.map +1 -1
- package/dist/dts/models/RoleGroup.d.ts +16 -0
- package/dist/dts/models/RoleGroup.d.ts.map +1 -0
- package/dist/dts/models/RoleSyncEvent.d.ts +8 -8
- package/dist/dts/models/Session.d.ts +6 -6
- package/dist/dts/models/Session.d.ts.map +1 -1
- package/dist/dts/models/Team.d.ts +13 -0
- package/dist/dts/models/Team.d.ts.map +1 -1
- package/dist/dts/models/TeamInvite.d.ts +6 -6
- package/dist/dts/models/TeamInvite.d.ts.map +1 -1
- package/dist/dts/models/{SubgroupModel.d.ts → TeamSettings.d.ts} +27 -28
- package/dist/dts/models/TeamSettings.d.ts.map +1 -0
- package/dist/dts/models/TrainingType.d.ts +13 -0
- package/dist/dts/models/TrainingType.d.ts.map +1 -1
- package/dist/dts/models/User.d.ts +11 -11
- package/dist/dts/models/User.d.ts.map +1 -1
- package/dist/dts/rpc/SyncRpcs.d.ts +45 -3
- package/dist/dts/rpc/SyncRpcs.d.ts.map +1 -1
- package/dist/dts/rpc/channel/ChannelRpcEvents.d.ts +6 -6
- package/dist/dts/rpc/channel/ChannelRpcGroup.d.ts +3 -3
- package/dist/dts/rpc/channel/ChannelRpcModels.d.ts +3 -3
- package/dist/dts/rpc/event/EventRpcEvents.d.ts +49 -0
- package/dist/dts/rpc/event/EventRpcEvents.d.ts.map +1 -0
- package/dist/dts/rpc/event/EventRpcGroup.d.ts +32 -0
- package/dist/dts/rpc/event/EventRpcGroup.d.ts.map +1 -0
- package/dist/dts/rpc/event/EventRpcModels.d.ts +115 -0
- package/dist/dts/rpc/event/EventRpcModels.d.ts.map +1 -0
- package/dist/dts/rpc/guild/GuildRpcGroup.d.ts +19 -0
- package/dist/dts/rpc/guild/GuildRpcGroup.d.ts.map +1 -0
- package/dist/esm/api/AgeThresholdApi.js +11 -11
- package/dist/esm/api/AgeThresholdApi.js.map +1 -1
- package/dist/esm/api/Auth.js +29 -6
- package/dist/esm/api/Auth.js.map +1 -1
- package/dist/esm/api/EventApi.js +126 -0
- package/dist/esm/api/EventApi.js.map +1 -0
- package/dist/esm/api/EventRsvpApi.js +53 -0
- package/dist/esm/api/EventRsvpApi.js.map +1 -0
- package/dist/esm/api/EventSeriesApi.js +126 -0
- package/dist/esm/api/EventSeriesApi.js.map +1 -0
- package/dist/esm/api/GroupApi.js +185 -0
- package/dist/esm/api/GroupApi.js.map +1 -0
- package/dist/esm/api/NotificationApi.js +6 -2
- package/dist/esm/api/NotificationApi.js.map +1 -1
- package/dist/esm/api/Roster.js +3 -2
- package/dist/esm/api/Roster.js.map +1 -1
- package/dist/esm/api/TeamSettingsApi.js +46 -0
- package/dist/esm/api/TeamSettingsApi.js.map +1 -0
- package/dist/esm/api/TrainingTypeApi.js +14 -38
- package/dist/esm/api/TrainingTypeApi.js.map +1 -1
- package/dist/esm/index.js +15 -2
- 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 +3 -3
- package/dist/esm/models/ChannelSyncEvent.js.map +1 -1
- package/dist/esm/models/DiscordChannelMapping.js +2 -2
- package/dist/esm/models/DiscordChannelMapping.js.map +1 -1
- package/dist/esm/models/Event.js +28 -0
- package/dist/esm/models/Event.js.map +1 -0
- package/dist/esm/models/EventRsvp.js +16 -0
- package/dist/esm/models/EventRsvp.js.map +1 -0
- package/dist/esm/models/EventSeries.js +28 -0
- package/dist/esm/models/EventSeries.js.map +1 -0
- package/dist/esm/models/GroupModel.js +13 -0
- package/dist/esm/models/GroupModel.js.map +1 -0
- package/dist/esm/models/Notification.js +1 -1
- package/dist/esm/models/Notification.js.map +1 -1
- package/dist/esm/models/Role.js +3 -3
- package/dist/esm/models/Role.js.map +1 -1
- package/dist/esm/models/RoleGroup.js +8 -0
- package/dist/esm/models/RoleGroup.js.map +1 -0
- package/dist/esm/models/Session.js +3 -6
- package/dist/esm/models/Session.js.map +1 -1
- package/dist/esm/models/Team.js +2 -0
- package/dist/esm/models/Team.js.map +1 -1
- package/dist/esm/models/TeamInvite.js +3 -6
- package/dist/esm/models/TeamInvite.js.map +1 -1
- package/dist/esm/models/TeamSettings.js +10 -0
- package/dist/esm/models/TeamSettings.js.map +1 -0
- package/dist/esm/models/TrainingType.js +2 -0
- package/dist/esm/models/TrainingType.js.map +1 -1
- package/dist/esm/models/User.js +2 -1
- package/dist/esm/models/User.js.map +1 -1
- package/dist/esm/rpc/SyncRpcs.js +3 -1
- package/dist/esm/rpc/SyncRpcs.js.map +1 -1
- package/dist/esm/rpc/channel/ChannelRpcEvents.js +7 -7
- package/dist/esm/rpc/channel/ChannelRpcEvents.js.map +1 -1
- package/dist/esm/rpc/channel/ChannelRpcGroup.js +4 -4
- package/dist/esm/rpc/channel/ChannelRpcGroup.js.map +1 -1
- package/dist/esm/rpc/channel/ChannelRpcModels.js +2 -2
- package/dist/esm/rpc/channel/ChannelRpcModels.js.map +1 -1
- package/dist/esm/rpc/event/EventRpcEvents.js +36 -0
- package/dist/esm/rpc/event/EventRpcEvents.js.map +1 -0
- package/dist/esm/rpc/event/EventRpcGroup.js +59 -0
- package/dist/esm/rpc/event/EventRpcGroup.js.map +1 -0
- package/dist/esm/rpc/event/EventRpcModels.js +33 -0
- package/dist/esm/rpc/event/EventRpcModels.js.map +1 -0
- package/dist/esm/rpc/guild/GuildRpcGroup.js +29 -0
- package/dist/esm/rpc/guild/GuildRpcGroup.js.map +1 -0
- package/package.json +3 -2
- package/src/api/AgeThresholdApi.ts +12 -12
- package/src/api/Auth.ts +36 -12
- package/src/api/EventApi.ts +129 -0
- package/src/api/EventRsvpApi.ts +67 -0
- package/src/api/EventSeriesApi.ts +134 -0
- package/src/api/GroupApi.ts +229 -0
- package/src/api/NotificationApi.ts +10 -0
- package/src/api/Roster.ts +3 -2
- package/src/api/TeamSettingsApi.ts +57 -0
- package/src/api/TrainingTypeApi.ts +8 -52
- package/src/index.ts +25 -3
- package/src/models/AgeThresholdRule.ts +2 -2
- package/src/models/ChannelSyncEvent.ts +3 -3
- package/src/models/DiscordChannelMapping.ts +2 -2
- package/src/models/Event.ts +41 -0
- package/src/models/EventRsvp.ts +20 -0
- package/src/models/EventSeries.ts +36 -0
- package/src/models/GroupModel.ts +15 -0
- package/src/models/Notification.ts +2 -2
- package/src/models/Role.ts +20 -1
- package/src/models/RoleGroup.ts +8 -0
- package/src/models/Session.ts +3 -7
- package/src/models/Team.ts +2 -0
- package/src/models/TeamInvite.ts +3 -9
- package/src/models/TeamSettings.ts +10 -0
- package/src/models/TrainingType.ts +2 -0
- package/src/models/User.ts +2 -1
- package/src/rpc/SyncRpcs.ts +8 -1
- package/src/rpc/channel/ChannelRpcEvents.ts +7 -7
- package/src/rpc/channel/ChannelRpcGroup.ts +4 -4
- package/src/rpc/channel/ChannelRpcModels.ts +2 -2
- package/src/rpc/event/EventRpcEvents.ts +48 -0
- package/src/rpc/event/EventRpcGroup.ts +60 -0
- package/src/rpc/event/EventRpcModels.ts +49 -0
- package/src/rpc/guild/GuildRpcGroup.ts +29 -0
- package/dist/cjs/api/SubgroupApi.js +0 -122
- package/dist/cjs/api/SubgroupApi.js.map +0 -1
- package/dist/cjs/models/SubgroupModel.js +0 -18
- package/dist/cjs/models/SubgroupModel.js.map +0 -1
- package/dist/dts/api/SubgroupApi.d.ts +0 -140
- package/dist/dts/api/SubgroupApi.d.ts.map +0 -1
- package/dist/dts/models/SubgroupModel.d.ts.map +0 -1
- package/dist/esm/api/SubgroupApi.js +0 -106
- package/dist/esm/api/SubgroupApi.js.map +0 -1
- package/dist/esm/models/SubgroupModel.js +0 -11
- package/dist/esm/models/SubgroupModel.js.map +0 -1
- package/src/api/SubgroupApi.ts +0 -146
- package/src/models/SubgroupModel.ts +0 -13
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { AuthMiddleware } from '~/api/Auth.js';
|
|
4
|
+
import { Snowflake } from '~/models/Discord.js';
|
|
5
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
6
|
+
import { RoleId } from '~/models/Role.js';
|
|
7
|
+
import { TeamId } from '~/models/Team.js';
|
|
8
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
9
|
+
|
|
10
|
+
export class GroupInfo extends Schema.Class<GroupInfo>('GroupInfo')({
|
|
11
|
+
groupId: GroupId,
|
|
12
|
+
teamId: TeamId,
|
|
13
|
+
parentId: Schema.NullOr(GroupId),
|
|
14
|
+
name: Schema.String,
|
|
15
|
+
emoji: Schema.NullOr(Schema.String),
|
|
16
|
+
memberCount: Schema.Number,
|
|
17
|
+
}) {}
|
|
18
|
+
|
|
19
|
+
export class GroupDetail extends Schema.Class<GroupDetail>('GroupDetail')({
|
|
20
|
+
groupId: GroupId,
|
|
21
|
+
teamId: TeamId,
|
|
22
|
+
parentId: Schema.NullOr(GroupId),
|
|
23
|
+
name: Schema.String,
|
|
24
|
+
emoji: Schema.NullOr(Schema.String),
|
|
25
|
+
roles: Schema.Array(
|
|
26
|
+
Schema.Struct({
|
|
27
|
+
roleId: RoleId,
|
|
28
|
+
roleName: Schema.String,
|
|
29
|
+
}),
|
|
30
|
+
),
|
|
31
|
+
members: Schema.Array(
|
|
32
|
+
Schema.Struct({
|
|
33
|
+
memberId: TeamMemberId,
|
|
34
|
+
name: Schema.NullOr(Schema.String),
|
|
35
|
+
discordUsername: Schema.String,
|
|
36
|
+
}),
|
|
37
|
+
),
|
|
38
|
+
}) {}
|
|
39
|
+
|
|
40
|
+
export class CreateGroupRequest extends Schema.Class<CreateGroupRequest>('CreateGroupRequest')({
|
|
41
|
+
name: Schema.NonEmptyString,
|
|
42
|
+
parentId: Schema.NullOr(GroupId),
|
|
43
|
+
emoji: Schema.NullOr(Schema.String),
|
|
44
|
+
}) {}
|
|
45
|
+
|
|
46
|
+
export class UpdateGroupRequest extends Schema.Class<UpdateGroupRequest>('UpdateGroupRequest')({
|
|
47
|
+
name: Schema.NonEmptyString,
|
|
48
|
+
emoji: Schema.NullOr(Schema.String),
|
|
49
|
+
}) {}
|
|
50
|
+
|
|
51
|
+
export class AddGroupMemberRequest extends Schema.Class<AddGroupMemberRequest>(
|
|
52
|
+
'AddGroupMemberRequest',
|
|
53
|
+
)({
|
|
54
|
+
memberId: TeamMemberId,
|
|
55
|
+
}) {}
|
|
56
|
+
|
|
57
|
+
export class AssignGroupRoleRequest extends Schema.Class<AssignGroupRoleRequest>(
|
|
58
|
+
'AssignGroupRoleRequest',
|
|
59
|
+
)({
|
|
60
|
+
roleId: RoleId,
|
|
61
|
+
}) {}
|
|
62
|
+
|
|
63
|
+
export class MoveGroupRequest extends Schema.Class<MoveGroupRequest>('MoveGroupRequest')({
|
|
64
|
+
parentId: Schema.NullOr(GroupId),
|
|
65
|
+
}) {}
|
|
66
|
+
|
|
67
|
+
export class ChannelMappingInfo extends Schema.Class<ChannelMappingInfo>('ChannelMappingInfo')({
|
|
68
|
+
discordChannelId: Snowflake,
|
|
69
|
+
discordChannelName: Schema.NullOr(Schema.String),
|
|
70
|
+
discordRoleId: Schema.NullOr(Snowflake),
|
|
71
|
+
}) {}
|
|
72
|
+
|
|
73
|
+
export class SetChannelMappingRequest extends Schema.Class<SetChannelMappingRequest>(
|
|
74
|
+
'SetChannelMappingRequest',
|
|
75
|
+
)({
|
|
76
|
+
discordChannelId: Snowflake,
|
|
77
|
+
}) {}
|
|
78
|
+
|
|
79
|
+
export class DiscordChannelInfo extends Schema.Class<DiscordChannelInfo>('DiscordChannelInfo')({
|
|
80
|
+
id: Snowflake,
|
|
81
|
+
name: Schema.String,
|
|
82
|
+
type: Schema.Number,
|
|
83
|
+
parentId: Schema.NullOr(Snowflake),
|
|
84
|
+
}) {}
|
|
85
|
+
|
|
86
|
+
export class GroupNotFound extends Schema.TaggedError<GroupNotFound>()(
|
|
87
|
+
'GroupNotFound',
|
|
88
|
+
{},
|
|
89
|
+
HttpApiSchema.annotations({ status: 404 }),
|
|
90
|
+
) {}
|
|
91
|
+
|
|
92
|
+
export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
|
93
|
+
'GroupForbidden',
|
|
94
|
+
{},
|
|
95
|
+
HttpApiSchema.annotations({ status: 403 }),
|
|
96
|
+
) {}
|
|
97
|
+
|
|
98
|
+
export class MemberNotFound extends Schema.TaggedError<MemberNotFound>()(
|
|
99
|
+
'GroupMemberNotFound',
|
|
100
|
+
{},
|
|
101
|
+
HttpApiSchema.annotations({ status: 404 }),
|
|
102
|
+
) {}
|
|
103
|
+
|
|
104
|
+
export class GroupApiGroup extends HttpApiGroup.make('group')
|
|
105
|
+
.add(
|
|
106
|
+
HttpApiEndpoint.get('listGroups', '/teams/:teamId/groups')
|
|
107
|
+
.addSuccess(Schema.Array(GroupInfo))
|
|
108
|
+
.addError(Forbidden, { status: 403 })
|
|
109
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
110
|
+
.middleware(AuthMiddleware),
|
|
111
|
+
)
|
|
112
|
+
.add(
|
|
113
|
+
HttpApiEndpoint.post('createGroup', '/teams/:teamId/groups')
|
|
114
|
+
.addSuccess(GroupInfo, { status: 201 })
|
|
115
|
+
.addError(Forbidden, { status: 403 })
|
|
116
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
117
|
+
.setPayload(CreateGroupRequest)
|
|
118
|
+
.middleware(AuthMiddleware),
|
|
119
|
+
)
|
|
120
|
+
.add(
|
|
121
|
+
HttpApiEndpoint.get('getGroup', '/teams/:teamId/groups/:groupId')
|
|
122
|
+
.addSuccess(GroupDetail)
|
|
123
|
+
.addError(Forbidden, { status: 403 })
|
|
124
|
+
.addError(GroupNotFound, { status: 404 })
|
|
125
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
126
|
+
.middleware(AuthMiddleware),
|
|
127
|
+
)
|
|
128
|
+
.add(
|
|
129
|
+
HttpApiEndpoint.patch('updateGroup', '/teams/:teamId/groups/:groupId')
|
|
130
|
+
.addSuccess(GroupInfo)
|
|
131
|
+
.addError(Forbidden, { status: 403 })
|
|
132
|
+
.addError(GroupNotFound, { status: 404 })
|
|
133
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
134
|
+
.setPayload(UpdateGroupRequest)
|
|
135
|
+
.middleware(AuthMiddleware),
|
|
136
|
+
)
|
|
137
|
+
.add(
|
|
138
|
+
HttpApiEndpoint.del('deleteGroup', '/teams/:teamId/groups/:groupId')
|
|
139
|
+
.addSuccess(Schema.Void)
|
|
140
|
+
.addError(Forbidden, { status: 403 })
|
|
141
|
+
.addError(GroupNotFound, { status: 404 })
|
|
142
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
143
|
+
.middleware(AuthMiddleware),
|
|
144
|
+
)
|
|
145
|
+
.add(
|
|
146
|
+
HttpApiEndpoint.post('addGroupMember', '/teams/:teamId/groups/:groupId/members')
|
|
147
|
+
.addSuccess(Schema.Void, { status: 204 })
|
|
148
|
+
.addError(Forbidden, { status: 403 })
|
|
149
|
+
.addError(GroupNotFound, { status: 404 })
|
|
150
|
+
.addError(MemberNotFound, { status: 404 })
|
|
151
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
152
|
+
.setPayload(AddGroupMemberRequest)
|
|
153
|
+
.middleware(AuthMiddleware),
|
|
154
|
+
)
|
|
155
|
+
.add(
|
|
156
|
+
HttpApiEndpoint.del('removeGroupMember', '/teams/:teamId/groups/:groupId/members/:memberId')
|
|
157
|
+
.addSuccess(Schema.Void)
|
|
158
|
+
.addError(Forbidden, { status: 403 })
|
|
159
|
+
.addError(GroupNotFound, { status: 404 })
|
|
160
|
+
.addError(MemberNotFound, { status: 404 })
|
|
161
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId, memberId: TeamMemberId }))
|
|
162
|
+
.middleware(AuthMiddleware),
|
|
163
|
+
)
|
|
164
|
+
.add(
|
|
165
|
+
HttpApiEndpoint.post('assignGroupRole', '/teams/:teamId/groups/:groupId/roles')
|
|
166
|
+
.addSuccess(Schema.Void, { status: 204 })
|
|
167
|
+
.addError(Forbidden, { status: 403 })
|
|
168
|
+
.addError(GroupNotFound, { status: 404 })
|
|
169
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
170
|
+
.setPayload(AssignGroupRoleRequest)
|
|
171
|
+
.middleware(AuthMiddleware),
|
|
172
|
+
)
|
|
173
|
+
.add(
|
|
174
|
+
HttpApiEndpoint.del('unassignGroupRole', '/teams/:teamId/groups/:groupId/roles/:roleId')
|
|
175
|
+
.addSuccess(Schema.Void)
|
|
176
|
+
.addError(Forbidden, { status: 403 })
|
|
177
|
+
.addError(GroupNotFound, { status: 404 })
|
|
178
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId, roleId: RoleId }))
|
|
179
|
+
.middleware(AuthMiddleware),
|
|
180
|
+
)
|
|
181
|
+
.add(
|
|
182
|
+
HttpApiEndpoint.patch('moveGroup', '/teams/:teamId/groups/:groupId/parent')
|
|
183
|
+
.addSuccess(GroupInfo)
|
|
184
|
+
.addError(Forbidden, { status: 403 })
|
|
185
|
+
.addError(GroupNotFound, { status: 404 })
|
|
186
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
187
|
+
.setPayload(MoveGroupRequest)
|
|
188
|
+
.middleware(AuthMiddleware),
|
|
189
|
+
)
|
|
190
|
+
.add(
|
|
191
|
+
HttpApiEndpoint.get('getChannelMapping', '/teams/:teamId/groups/:groupId/channel-mapping')
|
|
192
|
+
.addSuccess(Schema.NullOr(ChannelMappingInfo))
|
|
193
|
+
.addError(Forbidden, { status: 403 })
|
|
194
|
+
.addError(GroupNotFound, { status: 404 })
|
|
195
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
196
|
+
.middleware(AuthMiddleware),
|
|
197
|
+
)
|
|
198
|
+
.add(
|
|
199
|
+
HttpApiEndpoint.put('setChannelMapping', '/teams/:teamId/groups/:groupId/channel-mapping')
|
|
200
|
+
.addSuccess(ChannelMappingInfo)
|
|
201
|
+
.addError(Forbidden, { status: 403 })
|
|
202
|
+
.addError(GroupNotFound, { status: 404 })
|
|
203
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
204
|
+
.setPayload(SetChannelMappingRequest)
|
|
205
|
+
.middleware(AuthMiddleware),
|
|
206
|
+
)
|
|
207
|
+
.add(
|
|
208
|
+
HttpApiEndpoint.del('deleteChannelMapping', '/teams/:teamId/groups/:groupId/channel-mapping')
|
|
209
|
+
.addSuccess(Schema.Void)
|
|
210
|
+
.addError(Forbidden, { status: 403 })
|
|
211
|
+
.addError(GroupNotFound, { status: 404 })
|
|
212
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
213
|
+
.middleware(AuthMiddleware),
|
|
214
|
+
)
|
|
215
|
+
.add(
|
|
216
|
+
HttpApiEndpoint.post('createChannel', '/teams/:teamId/groups/:groupId/create-channel')
|
|
217
|
+
.addSuccess(Schema.Void, { status: 201 })
|
|
218
|
+
.addError(Forbidden, { status: 403 })
|
|
219
|
+
.addError(GroupNotFound, { status: 404 })
|
|
220
|
+
.setPath(Schema.Struct({ teamId: TeamId, groupId: GroupId }))
|
|
221
|
+
.middleware(AuthMiddleware),
|
|
222
|
+
)
|
|
223
|
+
.add(
|
|
224
|
+
HttpApiEndpoint.get('listDiscordChannels', '/teams/:teamId/discord-channels')
|
|
225
|
+
.addSuccess(Schema.Array(DiscordChannelInfo))
|
|
226
|
+
.addError(Forbidden, { status: 403 })
|
|
227
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
228
|
+
.middleware(AuthMiddleware),
|
|
229
|
+
) {}
|
|
@@ -31,6 +31,11 @@ export class NotificationApiGroup extends HttpApiGroup.make('notification')
|
|
|
31
31
|
HttpApiEndpoint.get('listNotifications', '/notifications')
|
|
32
32
|
.addSuccess(Schema.Array(NotificationInfo))
|
|
33
33
|
.addError(Forbidden, { status: 403 })
|
|
34
|
+
.setUrlParams(
|
|
35
|
+
Schema.Struct({
|
|
36
|
+
teamId: TeamId,
|
|
37
|
+
}),
|
|
38
|
+
)
|
|
34
39
|
.middleware(AuthMiddleware),
|
|
35
40
|
)
|
|
36
41
|
.add(
|
|
@@ -45,5 +50,10 @@ export class NotificationApiGroup extends HttpApiGroup.make('notification')
|
|
|
45
50
|
HttpApiEndpoint.post('markAllAsRead', '/notifications/read-all')
|
|
46
51
|
.addSuccess(Schema.Void)
|
|
47
52
|
.addError(Forbidden, { status: 403 })
|
|
53
|
+
.setPayload(
|
|
54
|
+
Schema.Struct({
|
|
55
|
+
teamId: TeamId,
|
|
56
|
+
}),
|
|
57
|
+
)
|
|
48
58
|
.middleware(AuthMiddleware),
|
|
49
59
|
) {}
|
package/src/api/Roster.ts
CHANGED
|
@@ -10,10 +10,11 @@ import { Gender, UserId } from '~/models/User.js';
|
|
|
10
10
|
export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
|
|
11
11
|
memberId: TeamMemberId,
|
|
12
12
|
userId: UserId,
|
|
13
|
+
discordId: Schema.String,
|
|
13
14
|
roleNames: Schema.Array(Schema.String),
|
|
14
15
|
permissions: Schema.Array(Permission),
|
|
15
16
|
name: Schema.NullOr(Schema.String),
|
|
16
|
-
|
|
17
|
+
birthDate: Schema.NullOr(Schema.String),
|
|
17
18
|
gender: Schema.NullOr(Gender),
|
|
18
19
|
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
19
20
|
discordUsername: Schema.String,
|
|
@@ -22,7 +23,7 @@ export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
|
|
|
22
23
|
|
|
23
24
|
export class UpdatePlayerRequest extends Schema.Class<UpdatePlayerRequest>('UpdatePlayerRequest')({
|
|
24
25
|
name: Schema.NullOr(Schema.String),
|
|
25
|
-
|
|
26
|
+
birthDate: Schema.OptionFromNullOr(Schema.String),
|
|
26
27
|
gender: Schema.NullOr(Gender),
|
|
27
28
|
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
28
29
|
}) {}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { HttpApiEndpoint, HttpApiGroup } from '@effect/platform';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { AuthMiddleware } from '~/api/Auth.js';
|
|
4
|
+
import { Forbidden } from '~/api/EventApi.js';
|
|
5
|
+
import { TeamId } from '~/models/Team.js';
|
|
6
|
+
|
|
7
|
+
export class TeamSettingsInfo extends Schema.Class<TeamSettingsInfo>('TeamSettingsInfo')({
|
|
8
|
+
teamId: TeamId,
|
|
9
|
+
eventHorizonDays: Schema.Int,
|
|
10
|
+
discordChannelTraining: Schema.NullOr(Schema.String),
|
|
11
|
+
discordChannelMatch: Schema.NullOr(Schema.String),
|
|
12
|
+
discordChannelTournament: Schema.NullOr(Schema.String),
|
|
13
|
+
discordChannelMeeting: Schema.NullOr(Schema.String),
|
|
14
|
+
discordChannelSocial: Schema.NullOr(Schema.String),
|
|
15
|
+
discordChannelOther: Schema.NullOr(Schema.String),
|
|
16
|
+
}) {}
|
|
17
|
+
|
|
18
|
+
export class UpdateTeamSettingsRequest extends Schema.Class<UpdateTeamSettingsRequest>(
|
|
19
|
+
'UpdateTeamSettingsRequest',
|
|
20
|
+
)({
|
|
21
|
+
eventHorizonDays: Schema.Int.pipe(Schema.between(1, 365)),
|
|
22
|
+
discordChannelTraining: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
23
|
+
as: 'Option',
|
|
24
|
+
}),
|
|
25
|
+
discordChannelMatch: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
26
|
+
as: 'Option',
|
|
27
|
+
}),
|
|
28
|
+
discordChannelTournament: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
29
|
+
as: 'Option',
|
|
30
|
+
}),
|
|
31
|
+
discordChannelMeeting: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
32
|
+
as: 'Option',
|
|
33
|
+
}),
|
|
34
|
+
discordChannelSocial: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
35
|
+
as: 'Option',
|
|
36
|
+
}),
|
|
37
|
+
discordChannelOther: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
|
|
38
|
+
as: 'Option',
|
|
39
|
+
}),
|
|
40
|
+
}) {}
|
|
41
|
+
|
|
42
|
+
export class TeamSettingsApiGroup extends HttpApiGroup.make('teamSettings')
|
|
43
|
+
.add(
|
|
44
|
+
HttpApiEndpoint.get('getTeamSettings', '/teams/:teamId/settings')
|
|
45
|
+
.addSuccess(TeamSettingsInfo)
|
|
46
|
+
.addError(Forbidden, { status: 403 })
|
|
47
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
48
|
+
.middleware(AuthMiddleware),
|
|
49
|
+
)
|
|
50
|
+
.add(
|
|
51
|
+
HttpApiEndpoint.patch('updateTeamSettings', '/teams/:teamId/settings')
|
|
52
|
+
.addSuccess(TeamSettingsInfo)
|
|
53
|
+
.addError(Forbidden, { status: 403 })
|
|
54
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
55
|
+
.setPayload(UpdateTeamSettingsRequest)
|
|
56
|
+
.middleware(AuthMiddleware),
|
|
57
|
+
) {}
|
|
@@ -1,29 +1,25 @@
|
|
|
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 { GroupId } from '~/models/GroupModel.js';
|
|
4
5
|
import { TeamId } from '~/models/Team.js';
|
|
5
|
-
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
6
6
|
import { TrainingTypeId } from '~/models/TrainingType.js';
|
|
7
7
|
|
|
8
8
|
export class TrainingTypeInfo extends Schema.Class<TrainingTypeInfo>('TrainingTypeInfo')({
|
|
9
9
|
trainingTypeId: TrainingTypeId,
|
|
10
10
|
teamId: TeamId,
|
|
11
11
|
name: Schema.String,
|
|
12
|
-
|
|
12
|
+
groupName: Schema.NullOr(Schema.String),
|
|
13
13
|
}) {}
|
|
14
14
|
|
|
15
15
|
export class TrainingTypeDetail extends Schema.Class<TrainingTypeDetail>('TrainingTypeDetail')({
|
|
16
16
|
trainingTypeId: TrainingTypeId,
|
|
17
17
|
teamId: TeamId,
|
|
18
18
|
name: Schema.String,
|
|
19
|
+
groupId: Schema.NullOr(GroupId),
|
|
20
|
+
groupName: Schema.NullOr(Schema.String),
|
|
21
|
+
discordChannelId: Schema.NullOr(Schema.String),
|
|
19
22
|
canAdmin: Schema.Boolean,
|
|
20
|
-
coaches: Schema.Array(
|
|
21
|
-
Schema.Struct({
|
|
22
|
-
memberId: TeamMemberId,
|
|
23
|
-
name: Schema.NullOr(Schema.String),
|
|
24
|
-
discordUsername: Schema.String,
|
|
25
|
-
}),
|
|
26
|
-
),
|
|
27
23
|
}) {}
|
|
28
24
|
|
|
29
25
|
export class TrainingTypeListResponse extends Schema.Class<TrainingTypeListResponse>(
|
|
@@ -37,18 +33,15 @@ export class CreateTrainingTypeRequest extends Schema.Class<CreateTrainingTypeRe
|
|
|
37
33
|
'CreateTrainingTypeRequest',
|
|
38
34
|
)({
|
|
39
35
|
name: Schema.NonEmptyString,
|
|
36
|
+
groupId: Schema.NullOr(GroupId),
|
|
37
|
+
discordChannelId: Schema.NullOr(Schema.String),
|
|
40
38
|
}) {}
|
|
41
39
|
|
|
42
40
|
export class UpdateTrainingTypeRequest extends Schema.Class<UpdateTrainingTypeRequest>(
|
|
43
41
|
'UpdateTrainingTypeRequest',
|
|
44
42
|
)({
|
|
45
43
|
name: Schema.NonEmptyString,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
export class AddTrainingTypeCoachRequest extends Schema.Class<AddTrainingTypeCoachRequest>(
|
|
49
|
-
'AddTrainingTypeCoachRequest',
|
|
50
|
-
)({
|
|
51
|
-
memberId: TeamMemberId,
|
|
44
|
+
discordChannelId: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
|
|
52
45
|
}) {}
|
|
53
46
|
|
|
54
47
|
export class TrainingTypeNotFound extends Schema.TaggedError<TrainingTypeNotFound>()(
|
|
@@ -63,12 +56,6 @@ export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
|
|
63
56
|
HttpApiSchema.annotations({ status: 403 }),
|
|
64
57
|
) {}
|
|
65
58
|
|
|
66
|
-
export class MemberNotFound extends Schema.TaggedError<MemberNotFound>()(
|
|
67
|
-
'TrainingTypeMemberNotFound',
|
|
68
|
-
{},
|
|
69
|
-
HttpApiSchema.annotations({ status: 404 }),
|
|
70
|
-
) {}
|
|
71
|
-
|
|
72
59
|
export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
73
60
|
.add(
|
|
74
61
|
HttpApiEndpoint.get('listTrainingTypes', '/teams/:teamId/training-types')
|
|
@@ -109,35 +96,4 @@ export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
|
109
96
|
.addError(TrainingTypeNotFound, { status: 404 })
|
|
110
97
|
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
111
98
|
.middleware(AuthMiddleware),
|
|
112
|
-
)
|
|
113
|
-
.add(
|
|
114
|
-
HttpApiEndpoint.post(
|
|
115
|
-
'addTrainingTypeCoach',
|
|
116
|
-
'/teams/:teamId/training-types/:trainingTypeId/coaches',
|
|
117
|
-
)
|
|
118
|
-
.addSuccess(Schema.Void, { status: 204 })
|
|
119
|
-
.addError(Forbidden, { status: 403 })
|
|
120
|
-
.addError(TrainingTypeNotFound, { status: 404 })
|
|
121
|
-
.addError(MemberNotFound, { status: 404 })
|
|
122
|
-
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
123
|
-
.setPayload(AddTrainingTypeCoachRequest)
|
|
124
|
-
.middleware(AuthMiddleware),
|
|
125
|
-
)
|
|
126
|
-
.add(
|
|
127
|
-
HttpApiEndpoint.del(
|
|
128
|
-
'removeTrainingTypeCoach',
|
|
129
|
-
'/teams/:teamId/training-types/:trainingTypeId/coaches/:memberId',
|
|
130
|
-
)
|
|
131
|
-
.addSuccess(Schema.Void)
|
|
132
|
-
.addError(Forbidden, { status: 403 })
|
|
133
|
-
.addError(TrainingTypeNotFound, { status: 404 })
|
|
134
|
-
.addError(MemberNotFound, { status: 404 })
|
|
135
|
-
.setPath(
|
|
136
|
-
Schema.Struct({
|
|
137
|
-
teamId: TeamId,
|
|
138
|
-
trainingTypeId: TrainingTypeId,
|
|
139
|
-
memberId: TeamMemberId,
|
|
140
|
-
}),
|
|
141
|
-
)
|
|
142
|
-
.middleware(AuthMiddleware),
|
|
143
99
|
) {}
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,14 @@ export * as AgeThresholdApi from './api/AgeThresholdApi.js';
|
|
|
4
4
|
|
|
5
5
|
export * as Auth from './api/Auth.js';
|
|
6
6
|
|
|
7
|
+
export * as EventApi from './api/EventApi.js';
|
|
8
|
+
|
|
9
|
+
export * as EventRsvpApi from './api/EventRsvpApi.js';
|
|
10
|
+
|
|
11
|
+
export * as EventSeriesApi from './api/EventSeriesApi.js';
|
|
12
|
+
|
|
13
|
+
export * as GroupApi from './api/GroupApi.js';
|
|
14
|
+
|
|
7
15
|
export * as Invite from './api/Invite.js';
|
|
8
16
|
|
|
9
17
|
export * as NotificationApi from './api/NotificationApi.js';
|
|
@@ -12,7 +20,7 @@ export * as RoleApi from './api/RoleApi.js';
|
|
|
12
20
|
|
|
13
21
|
export * as Roster from './api/Roster.js';
|
|
14
22
|
|
|
15
|
-
export * as
|
|
23
|
+
export * as TeamSettingsApi from './api/TeamSettingsApi.js';
|
|
16
24
|
|
|
17
25
|
export * as TrainingTypeApi from './api/TrainingTypeApi.js';
|
|
18
26
|
|
|
@@ -26,12 +34,22 @@ export * as DiscordChannelMapping from './models/DiscordChannelMapping.js';
|
|
|
26
34
|
|
|
27
35
|
export * as DiscordRoleMapping from './models/DiscordRoleMapping.js';
|
|
28
36
|
|
|
37
|
+
export * as Event from './models/Event.js';
|
|
38
|
+
|
|
39
|
+
export * as EventRsvp from './models/EventRsvp.js';
|
|
40
|
+
|
|
41
|
+
export * as EventSeries from './models/EventSeries.js';
|
|
42
|
+
|
|
43
|
+
export * as GroupModel from './models/GroupModel.js';
|
|
44
|
+
|
|
29
45
|
export * as MemberRole from './models/MemberRole.js';
|
|
30
46
|
|
|
31
47
|
export * as Notification from './models/Notification.js';
|
|
32
48
|
|
|
33
49
|
export * as Role from './models/Role.js';
|
|
34
50
|
|
|
51
|
+
export * as RoleGroup from './models/RoleGroup.js';
|
|
52
|
+
|
|
35
53
|
export * as RoleSyncEvent from './models/RoleSyncEvent.js';
|
|
36
54
|
|
|
37
55
|
export * as RosterMemberModel from './models/RosterMemberModel.js';
|
|
@@ -40,20 +58,24 @@ export * as RosterModel from './models/RosterModel.js';
|
|
|
40
58
|
|
|
41
59
|
export * as Session from './models/Session.js';
|
|
42
60
|
|
|
43
|
-
export * as SubgroupModel from './models/SubgroupModel.js';
|
|
44
|
-
|
|
45
61
|
export * as Team from './models/Team.js';
|
|
46
62
|
|
|
47
63
|
export * as TeamInvite from './models/TeamInvite.js';
|
|
48
64
|
|
|
49
65
|
export * as TeamMember from './models/TeamMember.js';
|
|
50
66
|
|
|
67
|
+
export * as TeamSettings from './models/TeamSettings.js';
|
|
68
|
+
|
|
51
69
|
export * as TrainingType from './models/TrainingType.js';
|
|
52
70
|
|
|
53
71
|
export * as User from './models/User.js';
|
|
54
72
|
export * as ChannelRpcEvents from './rpc/channel/ChannelRpcEvents.js';
|
|
55
73
|
export * as ChannelRpcGroup from './rpc/channel/ChannelRpcGroup.js';
|
|
56
74
|
export * as ChannelRpcModels from './rpc/channel/ChannelRpcModels.js';
|
|
75
|
+
export * as EventRpcEvents from './rpc/event/EventRpcEvents.js';
|
|
76
|
+
export * as EventRpcGroup from './rpc/event/EventRpcGroup.js';
|
|
77
|
+
export * as EventRpcModels from './rpc/event/EventRpcModels.js';
|
|
78
|
+
export * as GuildRpcGroup from './rpc/guild/GuildRpcGroup.js';
|
|
57
79
|
export * as RoleRpcEvents from './rpc/role/RoleRpcEvents.js';
|
|
58
80
|
export * as RoleRpcGroup from './rpc/role/RoleRpcGroup.js';
|
|
59
81
|
export * as RoleRpcModels from './rpc/role/RoleRpcModels.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Model } from '@effect/sql';
|
|
2
2
|
import { Schema } from 'effect';
|
|
3
|
-
import {
|
|
3
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
4
4
|
import { TeamId } from '~/models/Team.js';
|
|
5
5
|
|
|
6
6
|
export const AgeThresholdRuleId = Schema.String.pipe(Schema.brand('AgeThresholdRuleId'));
|
|
@@ -9,7 +9,7 @@ export type AgeThresholdRuleId = typeof AgeThresholdRuleId.Type;
|
|
|
9
9
|
export class AgeThresholdRule extends Model.Class<AgeThresholdRule>('AgeThresholdRule')({
|
|
10
10
|
id: Model.Generated(AgeThresholdRuleId),
|
|
11
11
|
team_id: TeamId,
|
|
12
|
-
|
|
12
|
+
group_id: GroupId,
|
|
13
13
|
min_age: Schema.NullOr(Schema.Number),
|
|
14
14
|
max_age: Schema.NullOr(Schema.Number),
|
|
15
15
|
created_at: Model.DateTimeInsertFromDate,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Model } from '@effect/sql';
|
|
2
2
|
import { Schema } from 'effect';
|
|
3
|
-
import {
|
|
3
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
4
4
|
import { TeamId } from '~/models/Team.js';
|
|
5
5
|
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
6
6
|
|
|
@@ -20,8 +20,8 @@ export class ChannelSyncEvent extends Model.Class<ChannelSyncEvent>('ChannelSync
|
|
|
20
20
|
team_id: TeamId,
|
|
21
21
|
guild_id: Schema.String,
|
|
22
22
|
event_type: ChannelSyncEventType,
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
group_id: GroupId,
|
|
24
|
+
group_name: Schema.NullOr(Schema.String),
|
|
25
25
|
team_member_id: Schema.NullOr(TeamMemberId),
|
|
26
26
|
discord_user_id: Schema.NullOr(Schema.String),
|
|
27
27
|
processed_at: Schema.NullOr(Schema.String),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Model } from '@effect/sql';
|
|
2
2
|
import { Schema } from 'effect';
|
|
3
|
-
import {
|
|
3
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
4
4
|
import { TeamId } from '~/models/Team.js';
|
|
5
5
|
|
|
6
6
|
export const DiscordChannelMappingId = Schema.String.pipe(Schema.brand('DiscordChannelMappingId'));
|
|
@@ -11,7 +11,7 @@ export class DiscordChannelMapping extends Model.Class<DiscordChannelMapping>(
|
|
|
11
11
|
)({
|
|
12
12
|
id: Model.Generated(DiscordChannelMappingId),
|
|
13
13
|
team_id: TeamId,
|
|
14
|
-
|
|
14
|
+
group_id: GroupId,
|
|
15
15
|
discord_channel_id: Schema.String,
|
|
16
16
|
discord_role_id: Schema.OptionFromNullOr(Schema.String),
|
|
17
17
|
created_at: Model.DateTimeInsertFromDate,
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import * as Schemas from '@sideline/effect-lib/Schemas';
|
|
3
|
+
import { Schema } from 'effect';
|
|
4
|
+
import { EventSeriesId } from '~/models/EventSeries.js';
|
|
5
|
+
import { TeamId } from '~/models/Team.js';
|
|
6
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
7
|
+
import { TrainingTypeId } from '~/models/TrainingType.js';
|
|
8
|
+
|
|
9
|
+
export const EventId = Schema.String.pipe(Schema.brand('EventId'));
|
|
10
|
+
export type EventId = typeof EventId.Type;
|
|
11
|
+
|
|
12
|
+
export const EventType = Schema.Literal(
|
|
13
|
+
'training',
|
|
14
|
+
'match',
|
|
15
|
+
'tournament',
|
|
16
|
+
'meeting',
|
|
17
|
+
'social',
|
|
18
|
+
'other',
|
|
19
|
+
);
|
|
20
|
+
export type EventType = typeof EventType.Type;
|
|
21
|
+
|
|
22
|
+
export const EventStatus = Schema.Literal('active', 'cancelled');
|
|
23
|
+
export type EventStatus = typeof EventStatus.Type;
|
|
24
|
+
|
|
25
|
+
export class Event extends Model.Class<Event>('Event')({
|
|
26
|
+
id: Model.Generated(EventId),
|
|
27
|
+
team_id: TeamId,
|
|
28
|
+
training_type_id: Schema.NullOr(TrainingTypeId),
|
|
29
|
+
event_type: EventType,
|
|
30
|
+
title: Schema.String,
|
|
31
|
+
description: Schema.NullOr(Schema.String),
|
|
32
|
+
start_at: Schemas.DateTimeFromDate,
|
|
33
|
+
end_at: Schema.NullOr(Schemas.DateTimeFromDate),
|
|
34
|
+
location: Schema.NullOr(Schema.String),
|
|
35
|
+
series_id: Schema.NullOr(EventSeriesId),
|
|
36
|
+
series_modified: Schema.Boolean,
|
|
37
|
+
status: Model.FieldExcept('update')(EventStatus),
|
|
38
|
+
created_by: TeamMemberId,
|
|
39
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
40
|
+
updated_at: Model.DateTimeUpdateFromDate,
|
|
41
|
+
}) {}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { EventId } from '~/models/Event.js';
|
|
4
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
5
|
+
|
|
6
|
+
export const EventRsvpId = Schema.String.pipe(Schema.brand('EventRsvpId'));
|
|
7
|
+
export type EventRsvpId = typeof EventRsvpId.Type;
|
|
8
|
+
|
|
9
|
+
export const RsvpResponse = Schema.Literal('yes', 'no', 'maybe');
|
|
10
|
+
export type RsvpResponse = typeof RsvpResponse.Type;
|
|
11
|
+
|
|
12
|
+
export class EventRsvp extends Model.Class<EventRsvp>('EventRsvp')({
|
|
13
|
+
id: Model.Generated(EventRsvpId),
|
|
14
|
+
event_id: EventId,
|
|
15
|
+
team_member_id: TeamMemberId,
|
|
16
|
+
response: RsvpResponse,
|
|
17
|
+
message: Schema.NullOr(Schema.String),
|
|
18
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
19
|
+
updated_at: Model.DateTimeUpdateFromDate,
|
|
20
|
+
}) {}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { TeamId } from '~/models/Team.js';
|
|
4
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
5
|
+
import { TrainingTypeId } from '~/models/TrainingType.js';
|
|
6
|
+
|
|
7
|
+
export const EventSeriesId = Schema.String.pipe(Schema.brand('EventSeriesId'));
|
|
8
|
+
export type EventSeriesId = typeof EventSeriesId.Type;
|
|
9
|
+
|
|
10
|
+
export const RecurrenceFrequency = Schema.Literal('weekly', 'biweekly');
|
|
11
|
+
export type RecurrenceFrequency = typeof RecurrenceFrequency.Type;
|
|
12
|
+
|
|
13
|
+
export const DayOfWeek = Schema.Int.pipe(Schema.between(0, 6), Schema.brand('DayOfWeek'));
|
|
14
|
+
export type DayOfWeek = typeof DayOfWeek.Type;
|
|
15
|
+
|
|
16
|
+
export const EventSeriesStatus = Schema.Literal('active', 'cancelled');
|
|
17
|
+
export type EventSeriesStatus = typeof EventSeriesStatus.Type;
|
|
18
|
+
|
|
19
|
+
export class EventSeries extends Model.Class<EventSeries>('EventSeries')({
|
|
20
|
+
id: Model.Generated(EventSeriesId),
|
|
21
|
+
team_id: TeamId,
|
|
22
|
+
training_type_id: Schema.NullOr(TrainingTypeId),
|
|
23
|
+
title: Schema.String,
|
|
24
|
+
description: Schema.NullOr(Schema.String),
|
|
25
|
+
start_time: Schema.String,
|
|
26
|
+
end_time: Schema.NullOr(Schema.String),
|
|
27
|
+
location: Schema.NullOr(Schema.String),
|
|
28
|
+
frequency: RecurrenceFrequency,
|
|
29
|
+
day_of_week: DayOfWeek,
|
|
30
|
+
start_date: Schema.DateFromSelf,
|
|
31
|
+
end_date: Schema.NullOr(Schema.DateFromSelf),
|
|
32
|
+
status: Model.FieldExcept('update')(EventSeriesStatus),
|
|
33
|
+
created_by: TeamMemberId,
|
|
34
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
35
|
+
updated_at: Model.DateTimeUpdateFromDate,
|
|
36
|
+
}) {}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { TeamId } from '~/models/Team.js';
|
|
4
|
+
|
|
5
|
+
export const GroupId = Schema.String.pipe(Schema.brand('GroupId'));
|
|
6
|
+
export type GroupId = typeof GroupId.Type;
|
|
7
|
+
|
|
8
|
+
export class Group extends Model.Class<Group>('Group')({
|
|
9
|
+
id: Model.Generated(GroupId),
|
|
10
|
+
team_id: TeamId,
|
|
11
|
+
parent_id: Schema.NullOr(GroupId),
|
|
12
|
+
name: Schema.String,
|
|
13
|
+
emoji: Schema.NullOr(Schema.String),
|
|
14
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
15
|
+
}) {}
|