@sideline/domain 0.2.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 +29 -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/DiscordRoleMapping.js +20 -0
- package/dist/cjs/models/DiscordRoleMapping.js.map +1 -0
- package/dist/cjs/models/RoleSyncEvent.js +28 -0
- package/dist/cjs/models/RoleSyncEvent.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 +14 -0
- 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/DiscordRoleMapping.d.ts +84 -0
- package/dist/dts/models/DiscordRoleMapping.d.ts.map +1 -0
- package/dist/dts/models/RoleSyncEvent.d.ts +164 -0
- package/dist/dts/models/RoleSyncEvent.d.ts.map +1 -0
- 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 +14 -0
- 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/DiscordRoleMapping.js +13 -0
- package/dist/esm/models/DiscordRoleMapping.js.map +1 -0
- package/dist/esm/models/RoleSyncEvent.js +21 -0
- package/dist/esm/models/RoleSyncEvent.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 +2 -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 +21 -0
- package/src/models/ChannelSyncEvent.ts +30 -0
- package/src/models/Discord.ts +4 -0
- package/src/models/DiscordChannelMapping.ts +18 -0
- package/src/models/DiscordRoleMapping.ts +15 -0
- package/src/models/RoleSyncEvent.ts +30 -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
|
@@ -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
|
+
}) {}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { RoleId } from '~/models/Role.js';
|
|
4
|
+
import { TeamId } from '~/models/Team.js';
|
|
5
|
+
|
|
6
|
+
export const DiscordRoleMappingId = Schema.String.pipe(Schema.brand('DiscordRoleMappingId'));
|
|
7
|
+
export type DiscordRoleMappingId = typeof DiscordRoleMappingId.Type;
|
|
8
|
+
|
|
9
|
+
export class DiscordRoleMapping extends Model.Class<DiscordRoleMapping>('DiscordRoleMapping')({
|
|
10
|
+
id: Model.Generated(DiscordRoleMappingId),
|
|
11
|
+
team_id: TeamId,
|
|
12
|
+
role_id: RoleId,
|
|
13
|
+
discord_role_id: Schema.String,
|
|
14
|
+
created_at: Model.DateTimeInsertFromDate,
|
|
15
|
+
}) {}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Model } from '@effect/sql';
|
|
2
|
+
import { Schema } from 'effect';
|
|
3
|
+
import { RoleId } from '~/models/Role.js';
|
|
4
|
+
import { TeamId } from '~/models/Team.js';
|
|
5
|
+
import { TeamMemberId } from '~/models/TeamMember.js';
|
|
6
|
+
|
|
7
|
+
export const RoleSyncEventId = Schema.String.pipe(Schema.brand('RoleSyncEventId'));
|
|
8
|
+
export type RoleSyncEventId = typeof RoleSyncEventId.Type;
|
|
9
|
+
|
|
10
|
+
export const RoleSyncEventType = Schema.Literal(
|
|
11
|
+
'role_assigned',
|
|
12
|
+
'role_unassigned',
|
|
13
|
+
'role_created',
|
|
14
|
+
'role_deleted',
|
|
15
|
+
);
|
|
16
|
+
export type RoleSyncEventType = typeof RoleSyncEventType.Type;
|
|
17
|
+
|
|
18
|
+
export class RoleSyncEvent extends Model.Class<RoleSyncEvent>('RoleSyncEvent')({
|
|
19
|
+
id: Model.Generated(RoleSyncEventId),
|
|
20
|
+
team_id: TeamId,
|
|
21
|
+
guild_id: Schema.String,
|
|
22
|
+
event_type: RoleSyncEventType,
|
|
23
|
+
role_id: RoleId,
|
|
24
|
+
role_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
|
+
}) {}
|
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
|
+
}) {}
|