@sideline/domain 0.3.0 → 0.5.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 +20 -20
- package/dist/cjs/api/AgeThresholdApi.js.map +1 -1
- package/dist/cjs/api/Auth.js +16 -15
- package/dist/cjs/api/Auth.js.map +1 -1
- 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 +1 -5
- package/dist/cjs/api/Roster.js.map +1 -1
- package/dist/cjs/api/TrainingTypeApi.js +84 -0
- package/dist/cjs/api/TrainingTypeApi.js.map +1 -0
- package/dist/cjs/index.js +33 -7
- package/dist/cjs/models/AgeThresholdRule.js +2 -2
- package/dist/cjs/models/AgeThresholdRule.js.map +1 -1
- package/dist/cjs/models/ChannelSyncEvent.js +28 -0
- package/dist/cjs/models/ChannelSyncEvent.js.map +1 -0
- package/dist/cjs/models/Discord.js +9 -0
- package/dist/cjs/models/Discord.js.map +1 -0
- package/dist/cjs/models/DiscordChannelMapping.js +21 -0
- package/dist/cjs/models/DiscordChannelMapping.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 +2 -2
- 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/Team.js +2 -0
- package/dist/cjs/models/Team.js.map +1 -1
- package/dist/cjs/models/TeamMember.js +1 -0
- package/dist/cjs/models/TeamMember.js.map +1 -1
- package/dist/cjs/models/TrainingType.js +20 -0
- package/dist/cjs/models/TrainingType.js.map +1 -0
- package/dist/cjs/models/User.js +1 -6
- package/dist/cjs/models/User.js.map +1 -1
- package/dist/cjs/rpc/SyncRpcs.js +13 -0
- package/dist/cjs/rpc/SyncRpcs.js.map +1 -0
- package/dist/cjs/rpc/channel/ChannelRpcEvents.js +44 -0
- package/dist/cjs/rpc/channel/ChannelRpcEvents.js.map +1 -0
- package/dist/cjs/rpc/channel/ChannelRpcGroup.js +45 -0
- package/dist/cjs/rpc/channel/ChannelRpcGroup.js.map +1 -0
- package/dist/cjs/rpc/channel/ChannelRpcModels.js +17 -0
- package/dist/cjs/rpc/channel/ChannelRpcModels.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/cjs/rpc/role/RoleRpcEvents.js +44 -0
- package/dist/cjs/rpc/role/RoleRpcEvents.js.map +1 -0
- package/dist/cjs/rpc/role/RoleRpcGroup.js +44 -0
- package/dist/cjs/rpc/role/RoleRpcGroup.js.map +1 -0
- package/dist/cjs/rpc/role/RoleRpcModels.js +16 -0
- package/dist/cjs/rpc/role/RoleRpcModels.js.map +1 -0
- package/dist/dts/api/AgeThresholdApi.d.ts +43 -43
- package/dist/dts/api/AgeThresholdApi.d.ts.map +1 -1
- package/dist/dts/api/Auth.d.ts +33 -44
- package/dist/dts/api/Auth.d.ts.map +1 -1
- 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 +9 -5
- 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 +7 -23
- package/dist/dts/api/Roster.d.ts.map +1 -1
- package/dist/dts/api/TrainingTypeApi.d.ts +116 -0
- package/dist/dts/api/TrainingTypeApi.d.ts.map +1 -0
- package/dist/dts/index.d.ts +16 -3
- 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 +164 -0
- package/dist/dts/models/ChannelSyncEvent.d.ts.map +1 -0
- package/dist/dts/models/Discord.d.ts +4 -0
- package/dist/dts/models/Discord.d.ts.map +1 -0
- package/dist/dts/models/DiscordChannelMapping.d.ts +97 -0
- package/dist/dts/models/DiscordChannelMapping.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 +12 -12
- 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/Team.d.ts +13 -0
- package/dist/dts/models/Team.d.ts.map +1 -1
- package/dist/dts/models/TeamMember.d.ts +30 -0
- package/dist/dts/models/TeamMember.d.ts.map +1 -1
- package/dist/dts/models/{SubgroupModel.d.ts → TrainingType.d.ts} +26 -13
- package/dist/dts/models/TrainingType.d.ts.map +1 -0
- package/dist/dts/models/User.d.ts +0 -43
- package/dist/dts/models/User.d.ts.map +1 -1
- package/dist/dts/rpc/SyncRpcs.d.ts +56 -0
- package/dist/dts/rpc/SyncRpcs.d.ts.map +1 -0
- package/dist/dts/rpc/channel/ChannelRpcEvents.d.ts +51 -0
- package/dist/dts/rpc/channel/ChannelRpcEvents.d.ts.map +1 -0
- package/dist/dts/rpc/channel/ChannelRpcGroup.d.ts +23 -0
- package/dist/dts/rpc/channel/ChannelRpcGroup.d.ts.map +1 -0
- package/dist/dts/rpc/channel/ChannelRpcModels.d.ts +28 -0
- package/dist/dts/rpc/channel/ChannelRpcModels.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/dts/rpc/role/RoleRpcEvents.d.ts +51 -0
- package/dist/dts/rpc/role/RoleRpcEvents.d.ts.map +1 -0
- package/dist/dts/rpc/role/RoleRpcGroup.d.ts +22 -0
- package/dist/dts/rpc/role/RoleRpcGroup.d.ts.map +1 -0
- package/dist/dts/rpc/role/RoleRpcModels.d.ts +24 -0
- package/dist/dts/rpc/role/RoleRpcModels.d.ts.map +1 -0
- package/dist/esm/api/AgeThresholdApi.js +17 -17
- package/dist/esm/api/AgeThresholdApi.js.map +1 -1
- package/dist/esm/api/Auth.js +15 -15
- package/dist/esm/api/Auth.js.map +1 -1
- 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 +2 -6
- package/dist/esm/api/Roster.js.map +1 -1
- package/dist/esm/api/TrainingTypeApi.js +70 -0
- package/dist/esm/api/TrainingTypeApi.js.map +1 -0
- package/dist/esm/index.js +16 -3
- 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 +21 -0
- package/dist/esm/models/ChannelSyncEvent.js.map +1 -0
- package/dist/esm/models/Discord.js +3 -0
- package/dist/esm/models/Discord.js.map +1 -0
- package/dist/esm/models/DiscordChannelMapping.js +14 -0
- package/dist/esm/models/DiscordChannelMapping.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 +2 -2
- 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/Team.js +2 -0
- package/dist/esm/models/Team.js.map +1 -1
- package/dist/esm/models/TeamMember.js +1 -0
- package/dist/esm/models/TeamMember.js.map +1 -1
- package/dist/esm/models/TrainingType.js +13 -0
- package/dist/esm/models/TrainingType.js.map +1 -0
- package/dist/esm/models/User.js +0 -5
- package/dist/esm/models/User.js.map +1 -1
- package/dist/esm/rpc/SyncRpcs.js +6 -0
- package/dist/esm/rpc/SyncRpcs.js.map +1 -0
- package/dist/esm/rpc/channel/ChannelRpcEvents.js +34 -0
- package/dist/esm/rpc/channel/ChannelRpcEvents.js.map +1 -0
- package/dist/esm/rpc/channel/ChannelRpcGroup.js +39 -0
- package/dist/esm/rpc/channel/ChannelRpcGroup.js.map +1 -0
- package/dist/esm/rpc/channel/ChannelRpcModels.js +10 -0
- package/dist/esm/rpc/channel/ChannelRpcModels.js.map +1 -0
- package/dist/esm/rpc/guild/GuildRpcGroup.js +29 -0
- package/dist/esm/rpc/guild/GuildRpcGroup.js.map +1 -0
- package/dist/esm/rpc/role/RoleRpcEvents.js +34 -0
- package/dist/esm/rpc/role/RoleRpcEvents.js.map +1 -0
- package/dist/esm/rpc/role/RoleRpcGroup.js +38 -0
- package/dist/esm/rpc/role/RoleRpcGroup.js.map +1 -0
- package/dist/esm/rpc/role/RoleRpcModels.js +9 -0
- package/dist/esm/rpc/role/RoleRpcModels.js.map +1 -0
- package/package.json +1 -1
- package/src/api/AgeThresholdApi.ts +18 -18
- package/src/api/Auth.ts +17 -12
- package/src/api/GroupApi.ts +229 -0
- package/src/api/NotificationApi.ts +10 -0
- package/src/api/Roster.ts +1 -5
- package/src/api/TrainingTypeApi.ts +96 -0
- package/src/index.ts +23 -5
- package/src/models/AgeThresholdRule.ts +2 -2
- package/src/models/ChannelSyncEvent.ts +30 -0
- package/src/models/Discord.ts +4 -0
- package/src/models/DiscordChannelMapping.ts +18 -0
- package/src/models/GroupModel.ts +15 -0
- package/src/models/Notification.ts +2 -2
- package/src/models/Role.ts +4 -0
- package/src/models/RoleGroup.ts +8 -0
- package/src/models/Team.ts +2 -0
- package/src/models/TeamMember.ts +1 -0
- package/src/models/TrainingType.ts +15 -0
- package/src/models/User.ts +0 -9
- package/src/rpc/SyncRpcs.ts +6 -0
- package/src/rpc/channel/ChannelRpcEvents.ts +57 -0
- package/src/rpc/channel/ChannelRpcGroup.ts +33 -0
- package/src/rpc/channel/ChannelRpcModels.ts +10 -0
- package/src/rpc/guild/GuildRpcGroup.ts +29 -0
- package/src/rpc/role/RoleRpcEvents.ts +48 -0
- package/src/rpc/role/RoleRpcGroup.ts +33 -0
- package/src/rpc/role/RoleRpcModels.ts +9 -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/cjs/rpc/RoleSyncRpc.js +0 -66
- package/dist/cjs/rpc/RoleSyncRpc.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/dts/rpc/RoleSyncRpc.d.ts +0 -82
- package/dist/dts/rpc/RoleSyncRpc.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/dist/esm/rpc/RoleSyncRpc.js +0 -57
- package/dist/esm/rpc/RoleSyncRpc.js.map +0 -1
- package/src/api/SubgroupApi.ts +0 -146
- package/src/models/SubgroupModel.ts +0 -13
- package/src/rpc/RoleSyncRpc.ts +0 -59
package/src/api/Auth.ts
CHANGED
|
@@ -6,9 +6,10 @@ import {
|
|
|
6
6
|
HttpApiSecurity,
|
|
7
7
|
} from '@effect/platform';
|
|
8
8
|
import { Context, Schema } from 'effect';
|
|
9
|
+
import { Snowflake } from '~/models/Discord.js';
|
|
9
10
|
import { Permission } from '~/models/Role.js';
|
|
10
11
|
import { TeamId } from '~/models/Team.js';
|
|
11
|
-
import { Gender, Locale,
|
|
12
|
+
import { Gender, Locale, UserId } from '~/models/User.js';
|
|
12
13
|
|
|
13
14
|
export { UserId } from '~/models/User.js';
|
|
14
15
|
|
|
@@ -30,9 +31,6 @@ export class CurrentUser extends Schema.Class<CurrentUser>('CurrentUser')({
|
|
|
30
31
|
name: Schema.NullOr(Schema.String),
|
|
31
32
|
birthYear: Schema.NullOr(Schema.Number),
|
|
32
33
|
gender: Schema.NullOr(Gender),
|
|
33
|
-
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
34
|
-
position: Schema.NullOr(Position),
|
|
35
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
36
34
|
locale: Locale,
|
|
37
35
|
}) {}
|
|
38
36
|
|
|
@@ -42,6 +40,15 @@ export class UpdateLocaleRequest extends Schema.Class<UpdateLocaleRequest>('Upda
|
|
|
42
40
|
|
|
43
41
|
export class CreateTeamRequest extends Schema.Class<CreateTeamRequest>('CreateTeamRequest')({
|
|
44
42
|
name: Schema.String.pipe(Schema.minLength(1), Schema.maxLength(100)),
|
|
43
|
+
guildId: Snowflake,
|
|
44
|
+
}) {}
|
|
45
|
+
|
|
46
|
+
export class DiscordGuild extends Schema.Class<DiscordGuild>('DiscordGuild')({
|
|
47
|
+
id: Snowflake,
|
|
48
|
+
name: Schema.String,
|
|
49
|
+
icon: Schema.NullOr(Schema.String),
|
|
50
|
+
owner: Schema.Boolean,
|
|
51
|
+
botPresent: Schema.Boolean,
|
|
45
52
|
}) {}
|
|
46
53
|
|
|
47
54
|
export class CompleteProfileRequest extends Schema.Class<CompleteProfileRequest>(
|
|
@@ -56,11 +63,6 @@ export class CompleteProfileRequest extends Schema.Class<CompleteProfileRequest>
|
|
|
56
63
|
}),
|
|
57
64
|
),
|
|
58
65
|
gender: Gender,
|
|
59
|
-
jerseyNumber: Schema.optionalWith(Schema.Number.pipe(Schema.int(), Schema.between(0, 99)), {
|
|
60
|
-
as: 'Option',
|
|
61
|
-
}),
|
|
62
|
-
position: Position,
|
|
63
|
-
proficiency: Proficiency,
|
|
64
66
|
}) {}
|
|
65
67
|
|
|
66
68
|
export class UpdateProfileRequest extends Schema.Class<UpdateProfileRequest>(
|
|
@@ -77,9 +79,6 @@ export class UpdateProfileRequest extends Schema.Class<UpdateProfileRequest>(
|
|
|
77
79
|
),
|
|
78
80
|
),
|
|
79
81
|
gender: Schema.NullOr(Gender),
|
|
80
|
-
jerseyNumber: Schema.NullOr(Schema.Number.pipe(Schema.int(), Schema.between(0, 99))),
|
|
81
|
-
position: Schema.NullOr(Position),
|
|
82
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
83
82
|
}) {}
|
|
84
83
|
|
|
85
84
|
export class Unauthorized extends Schema.TaggedError<Unauthorized>()(
|
|
@@ -146,6 +145,12 @@ export class AuthApiGroup extends HttpApiGroup.make('auth')
|
|
|
146
145
|
.addError(Unauthorized, { status: 401 })
|
|
147
146
|
.middleware(AuthMiddleware),
|
|
148
147
|
)
|
|
148
|
+
.add(
|
|
149
|
+
HttpApiEndpoint.get('myGuilds', '/me/guilds')
|
|
150
|
+
.addSuccess(Schema.Array(DiscordGuild))
|
|
151
|
+
.addError(Unauthorized, { status: 401 })
|
|
152
|
+
.middleware(AuthMiddleware),
|
|
153
|
+
)
|
|
149
154
|
.add(
|
|
150
155
|
HttpApiEndpoint.post('createTeam', '/me/teams')
|
|
151
156
|
.addSuccess(UserTeam)
|
|
@@ -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
|
@@ -5,7 +5,7 @@ import { Permission } from '~/models/Role.js';
|
|
|
5
5
|
import { RosterId } from '~/models/RosterModel.js';
|
|
6
6
|
import { TeamId } from '~/models/Team.js';
|
|
7
7
|
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
8
|
-
import { Gender,
|
|
8
|
+
import { Gender, UserId } from '~/models/User.js';
|
|
9
9
|
|
|
10
10
|
export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
|
|
11
11
|
memberId: TeamMemberId,
|
|
@@ -16,8 +16,6 @@ export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
|
|
|
16
16
|
birthYear: Schema.NullOr(Schema.Number),
|
|
17
17
|
gender: Schema.NullOr(Gender),
|
|
18
18
|
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
19
|
-
position: Schema.NullOr(Position),
|
|
20
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
21
19
|
discordUsername: Schema.String,
|
|
22
20
|
discordAvatar: Schema.NullOr(Schema.String),
|
|
23
21
|
}) {}
|
|
@@ -27,8 +25,6 @@ export class UpdatePlayerRequest extends Schema.Class<UpdatePlayerRequest>('Upda
|
|
|
27
25
|
birthYear: Schema.NullOr(Schema.Number),
|
|
28
26
|
gender: Schema.NullOr(Gender),
|
|
29
27
|
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
30
|
-
position: Schema.NullOr(Position),
|
|
31
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
32
28
|
}) {}
|
|
33
29
|
|
|
34
30
|
export class PlayerNotFound extends Schema.TaggedError<PlayerNotFound>()(
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { AuthMiddleware } from '~/api/Auth.js';
|
|
4
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
5
|
+
import { TeamId } from '~/models/Team.js';
|
|
6
|
+
import { TrainingTypeId } from '~/models/TrainingType.js';
|
|
7
|
+
|
|
8
|
+
export class TrainingTypeInfo extends Schema.Class<TrainingTypeInfo>('TrainingTypeInfo')({
|
|
9
|
+
trainingTypeId: TrainingTypeId,
|
|
10
|
+
teamId: TeamId,
|
|
11
|
+
name: Schema.String,
|
|
12
|
+
groupName: Schema.NullOr(Schema.String),
|
|
13
|
+
}) {}
|
|
14
|
+
|
|
15
|
+
export class TrainingTypeDetail extends Schema.Class<TrainingTypeDetail>('TrainingTypeDetail')({
|
|
16
|
+
trainingTypeId: TrainingTypeId,
|
|
17
|
+
teamId: TeamId,
|
|
18
|
+
name: Schema.String,
|
|
19
|
+
groupId: Schema.NullOr(GroupId),
|
|
20
|
+
groupName: Schema.NullOr(Schema.String),
|
|
21
|
+
canAdmin: Schema.Boolean,
|
|
22
|
+
}) {}
|
|
23
|
+
|
|
24
|
+
export class TrainingTypeListResponse extends Schema.Class<TrainingTypeListResponse>(
|
|
25
|
+
'TrainingTypeListResponse',
|
|
26
|
+
)({
|
|
27
|
+
canAdmin: Schema.Boolean,
|
|
28
|
+
trainingTypes: Schema.Array(TrainingTypeInfo),
|
|
29
|
+
}) {}
|
|
30
|
+
|
|
31
|
+
export class CreateTrainingTypeRequest extends Schema.Class<CreateTrainingTypeRequest>(
|
|
32
|
+
'CreateTrainingTypeRequest',
|
|
33
|
+
)({
|
|
34
|
+
name: Schema.NonEmptyString,
|
|
35
|
+
groupId: Schema.NullOr(GroupId),
|
|
36
|
+
}) {}
|
|
37
|
+
|
|
38
|
+
export class UpdateTrainingTypeRequest extends Schema.Class<UpdateTrainingTypeRequest>(
|
|
39
|
+
'UpdateTrainingTypeRequest',
|
|
40
|
+
)({
|
|
41
|
+
name: Schema.NonEmptyString,
|
|
42
|
+
}) {}
|
|
43
|
+
|
|
44
|
+
export class TrainingTypeNotFound extends Schema.TaggedError<TrainingTypeNotFound>()(
|
|
45
|
+
'TrainingTypeNotFound',
|
|
46
|
+
{},
|
|
47
|
+
HttpApiSchema.annotations({ status: 404 }),
|
|
48
|
+
) {}
|
|
49
|
+
|
|
50
|
+
export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
|
51
|
+
'TrainingTypeForbidden',
|
|
52
|
+
{},
|
|
53
|
+
HttpApiSchema.annotations({ status: 403 }),
|
|
54
|
+
) {}
|
|
55
|
+
|
|
56
|
+
export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
57
|
+
.add(
|
|
58
|
+
HttpApiEndpoint.get('listTrainingTypes', '/teams/:teamId/training-types')
|
|
59
|
+
.addSuccess(TrainingTypeListResponse)
|
|
60
|
+
.addError(Forbidden, { status: 403 })
|
|
61
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
62
|
+
.middleware(AuthMiddleware),
|
|
63
|
+
)
|
|
64
|
+
.add(
|
|
65
|
+
HttpApiEndpoint.post('createTrainingType', '/teams/:teamId/training-types')
|
|
66
|
+
.addSuccess(TrainingTypeInfo, { status: 201 })
|
|
67
|
+
.addError(Forbidden, { status: 403 })
|
|
68
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
69
|
+
.setPayload(CreateTrainingTypeRequest)
|
|
70
|
+
.middleware(AuthMiddleware),
|
|
71
|
+
)
|
|
72
|
+
.add(
|
|
73
|
+
HttpApiEndpoint.get('getTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
74
|
+
.addSuccess(TrainingTypeDetail)
|
|
75
|
+
.addError(Forbidden, { status: 403 })
|
|
76
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
77
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
78
|
+
.middleware(AuthMiddleware),
|
|
79
|
+
)
|
|
80
|
+
.add(
|
|
81
|
+
HttpApiEndpoint.patch('updateTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
82
|
+
.addSuccess(TrainingTypeInfo)
|
|
83
|
+
.addError(Forbidden, { status: 403 })
|
|
84
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
85
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
86
|
+
.setPayload(UpdateTrainingTypeRequest)
|
|
87
|
+
.middleware(AuthMiddleware),
|
|
88
|
+
)
|
|
89
|
+
.add(
|
|
90
|
+
HttpApiEndpoint.del('deleteTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
91
|
+
.addSuccess(Schema.Void)
|
|
92
|
+
.addError(Forbidden, { status: 403 })
|
|
93
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
94
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
95
|
+
.middleware(AuthMiddleware),
|
|
96
|
+
) {}
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,8 @@ export * as AgeThresholdApi from './api/AgeThresholdApi.js';
|
|
|
4
4
|
|
|
5
5
|
export * as Auth from './api/Auth.js';
|
|
6
6
|
|
|
7
|
+
export * as GroupApi from './api/GroupApi.js';
|
|
8
|
+
|
|
7
9
|
export * as Invite from './api/Invite.js';
|
|
8
10
|
|
|
9
11
|
export * as NotificationApi from './api/NotificationApi.js';
|
|
@@ -12,18 +14,28 @@ export * as RoleApi from './api/RoleApi.js';
|
|
|
12
14
|
|
|
13
15
|
export * as Roster from './api/Roster.js';
|
|
14
16
|
|
|
15
|
-
export * as
|
|
17
|
+
export * as TrainingTypeApi from './api/TrainingTypeApi.js';
|
|
16
18
|
|
|
17
19
|
export * as AgeThresholdRule from './models/AgeThresholdRule.js';
|
|
18
20
|
|
|
21
|
+
export * as ChannelSyncEvent from './models/ChannelSyncEvent.js';
|
|
22
|
+
|
|
23
|
+
export * as Discord from './models/Discord.js';
|
|
24
|
+
|
|
25
|
+
export * as DiscordChannelMapping from './models/DiscordChannelMapping.js';
|
|
26
|
+
|
|
19
27
|
export * as DiscordRoleMapping from './models/DiscordRoleMapping.js';
|
|
20
28
|
|
|
29
|
+
export * as GroupModel from './models/GroupModel.js';
|
|
30
|
+
|
|
21
31
|
export * as MemberRole from './models/MemberRole.js';
|
|
22
32
|
|
|
23
33
|
export * as Notification from './models/Notification.js';
|
|
24
34
|
|
|
25
35
|
export * as Role from './models/Role.js';
|
|
26
36
|
|
|
37
|
+
export * as RoleGroup from './models/RoleGroup.js';
|
|
38
|
+
|
|
27
39
|
export * as RoleSyncEvent from './models/RoleSyncEvent.js';
|
|
28
40
|
|
|
29
41
|
export * as RosterMemberModel from './models/RosterMemberModel.js';
|
|
@@ -32,14 +44,20 @@ export * as RosterModel from './models/RosterModel.js';
|
|
|
32
44
|
|
|
33
45
|
export * as Session from './models/Session.js';
|
|
34
46
|
|
|
35
|
-
export * as SubgroupModel from './models/SubgroupModel.js';
|
|
36
|
-
|
|
37
47
|
export * as Team from './models/Team.js';
|
|
38
48
|
|
|
39
49
|
export * as TeamInvite from './models/TeamInvite.js';
|
|
40
50
|
|
|
41
51
|
export * as TeamMember from './models/TeamMember.js';
|
|
42
52
|
|
|
43
|
-
export * as
|
|
53
|
+
export * as TrainingType from './models/TrainingType.js';
|
|
44
54
|
|
|
45
|
-
export * as
|
|
55
|
+
export * as User from './models/User.js';
|
|
56
|
+
export * as ChannelRpcEvents from './rpc/channel/ChannelRpcEvents.js';
|
|
57
|
+
export * as ChannelRpcGroup from './rpc/channel/ChannelRpcGroup.js';
|
|
58
|
+
export * as ChannelRpcModels from './rpc/channel/ChannelRpcModels.js';
|
|
59
|
+
export * as GuildRpcGroup from './rpc/guild/GuildRpcGroup.js';
|
|
60
|
+
export * as RoleRpcEvents from './rpc/role/RoleRpcEvents.js';
|
|
61
|
+
export * as RoleRpcGroup from './rpc/role/RoleRpcGroup.js';
|
|
62
|
+
export * as RoleRpcModels from './rpc/role/RoleRpcModels.js';
|
|
63
|
+
export * as SyncRpcs from './rpc/SyncRpcs.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,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
4
|
+
import { TeamId } from '~/models/Team.js';
|
|
5
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
6
|
+
|
|
7
|
+
export const ChannelSyncEventId = Schema.String.pipe(Schema.brand('ChannelSyncEventId'));
|
|
8
|
+
export type ChannelSyncEventId = typeof ChannelSyncEventId.Type;
|
|
9
|
+
|
|
10
|
+
export const ChannelSyncEventType = Schema.Literal(
|
|
11
|
+
'channel_created',
|
|
12
|
+
'channel_deleted',
|
|
13
|
+
'member_added',
|
|
14
|
+
'member_removed',
|
|
15
|
+
);
|
|
16
|
+
export type ChannelSyncEventType = typeof ChannelSyncEventType.Type;
|
|
17
|
+
|
|
18
|
+
export class ChannelSyncEvent extends Model.Class<ChannelSyncEvent>('ChannelSyncEvent')({
|
|
19
|
+
id: Model.Generated(ChannelSyncEventId),
|
|
20
|
+
team_id: TeamId,
|
|
21
|
+
guild_id: Schema.String,
|
|
22
|
+
event_type: ChannelSyncEventType,
|
|
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),
|
|
29
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
30
|
+
}) {}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { GroupId } from '~/models/GroupModel.js';
|
|
4
|
+
import { TeamId } from '~/models/Team.js';
|
|
5
|
+
|
|
6
|
+
export const DiscordChannelMappingId = Schema.String.pipe(Schema.brand('DiscordChannelMappingId'));
|
|
7
|
+
export type DiscordChannelMappingId = typeof DiscordChannelMappingId.Type;
|
|
8
|
+
|
|
9
|
+
export class DiscordChannelMapping extends Model.Class<DiscordChannelMapping>(
|
|
10
|
+
'DiscordChannelMapping',
|
|
11
|
+
)({
|
|
12
|
+
id: Model.Generated(DiscordChannelMappingId),
|
|
13
|
+
team_id: TeamId,
|
|
14
|
+
group_id: GroupId,
|
|
15
|
+
discord_channel_id: Schema.String,
|
|
16
|
+
discord_role_id: Schema.OptionFromNullOr(Schema.String),
|
|
17
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
18
|
+
}) {}
|
|
@@ -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
|
+
}) {}
|
|
@@ -7,8 +7,8 @@ export const NotificationId = Schema.String.pipe(Schema.brand('NotificationId'))
|
|
|
7
7
|
export type NotificationId = typeof NotificationId.Type;
|
|
8
8
|
|
|
9
9
|
export const NotificationType = Schema.Literal(
|
|
10
|
-
'
|
|
11
|
-
'
|
|
10
|
+
'age_group_added',
|
|
11
|
+
'age_group_removed',
|
|
12
12
|
'role_assigned',
|
|
13
13
|
'role_removed',
|
|
14
14
|
);
|
package/src/models/Role.ts
CHANGED
|
@@ -15,6 +15,8 @@ export const Permission = Schema.Literal(
|
|
|
15
15
|
'member:remove',
|
|
16
16
|
'role:view',
|
|
17
17
|
'role:manage',
|
|
18
|
+
'training-type:create',
|
|
19
|
+
'training-type:delete',
|
|
18
20
|
);
|
|
19
21
|
export type Permission = typeof Permission.Type;
|
|
20
22
|
|
|
@@ -32,6 +34,8 @@ export const defaultPermissions: Record<string, ReadonlyArray<Permission>> = {
|
|
|
32
34
|
'member:remove',
|
|
33
35
|
'role:view',
|
|
34
36
|
'role:manage',
|
|
37
|
+
'training-type:create',
|
|
38
|
+
'training-type:delete',
|
|
35
39
|
],
|
|
36
40
|
Captain: ['roster:view', 'roster:manage', 'member:view', 'member:edit', 'role:view'],
|
|
37
41
|
Player: ['roster:view', 'member:view'],
|
package/src/models/Team.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Model } from '@effect/sql';
|
|
2
2
|
import { Schema } from 'effect';
|
|
3
|
+
import { Snowflake } from '~/models/Discord.js';
|
|
3
4
|
import { UserId } from '~/models/User.js';
|
|
4
5
|
|
|
5
6
|
export const TeamId = Schema.String.pipe(Schema.brand('TeamId'));
|
|
@@ -8,6 +9,7 @@ export type TeamId = typeof TeamId.Type;
|
|
|
8
9
|
export class Team extends Model.Class<Team>('Team')({
|
|
9
10
|
id: Model.Generated(TeamId),
|
|
10
11
|
name: Schema.String,
|
|
12
|
+
guild_id: Snowflake,
|
|
11
13
|
created_by: UserId,
|
|
12
14
|
created_at: Model.DateTimeInsertFromDate,
|
|
13
15
|
updated_at: Model.DateTimeUpdateFromDate,
|
package/src/models/TeamMember.ts
CHANGED
|
@@ -11,5 +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.NullOr(Schema.Number)),
|
|
14
15
|
joined_at: Model.DateTimeInsertFromDate,
|
|
15
16
|
}) {}
|