@sideline/domain 0.3.0 → 0.4.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 +6 -6
- package/dist/cjs/api/AgeThresholdApi.js.map +1 -1
- package/dist/cjs/api/Auth.js +2 -13
- package/dist/cjs/api/Auth.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 +115 -0
- package/dist/cjs/api/TrainingTypeApi.js.map +1 -0
- package/dist/cjs/index.js +25 -3
- 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/TeamMember.js +1 -0
- package/dist/cjs/models/TeamMember.js.map +1 -1
- package/dist/cjs/models/TrainingType.js +18 -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 +12 -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/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 +18 -18
- package/dist/dts/api/Auth.d.ts +0 -40
- package/dist/dts/api/Auth.d.ts.map +1 -1
- package/dist/dts/api/Roster.d.ts +2 -18
- package/dist/dts/api/Roster.d.ts.map +1 -1
- package/dist/dts/api/TrainingTypeApi.d.ts +141 -0
- package/dist/dts/api/TrainingTypeApi.d.ts.map +1 -0
- package/dist/dts/index.d.ts +12 -1
- package/dist/dts/index.d.ts.map +1 -1
- 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/RoleSyncEvent.d.ts +4 -4
- package/dist/dts/models/TeamMember.d.ts +30 -0
- package/dist/dts/models/TeamMember.d.ts.map +1 -1
- package/dist/dts/models/TrainingType.d.ts +71 -0
- 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 +41 -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/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 +6 -6
- package/dist/esm/api/AgeThresholdApi.js.map +1 -1
- package/dist/esm/api/Auth.js +3 -14
- package/dist/esm/api/Auth.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 +99 -0
- package/dist/esm/api/TrainingTypeApi.js.map +1 -0
- package/dist/esm/index.js +12 -1
- package/dist/esm/index.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/TeamMember.js +1 -0
- package/dist/esm/models/TeamMember.js.map +1 -1
- package/dist/esm/models/TrainingType.js +11 -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 +5 -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/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 +6 -6
- package/src/api/Auth.ts +1 -12
- package/src/api/Roster.ts +1 -5
- package/src/api/TrainingTypeApi.ts +143 -0
- package/src/index.ts +17 -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/TeamMember.ts +1 -0
- package/src/models/TrainingType.ts +13 -0
- package/src/models/User.ts +0 -9
- package/src/rpc/SyncRpcs.ts +5 -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/role/RoleRpcEvents.ts +48 -0
- package/src/rpc/role/RoleRpcGroup.ts +33 -0
- package/src/rpc/role/RoleRpcModels.ts +9 -0
- package/dist/cjs/rpc/RoleSyncRpc.js +0 -66
- package/dist/cjs/rpc/RoleSyncRpc.js.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/rpc/RoleSyncRpc.js +0 -57
- package/dist/esm/rpc/RoleSyncRpc.js.map +0 -1
- package/src/rpc/RoleSyncRpc.ts +0 -59
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleRpcGroup.js","names":["Rpc","RpcGroup","Schema","Discord","Role","RoleSyncEvent","Team","UnprocessedRoleEvent","RoleMapping","RoleRpcGroup","make","payload","limit","Number","success","Array","id","RoleSyncEventId","error","String","team_id","TeamId","role_id","RoleId","OptionFromNullOr","discord_role_id","Snowflake","prefix"],"sources":["../../../../src/rpc/role/RoleRpcGroup.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,EAAEC,QAAQ,QAAQ,aAAa;AAC3C,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SAASC,OAAO,EAAEC,IAAI,EAAEC,aAAa,EAAEC,IAAI,QAAQ,gBAAa;AAChE,SAASC,oBAAoB,QAAQ,oBAAoB;AACzD,SAASC,WAAW,QAAQ,oBAAoB;AAEhD,OAAO,MAAMC,YAAY,gBAAGR,QAAQ,CAACS,IAAI,CACvCV,GAAG,CAACU,IAAI,CAAC,sBAAsB,EAAE;EAC/BC,OAAO,EAAE;IAAEC,KAAK,EAAEV,MAAM,CAACW;EAAM,CAAE;EACjCC,OAAO,EAAEZ,MAAM,CAACa,KAAK,CAACR,oBAAoB;CAC3C,CAAC,EACFP,GAAG,CAACU,IAAI,CAAC,oBAAoB,EAAE;EAC7BC,OAAO,EAAE;IAAEK,EAAE,EAAEX,aAAa,CAACY;EAAe;CAC7C,CAAC,EACFjB,GAAG,CAACU,IAAI,CAAC,iBAAiB,EAAE;EAC1BC,OAAO,EAAE;IAAEK,EAAE,EAAEX,aAAa,CAACY,eAAe;IAAEC,KAAK,EAAEhB,MAAM,CAACiB;EAAM;CACnE,CAAC,EACFnB,GAAG,CAACU,IAAI,CAAC,YAAY,EAAE;EACrBC,OAAO,EAAE;IAAES,OAAO,EAAEd,IAAI,CAACe,MAAM;IAAEC,OAAO,EAAElB,IAAI,CAACmB;EAAM,CAAE;EACvDT,OAAO,EAAEZ,MAAM,CAACsB,gBAAgB,CAAChB,WAAW;CAC7C,CAAC,EACFR,GAAG,CAACU,IAAI,CAAC,eAAe,EAAE;EACxBC,OAAO,EAAE;IACPS,OAAO,EAAEd,IAAI,CAACe,MAAM;IACpBC,OAAO,EAAElB,IAAI,CAACmB,MAAM;IACpBE,eAAe,EAAEtB,OAAO,CAACuB;;CAE5B,CAAC,EAEF1B,GAAG,CAACU,IAAI,CAAC,eAAe,EAAE;EACxBC,OAAO,EAAE;IAAES,OAAO,EAAEd,IAAI,CAACe,MAAM;IAAEC,OAAO,EAAElB,IAAI,CAACmB;EAAM;CACtD,CAAC,CACH,CAACI,MAAM,CAAC,OAAO,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { Discord, DiscordRoleMapping, Role, Team } from '../../index.js';
|
|
3
|
+
export class RoleMapping extends /*#__PURE__*/Schema.Class('RoleMapping')({
|
|
4
|
+
id: DiscordRoleMapping.DiscordRoleMappingId,
|
|
5
|
+
team_id: Team.TeamId,
|
|
6
|
+
role_id: Role.RoleId,
|
|
7
|
+
discord_role_id: Discord.Snowflake
|
|
8
|
+
}) {}
|
|
9
|
+
//# sourceMappingURL=RoleRpcModels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleRpcModels.js","names":["Schema","Discord","DiscordRoleMapping","Role","Team","RoleMapping","Class","id","DiscordRoleMappingId","team_id","TeamId","role_id","RoleId","discord_role_id","Snowflake"],"sources":["../../../../src/rpc/role/RoleRpcModels.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,MAAM,QAAQ,QAAQ;AAC/B,SAASC,OAAO,EAAEC,kBAAkB,EAAEC,IAAI,EAAEC,IAAI,QAAQ,gBAAa;AAErE,OAAM,MAAOC,WAAY,sBAAQL,MAAM,CAACM,KAAK,CAAc,aAAa,CAAC,CAAC;EACxEC,EAAE,EAAEL,kBAAkB,CAACM,oBAAoB;EAC3CC,OAAO,EAAEL,IAAI,CAACM,MAAM;EACpBC,OAAO,EAAER,IAAI,CAACS,MAAM;EACpBC,eAAe,EAAEZ,OAAO,CAACa;CAC1B,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -11,8 +11,8 @@ export class AgeThresholdInfo extends Schema.Class<AgeThresholdInfo>('AgeThresho
|
|
|
11
11
|
teamId: TeamId,
|
|
12
12
|
roleId: RoleId,
|
|
13
13
|
roleName: Schema.String,
|
|
14
|
-
minAge: Schema.
|
|
15
|
-
maxAge: Schema.
|
|
14
|
+
minAge: Schema.OptionFromNullOr(Schema.Number),
|
|
15
|
+
maxAge: Schema.OptionFromNullOr(Schema.Number),
|
|
16
16
|
}) {}
|
|
17
17
|
|
|
18
18
|
export class AgeRoleChange extends Schema.Class<AgeRoleChange>('AgeRoleChange')({
|
|
@@ -27,15 +27,15 @@ export class CreateAgeThresholdRequest extends Schema.Class<CreateAgeThresholdRe
|
|
|
27
27
|
'CreateAgeThresholdRequest',
|
|
28
28
|
)({
|
|
29
29
|
roleId: RoleId,
|
|
30
|
-
minAge: Schema.
|
|
31
|
-
maxAge: Schema.
|
|
30
|
+
minAge: Schema.OptionFromNullOr(Schema.Number),
|
|
31
|
+
maxAge: Schema.OptionFromNullOr(Schema.Number),
|
|
32
32
|
}) {}
|
|
33
33
|
|
|
34
34
|
export class UpdateAgeThresholdRequest extends Schema.Class<UpdateAgeThresholdRequest>(
|
|
35
35
|
'UpdateAgeThresholdRequest',
|
|
36
36
|
)({
|
|
37
|
-
minAge: Schema.
|
|
38
|
-
maxAge: Schema.
|
|
37
|
+
minAge: Schema.OptionFromNullOr(Schema.Number),
|
|
38
|
+
maxAge: Schema.OptionFromNullOr(Schema.Number),
|
|
39
39
|
}) {}
|
|
40
40
|
|
|
41
41
|
export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
package/src/api/Auth.ts
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import { Context, Schema } from 'effect';
|
|
9
9
|
import { Permission } from '~/models/Role.js';
|
|
10
10
|
import { TeamId } from '~/models/Team.js';
|
|
11
|
-
import { Gender, Locale,
|
|
11
|
+
import { Gender, Locale, UserId } from '~/models/User.js';
|
|
12
12
|
|
|
13
13
|
export { UserId } from '~/models/User.js';
|
|
14
14
|
|
|
@@ -30,9 +30,6 @@ export class CurrentUser extends Schema.Class<CurrentUser>('CurrentUser')({
|
|
|
30
30
|
name: Schema.NullOr(Schema.String),
|
|
31
31
|
birthYear: Schema.NullOr(Schema.Number),
|
|
32
32
|
gender: Schema.NullOr(Gender),
|
|
33
|
-
jerseyNumber: Schema.NullOr(Schema.Number),
|
|
34
|
-
position: Schema.NullOr(Position),
|
|
35
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
36
33
|
locale: Locale,
|
|
37
34
|
}) {}
|
|
38
35
|
|
|
@@ -56,11 +53,6 @@ export class CompleteProfileRequest extends Schema.Class<CompleteProfileRequest>
|
|
|
56
53
|
}),
|
|
57
54
|
),
|
|
58
55
|
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
56
|
}) {}
|
|
65
57
|
|
|
66
58
|
export class UpdateProfileRequest extends Schema.Class<UpdateProfileRequest>(
|
|
@@ -77,9 +69,6 @@ export class UpdateProfileRequest extends Schema.Class<UpdateProfileRequest>(
|
|
|
77
69
|
),
|
|
78
70
|
),
|
|
79
71
|
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
72
|
}) {}
|
|
84
73
|
|
|
85
74
|
export class Unauthorized extends Schema.TaggedError<Unauthorized>()(
|
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,143 @@
|
|
|
1
|
+
import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from '@effect/platform';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { AuthMiddleware } from '~/api/Auth.js';
|
|
4
|
+
import { TeamId } from '~/models/Team.js';
|
|
5
|
+
import { TeamMemberId } from '~/models/TeamMember.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
|
+
coachCount: Schema.Number,
|
|
13
|
+
}) {}
|
|
14
|
+
|
|
15
|
+
export class TrainingTypeDetail extends Schema.Class<TrainingTypeDetail>('TrainingTypeDetail')({
|
|
16
|
+
trainingTypeId: TrainingTypeId,
|
|
17
|
+
teamId: TeamId,
|
|
18
|
+
name: Schema.String,
|
|
19
|
+
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
|
+
}) {}
|
|
28
|
+
|
|
29
|
+
export class TrainingTypeListResponse extends Schema.Class<TrainingTypeListResponse>(
|
|
30
|
+
'TrainingTypeListResponse',
|
|
31
|
+
)({
|
|
32
|
+
canAdmin: Schema.Boolean,
|
|
33
|
+
trainingTypes: Schema.Array(TrainingTypeInfo),
|
|
34
|
+
}) {}
|
|
35
|
+
|
|
36
|
+
export class CreateTrainingTypeRequest extends Schema.Class<CreateTrainingTypeRequest>(
|
|
37
|
+
'CreateTrainingTypeRequest',
|
|
38
|
+
)({
|
|
39
|
+
name: Schema.NonEmptyString,
|
|
40
|
+
}) {}
|
|
41
|
+
|
|
42
|
+
export class UpdateTrainingTypeRequest extends Schema.Class<UpdateTrainingTypeRequest>(
|
|
43
|
+
'UpdateTrainingTypeRequest',
|
|
44
|
+
)({
|
|
45
|
+
name: Schema.NonEmptyString,
|
|
46
|
+
}) {}
|
|
47
|
+
|
|
48
|
+
export class AddTrainingTypeCoachRequest extends Schema.Class<AddTrainingTypeCoachRequest>(
|
|
49
|
+
'AddTrainingTypeCoachRequest',
|
|
50
|
+
)({
|
|
51
|
+
memberId: TeamMemberId,
|
|
52
|
+
}) {}
|
|
53
|
+
|
|
54
|
+
export class TrainingTypeNotFound extends Schema.TaggedError<TrainingTypeNotFound>()(
|
|
55
|
+
'TrainingTypeNotFound',
|
|
56
|
+
{},
|
|
57
|
+
HttpApiSchema.annotations({ status: 404 }),
|
|
58
|
+
) {}
|
|
59
|
+
|
|
60
|
+
export class Forbidden extends Schema.TaggedError<Forbidden>()(
|
|
61
|
+
'TrainingTypeForbidden',
|
|
62
|
+
{},
|
|
63
|
+
HttpApiSchema.annotations({ status: 403 }),
|
|
64
|
+
) {}
|
|
65
|
+
|
|
66
|
+
export class MemberNotFound extends Schema.TaggedError<MemberNotFound>()(
|
|
67
|
+
'TrainingTypeMemberNotFound',
|
|
68
|
+
{},
|
|
69
|
+
HttpApiSchema.annotations({ status: 404 }),
|
|
70
|
+
) {}
|
|
71
|
+
|
|
72
|
+
export class TrainingTypeApiGroup extends HttpApiGroup.make('trainingType')
|
|
73
|
+
.add(
|
|
74
|
+
HttpApiEndpoint.get('listTrainingTypes', '/teams/:teamId/training-types')
|
|
75
|
+
.addSuccess(TrainingTypeListResponse)
|
|
76
|
+
.addError(Forbidden, { status: 403 })
|
|
77
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
78
|
+
.middleware(AuthMiddleware),
|
|
79
|
+
)
|
|
80
|
+
.add(
|
|
81
|
+
HttpApiEndpoint.post('createTrainingType', '/teams/:teamId/training-types')
|
|
82
|
+
.addSuccess(TrainingTypeInfo, { status: 201 })
|
|
83
|
+
.addError(Forbidden, { status: 403 })
|
|
84
|
+
.setPath(Schema.Struct({ teamId: TeamId }))
|
|
85
|
+
.setPayload(CreateTrainingTypeRequest)
|
|
86
|
+
.middleware(AuthMiddleware),
|
|
87
|
+
)
|
|
88
|
+
.add(
|
|
89
|
+
HttpApiEndpoint.get('getTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
90
|
+
.addSuccess(TrainingTypeDetail)
|
|
91
|
+
.addError(Forbidden, { status: 403 })
|
|
92
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
93
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
94
|
+
.middleware(AuthMiddleware),
|
|
95
|
+
)
|
|
96
|
+
.add(
|
|
97
|
+
HttpApiEndpoint.patch('updateTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
98
|
+
.addSuccess(TrainingTypeInfo)
|
|
99
|
+
.addError(Forbidden, { status: 403 })
|
|
100
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
101
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
102
|
+
.setPayload(UpdateTrainingTypeRequest)
|
|
103
|
+
.middleware(AuthMiddleware),
|
|
104
|
+
)
|
|
105
|
+
.add(
|
|
106
|
+
HttpApiEndpoint.del('deleteTrainingType', '/teams/:teamId/training-types/:trainingTypeId')
|
|
107
|
+
.addSuccess(Schema.Void)
|
|
108
|
+
.addError(Forbidden, { status: 403 })
|
|
109
|
+
.addError(TrainingTypeNotFound, { status: 404 })
|
|
110
|
+
.setPath(Schema.Struct({ teamId: TeamId, trainingTypeId: TrainingTypeId }))
|
|
111
|
+
.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
|
+
) {}
|
package/src/index.ts
CHANGED
|
@@ -14,8 +14,16 @@ export * as Roster from './api/Roster.js';
|
|
|
14
14
|
|
|
15
15
|
export * as SubgroupApi from './api/SubgroupApi.js';
|
|
16
16
|
|
|
17
|
+
export * as TrainingTypeApi from './api/TrainingTypeApi.js';
|
|
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
|
|
|
21
29
|
export * as MemberRole from './models/MemberRole.js';
|
|
@@ -40,6 +48,13 @@ export * as TeamInvite from './models/TeamInvite.js';
|
|
|
40
48
|
|
|
41
49
|
export * as TeamMember from './models/TeamMember.js';
|
|
42
50
|
|
|
43
|
-
export * as
|
|
51
|
+
export * as TrainingType from './models/TrainingType.js';
|
|
44
52
|
|
|
45
|
-
export * as
|
|
53
|
+
export * as User from './models/User.js';
|
|
54
|
+
export * as ChannelRpcEvents from './rpc/channel/ChannelRpcEvents.js';
|
|
55
|
+
export * as ChannelRpcGroup from './rpc/channel/ChannelRpcGroup.js';
|
|
56
|
+
export * as ChannelRpcModels from './rpc/channel/ChannelRpcModels.js';
|
|
57
|
+
export * as RoleRpcEvents from './rpc/role/RoleRpcEvents.js';
|
|
58
|
+
export * as RoleRpcGroup from './rpc/role/RoleRpcGroup.js';
|
|
59
|
+
export * as RoleRpcModels from './rpc/role/RoleRpcModels.js';
|
|
60
|
+
export * as SyncRpcs from './rpc/SyncRpcs.js';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { SubgroupId } from '~/models/SubgroupModel.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
|
+
subgroup_id: SubgroupId,
|
|
24
|
+
subgroup_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 { SubgroupId } from '~/models/SubgroupModel.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
|
+
subgroup_id: SubgroupId,
|
|
15
|
+
discord_channel_id: Schema.String,
|
|
16
|
+
discord_role_id: Schema.OptionFromNullOr(Schema.String),
|
|
17
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
18
|
+
}) {}
|
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
|
}) {}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { TeamId } from '~/models/Team.js';
|
|
4
|
+
|
|
5
|
+
export const TrainingTypeId = Schema.String.pipe(Schema.brand('TrainingTypeId'));
|
|
6
|
+
export type TrainingTypeId = typeof TrainingTypeId.Type;
|
|
7
|
+
|
|
8
|
+
export class TrainingType extends Model.Class<TrainingType>('TrainingType')({
|
|
9
|
+
id: Model.Generated(TrainingTypeId),
|
|
10
|
+
team_id: TeamId,
|
|
11
|
+
name: Schema.String,
|
|
12
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
13
|
+
}) {}
|
package/src/models/User.ts
CHANGED
|
@@ -7,12 +7,6 @@ export type UserId = typeof UserId.Type;
|
|
|
7
7
|
export const Gender = Schema.Literal('male', 'female', 'other');
|
|
8
8
|
export type Gender = typeof Gender.Type;
|
|
9
9
|
|
|
10
|
-
export const Position = Schema.Literal('goalkeeper', 'defender', 'midfielder', 'forward');
|
|
11
|
-
export type Position = typeof Position.Type;
|
|
12
|
-
|
|
13
|
-
export const Proficiency = Schema.Literal('beginner', 'intermediate', 'advanced', 'pro');
|
|
14
|
-
export type Proficiency = typeof Proficiency.Type;
|
|
15
|
-
|
|
16
10
|
export const Locale = Schema.Literal('en', 'cs');
|
|
17
11
|
export type Locale = typeof Locale.Type;
|
|
18
12
|
|
|
@@ -26,9 +20,6 @@ export class User extends Model.Class<User>('User')({
|
|
|
26
20
|
name: Schema.NullOr(Schema.String),
|
|
27
21
|
birth_year: Schema.NullOr(Schema.Number),
|
|
28
22
|
gender: Schema.NullOr(Gender),
|
|
29
|
-
jersey_number: Schema.NullOr(Schema.Number),
|
|
30
|
-
position: Schema.NullOr(Position),
|
|
31
|
-
proficiency: Schema.NullOr(Proficiency),
|
|
32
23
|
locale: Locale,
|
|
33
24
|
created_at: Model.DateTimeInsertFromDate,
|
|
34
25
|
is_profile_complete: Schema.Boolean,
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { ChannelSyncEvent, Discord, SubgroupModel, Team, TeamMember } from '~/index.js';
|
|
3
|
+
|
|
4
|
+
export class ChannelCreatedEvent extends Schema.TaggedClass<ChannelCreatedEvent>()(
|
|
5
|
+
'channel_created',
|
|
6
|
+
{
|
|
7
|
+
id: ChannelSyncEvent.ChannelSyncEventId,
|
|
8
|
+
team_id: Team.TeamId,
|
|
9
|
+
guild_id: Discord.Snowflake,
|
|
10
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
11
|
+
subgroup_name: Schema.String,
|
|
12
|
+
},
|
|
13
|
+
) {}
|
|
14
|
+
|
|
15
|
+
export class ChannelDeletedEvent extends Schema.TaggedClass<ChannelDeletedEvent>()(
|
|
16
|
+
'channel_deleted',
|
|
17
|
+
{
|
|
18
|
+
id: ChannelSyncEvent.ChannelSyncEventId,
|
|
19
|
+
team_id: Team.TeamId,
|
|
20
|
+
guild_id: Discord.Snowflake,
|
|
21
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
22
|
+
},
|
|
23
|
+
) {}
|
|
24
|
+
|
|
25
|
+
export class ChannelMemberAddedEvent extends Schema.TaggedClass<ChannelMemberAddedEvent>()(
|
|
26
|
+
'channel_member_added',
|
|
27
|
+
{
|
|
28
|
+
id: ChannelSyncEvent.ChannelSyncEventId,
|
|
29
|
+
team_id: Team.TeamId,
|
|
30
|
+
guild_id: Discord.Snowflake,
|
|
31
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
32
|
+
subgroup_name: Schema.String,
|
|
33
|
+
team_member_id: TeamMember.TeamMemberId,
|
|
34
|
+
discord_user_id: Discord.Snowflake,
|
|
35
|
+
},
|
|
36
|
+
) {}
|
|
37
|
+
|
|
38
|
+
export class ChannelMemberRemovedEvent extends Schema.TaggedClass<ChannelMemberRemovedEvent>()(
|
|
39
|
+
'channel_member_removed',
|
|
40
|
+
{
|
|
41
|
+
id: ChannelSyncEvent.ChannelSyncEventId,
|
|
42
|
+
team_id: Team.TeamId,
|
|
43
|
+
guild_id: Discord.Snowflake,
|
|
44
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
45
|
+
team_member_id: TeamMember.TeamMemberId,
|
|
46
|
+
discord_user_id: Discord.Snowflake,
|
|
47
|
+
},
|
|
48
|
+
) {}
|
|
49
|
+
|
|
50
|
+
export const UnprocessedChannelEvent = Schema.Union(
|
|
51
|
+
ChannelCreatedEvent,
|
|
52
|
+
ChannelDeletedEvent,
|
|
53
|
+
ChannelMemberAddedEvent,
|
|
54
|
+
ChannelMemberRemovedEvent,
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
export type UnprocessedChannelEvent = Schema.Schema.Type<typeof UnprocessedChannelEvent>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Rpc, RpcGroup } from '@effect/rpc';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { ChannelSyncEvent, Discord, SubgroupModel, Team } from '~/index.js';
|
|
4
|
+
import { UnprocessedChannelEvent } from './ChannelRpcEvents.js';
|
|
5
|
+
import { ChannelMapping } from './ChannelRpcModels.js';
|
|
6
|
+
|
|
7
|
+
export const ChannelRpcGroup = RpcGroup.make(
|
|
8
|
+
Rpc.make('GetUnprocessedEvents', {
|
|
9
|
+
payload: { limit: Schema.Number },
|
|
10
|
+
success: Schema.Array(UnprocessedChannelEvent),
|
|
11
|
+
}),
|
|
12
|
+
Rpc.make('MarkEventProcessed', {
|
|
13
|
+
payload: { id: ChannelSyncEvent.ChannelSyncEventId },
|
|
14
|
+
}),
|
|
15
|
+
Rpc.make('MarkEventFailed', {
|
|
16
|
+
payload: { id: ChannelSyncEvent.ChannelSyncEventId, error: Schema.String },
|
|
17
|
+
}),
|
|
18
|
+
Rpc.make('GetMapping', {
|
|
19
|
+
payload: { team_id: Team.TeamId, subgroup_id: SubgroupModel.SubgroupId },
|
|
20
|
+
success: Schema.OptionFromNullOr(ChannelMapping),
|
|
21
|
+
}),
|
|
22
|
+
Rpc.make('UpsertMapping', {
|
|
23
|
+
payload: {
|
|
24
|
+
team_id: Team.TeamId,
|
|
25
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
26
|
+
discord_channel_id: Discord.Snowflake,
|
|
27
|
+
discord_role_id: Discord.Snowflake,
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
Rpc.make('DeleteMapping', {
|
|
31
|
+
payload: { team_id: Team.TeamId, subgroup_id: SubgroupModel.SubgroupId },
|
|
32
|
+
}),
|
|
33
|
+
).prefix('Channel/');
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { Discord, DiscordChannelMapping, SubgroupModel, Team } from '~/index.js';
|
|
3
|
+
|
|
4
|
+
export class ChannelMapping extends Schema.Class<ChannelMapping>('ChannelMapping')({
|
|
5
|
+
id: DiscordChannelMapping.DiscordChannelMappingId,
|
|
6
|
+
team_id: Team.TeamId,
|
|
7
|
+
subgroup_id: SubgroupModel.SubgroupId,
|
|
8
|
+
discord_channel_id: Discord.Snowflake,
|
|
9
|
+
discord_role_id: Schema.OptionFromNullOr(Discord.Snowflake),
|
|
10
|
+
}) {}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { Discord, Role, RoleSyncEvent, Team, TeamMember } from '~/index.js';
|
|
3
|
+
|
|
4
|
+
export class RoleCreatedEvent extends Schema.TaggedClass<RoleCreatedEvent>()('role_created', {
|
|
5
|
+
id: RoleSyncEvent.RoleSyncEventId,
|
|
6
|
+
team_id: Team.TeamId,
|
|
7
|
+
guild_id: Discord.Snowflake,
|
|
8
|
+
role_id: Role.RoleId,
|
|
9
|
+
role_name: Schema.String,
|
|
10
|
+
}) {}
|
|
11
|
+
|
|
12
|
+
export class RoleDeletedEvent extends Schema.TaggedClass<RoleDeletedEvent>()('role_deleted', {
|
|
13
|
+
id: RoleSyncEvent.RoleSyncEventId,
|
|
14
|
+
team_id: Team.TeamId,
|
|
15
|
+
guild_id: Discord.Snowflake,
|
|
16
|
+
role_id: Role.RoleId,
|
|
17
|
+
}) {}
|
|
18
|
+
|
|
19
|
+
export class RoleAssignedEvent extends Schema.TaggedClass<RoleAssignedEvent>()('role_assigned', {
|
|
20
|
+
id: RoleSyncEvent.RoleSyncEventId,
|
|
21
|
+
team_id: Team.TeamId,
|
|
22
|
+
guild_id: Discord.Snowflake,
|
|
23
|
+
role_id: Role.RoleId,
|
|
24
|
+
role_name: Schema.String,
|
|
25
|
+
team_member_id: TeamMember.TeamMemberId,
|
|
26
|
+
discord_user_id: Discord.Snowflake,
|
|
27
|
+
}) {}
|
|
28
|
+
|
|
29
|
+
export class RoleUnassignedEvent extends Schema.TaggedClass<RoleUnassignedEvent>()(
|
|
30
|
+
'role_unassigned',
|
|
31
|
+
{
|
|
32
|
+
id: RoleSyncEvent.RoleSyncEventId,
|
|
33
|
+
team_id: Team.TeamId,
|
|
34
|
+
guild_id: Discord.Snowflake,
|
|
35
|
+
role_id: Role.RoleId,
|
|
36
|
+
team_member_id: TeamMember.TeamMemberId,
|
|
37
|
+
discord_user_id: Discord.Snowflake,
|
|
38
|
+
},
|
|
39
|
+
) {}
|
|
40
|
+
|
|
41
|
+
export const UnprocessedRoleEvent = Schema.Union(
|
|
42
|
+
RoleCreatedEvent,
|
|
43
|
+
RoleDeletedEvent,
|
|
44
|
+
RoleAssignedEvent,
|
|
45
|
+
RoleUnassignedEvent,
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
export type UnprocessedRoleEvent = Schema.Schema.Type<typeof UnprocessedRoleEvent>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Rpc, RpcGroup } from '@effect/rpc';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { Discord, Role, RoleSyncEvent, Team } from '~/index.js';
|
|
4
|
+
import { UnprocessedRoleEvent } from './RoleRpcEvents.js';
|
|
5
|
+
import { RoleMapping } from './RoleRpcModels.js';
|
|
6
|
+
|
|
7
|
+
export const RoleRpcGroup = RpcGroup.make(
|
|
8
|
+
Rpc.make('GetUnprocessedEvents', {
|
|
9
|
+
payload: { limit: Schema.Number },
|
|
10
|
+
success: Schema.Array(UnprocessedRoleEvent),
|
|
11
|
+
}),
|
|
12
|
+
Rpc.make('MarkEventProcessed', {
|
|
13
|
+
payload: { id: RoleSyncEvent.RoleSyncEventId },
|
|
14
|
+
}),
|
|
15
|
+
Rpc.make('MarkEventFailed', {
|
|
16
|
+
payload: { id: RoleSyncEvent.RoleSyncEventId, error: Schema.String },
|
|
17
|
+
}),
|
|
18
|
+
Rpc.make('GetMapping', {
|
|
19
|
+
payload: { team_id: Team.TeamId, role_id: Role.RoleId },
|
|
20
|
+
success: Schema.OptionFromNullOr(RoleMapping),
|
|
21
|
+
}),
|
|
22
|
+
Rpc.make('UpsertMapping', {
|
|
23
|
+
payload: {
|
|
24
|
+
team_id: Team.TeamId,
|
|
25
|
+
role_id: Role.RoleId,
|
|
26
|
+
discord_role_id: Discord.Snowflake,
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
|
|
30
|
+
Rpc.make('DeleteMapping', {
|
|
31
|
+
payload: { team_id: Team.TeamId, role_id: Role.RoleId },
|
|
32
|
+
}),
|
|
33
|
+
).prefix('Role/');
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
import { Discord, DiscordRoleMapping, Role, Team } from '~/index.js';
|
|
3
|
+
|
|
4
|
+
export class RoleMapping extends Schema.Class<RoleMapping>('RoleMapping')({
|
|
5
|
+
id: DiscordRoleMapping.DiscordRoleMappingId,
|
|
6
|
+
team_id: Team.TeamId,
|
|
7
|
+
role_id: Role.RoleId,
|
|
8
|
+
discord_role_id: Discord.Snowflake,
|
|
9
|
+
}) {}
|