@sideline/domain 0.7.1 → 0.9.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.
Files changed (91) hide show
  1. package/dist/cjs/api/Auth.js +2 -2
  2. package/dist/cjs/api/Auth.js.map +1 -1
  3. package/dist/cjs/api/EventRsvpApi.js +23 -4
  4. package/dist/cjs/api/EventRsvpApi.js.map +1 -1
  5. package/dist/cjs/api/EventSeriesApi.js +6 -3
  6. package/dist/cjs/api/EventSeriesApi.js.map +1 -1
  7. package/dist/cjs/api/GroupApi.js +1 -1
  8. package/dist/cjs/api/GroupApi.js.map +1 -1
  9. package/dist/cjs/api/Roster.js +2 -2
  10. package/dist/cjs/api/Roster.js.map +1 -1
  11. package/dist/cjs/api/TeamSettingsApi.js +8 -0
  12. package/dist/cjs/api/TeamSettingsApi.js.map +1 -1
  13. package/dist/cjs/models/EventSeries.js +3 -2
  14. package/dist/cjs/models/EventSeries.js.map +1 -1
  15. package/dist/cjs/models/TeamSettings.js +2 -0
  16. package/dist/cjs/models/TeamSettings.js.map +1 -1
  17. package/dist/cjs/models/User.js +2 -2
  18. package/dist/cjs/models/User.js.map +1 -1
  19. package/dist/cjs/rpc/event/EventRpcEvents.js +12 -2
  20. package/dist/cjs/rpc/event/EventRpcEvents.js.map +1 -1
  21. package/dist/cjs/rpc/event/EventRpcGroup.js +18 -0
  22. package/dist/cjs/rpc/event/EventRpcGroup.js.map +1 -1
  23. package/dist/cjs/rpc/event/EventRpcModels.js +25 -1
  24. package/dist/cjs/rpc/event/EventRpcModels.js.map +1 -1
  25. package/dist/cjs/rpc/guild/GuildRpcGroup.js +4 -4
  26. package/dist/cjs/rpc/guild/GuildRpcGroup.js.map +1 -1
  27. package/dist/dts/api/Auth.d.ts +8 -8
  28. package/dist/dts/api/EventApi.d.ts +4 -4
  29. package/dist/dts/api/EventRsvpApi.d.ts +38 -1
  30. package/dist/dts/api/EventRsvpApi.d.ts.map +1 -1
  31. package/dist/dts/api/EventSeriesApi.d.ts +17 -9
  32. package/dist/dts/api/EventSeriesApi.d.ts.map +1 -1
  33. package/dist/dts/api/GroupApi.d.ts +3 -3
  34. package/dist/dts/api/Roster.d.ts +8 -8
  35. package/dist/dts/api/TeamSettingsApi.d.ts +24 -0
  36. package/dist/dts/api/TeamSettingsApi.d.ts.map +1 -1
  37. package/dist/dts/models/Event.d.ts +6 -6
  38. package/dist/dts/models/EventSeries.d.ts +17 -15
  39. package/dist/dts/models/EventSeries.d.ts.map +1 -1
  40. package/dist/dts/models/TeamSettings.d.ts +26 -0
  41. package/dist/dts/models/TeamSettings.d.ts.map +1 -1
  42. package/dist/dts/models/User.d.ts +22 -22
  43. package/dist/dts/rpc/SyncRpcs.d.ts +17 -6
  44. package/dist/dts/rpc/SyncRpcs.d.ts.map +1 -1
  45. package/dist/dts/rpc/event/EventRpcEvents.d.ts +14 -1
  46. package/dist/dts/rpc/event/EventRpcEvents.d.ts.map +1 -1
  47. package/dist/dts/rpc/event/EventRpcGroup.d.ts +14 -3
  48. package/dist/dts/rpc/event/EventRpcGroup.d.ts.map +1 -1
  49. package/dist/dts/rpc/event/EventRpcModels.d.ts +66 -0
  50. package/dist/dts/rpc/event/EventRpcModels.d.ts.map +1 -1
  51. package/dist/dts/rpc/guild/GuildRpcGroup.d.ts +4 -4
  52. package/dist/esm/api/Auth.js +2 -2
  53. package/dist/esm/api/Auth.js.map +1 -1
  54. package/dist/esm/api/EventRsvpApi.js +20 -3
  55. package/dist/esm/api/EventRsvpApi.js.map +1 -1
  56. package/dist/esm/api/EventSeriesApi.js +7 -4
  57. package/dist/esm/api/EventSeriesApi.js.map +1 -1
  58. package/dist/esm/api/GroupApi.js +1 -1
  59. package/dist/esm/api/GroupApi.js.map +1 -1
  60. package/dist/esm/api/Roster.js +2 -2
  61. package/dist/esm/api/Roster.js.map +1 -1
  62. package/dist/esm/api/TeamSettingsApi.js +8 -0
  63. package/dist/esm/api/TeamSettingsApi.js.map +1 -1
  64. package/dist/esm/models/EventSeries.js +2 -1
  65. package/dist/esm/models/EventSeries.js.map +1 -1
  66. package/dist/esm/models/TeamSettings.js +2 -0
  67. package/dist/esm/models/TeamSettings.js.map +1 -1
  68. package/dist/esm/models/User.js +2 -2
  69. package/dist/esm/models/User.js.map +1 -1
  70. package/dist/esm/rpc/event/EventRpcEvents.js +10 -1
  71. package/dist/esm/rpc/event/EventRpcEvents.js.map +1 -1
  72. package/dist/esm/rpc/event/EventRpcGroup.js +19 -1
  73. package/dist/esm/rpc/event/EventRpcGroup.js.map +1 -1
  74. package/dist/esm/rpc/event/EventRpcModels.js +18 -0
  75. package/dist/esm/rpc/event/EventRpcModels.js.map +1 -1
  76. package/dist/esm/rpc/guild/GuildRpcGroup.js +4 -4
  77. package/dist/esm/rpc/guild/GuildRpcGroup.js.map +1 -1
  78. package/package.json +1 -1
  79. package/src/api/Auth.ts +2 -2
  80. package/src/api/EventRsvpApi.ts +22 -0
  81. package/src/api/EventSeriesApi.ts +5 -4
  82. package/src/api/GroupApi.ts +1 -1
  83. package/src/api/Roster.ts +2 -2
  84. package/src/api/TeamSettingsApi.ts +8 -0
  85. package/src/models/EventSeries.ts +4 -1
  86. package/src/models/TeamSettings.ts +2 -0
  87. package/src/models/User.ts +2 -2
  88. package/src/rpc/event/EventRpcEvents.ts +11 -0
  89. package/src/rpc/event/EventRpcGroup.ts +23 -0
  90. package/src/rpc/event/EventRpcModels.ts +35 -0
  91. package/src/rpc/guild/GuildRpcGroup.ts +4 -4
@@ -30,8 +30,8 @@ export const GuildRpcGroup = /*#__PURE__*/RpcGroup.make(Rpc.make('RegisterGuild'
30
30
  guild_id: Discord.Snowflake,
31
31
  members: Schema.Array(Schema.Struct({
32
32
  discord_id: Schema.String,
33
- discord_username: Schema.String,
34
- discord_avatar: Schema.NullOr(Schema.String),
33
+ username: Schema.String,
34
+ avatar: Schema.NullOr(Schema.String),
35
35
  roles: Schema.Array(Schema.String)
36
36
  }))
37
37
  }
@@ -39,8 +39,8 @@ export const GuildRpcGroup = /*#__PURE__*/RpcGroup.make(Rpc.make('RegisterGuild'
39
39
  payload: {
40
40
  guild_id: Discord.Snowflake,
41
41
  discord_id: Schema.String,
42
- discord_username: Schema.String,
43
- discord_avatar: Schema.NullOr(Schema.String),
42
+ username: Schema.String,
43
+ avatar: Schema.NullOr(Schema.String),
44
44
  roles: Schema.Array(Schema.String)
45
45
  }
46
46
  })).prefix('Guild/');
@@ -1 +1 @@
1
- {"version":3,"file":"GuildRpcGroup.js","names":["Rpc","RpcGroup","Schema","Discord","GuildRpcGroup","make","payload","guild_id","Snowflake","guild_name","String","success","Boolean","channels","Array","Struct","channel_id","name","type","Number","parent_id","NullOr","members","discord_id","discord_username","discord_avatar","roles","prefix"],"sources":["../../../../src/rpc/guild/GuildRpcGroup.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,EAAEC,QAAQ,QAAQ,aAAa;AAC3C,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SAASC,OAAO,QAAQ,gBAAa;AAErC,OAAO,MAAMC,aAAa,gBAAGH,QAAQ,CAACI,IAAI,CACxCL,GAAG,CAACK,IAAI,CAAC,eAAe,EAAE;EACxBC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAAEC,UAAU,EAAEP,MAAM,CAACQ;EAAM;CAClE,CAAC,EACFV,GAAG,CAACK,IAAI,CAAC,iBAAiB,EAAE;EAC1BC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK;EAAS;CACvC,CAAC,EACFR,GAAG,CAACK,IAAI,CAAC,mBAAmB,EAAE;EAC5BC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK;EAAS,CAAE;EACxCG,OAAO,EAAET,MAAM,CAACU;CACjB,CAAC,EACFZ,GAAG,CAACK,IAAI,CAAC,mBAAmB,EAAE;EAC5BC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3BK,QAAQ,EAAEX,MAAM,CAACY,KAAK,CACpBZ,MAAM,CAACa,MAAM,CAAC;MACZC,UAAU,EAAEb,OAAO,CAACK,SAAS;MAC7BS,IAAI,EAAEf,MAAM,CAACQ,MAAM;MACnBQ,IAAI,EAAEhB,MAAM,CAACiB,MAAM;MACnBC,SAAS,EAAElB,MAAM,CAACmB,MAAM,CAAClB,OAAO,CAACK,SAAS;KAC3C,CAAC;;CAGP,CAAC,EACFR,GAAG,CAACK,IAAI,CAAC,kBAAkB,EAAE;EAC3BC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3Bc,OAAO,EAAEpB,MAAM,CAACY,KAAK,CACnBZ,MAAM,CAACa,MAAM,CAAC;MACZQ,UAAU,EAAErB,MAAM,CAACQ,MAAM;MACzBc,gBAAgB,EAAEtB,MAAM,CAACQ,MAAM;MAC/Be,cAAc,EAAEvB,MAAM,CAACmB,MAAM,CAACnB,MAAM,CAACQ,MAAM,CAAC;MAC5CgB,KAAK,EAAExB,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACQ,MAAM;KAClC,CAAC;;CAGP,CAAC,EACFV,GAAG,CAACK,IAAI,CAAC,gBAAgB,EAAE;EACzBC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3Be,UAAU,EAAErB,MAAM,CAACQ,MAAM;IACzBc,gBAAgB,EAAEtB,MAAM,CAACQ,MAAM;IAC/Be,cAAc,EAAEvB,MAAM,CAACmB,MAAM,CAACnB,MAAM,CAACQ,MAAM,CAAC;IAC5CgB,KAAK,EAAExB,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACQ,MAAM;;CAEpC,CAAC,CACH,CAACiB,MAAM,CAAC,QAAQ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"GuildRpcGroup.js","names":["Rpc","RpcGroup","Schema","Discord","GuildRpcGroup","make","payload","guild_id","Snowflake","guild_name","String","success","Boolean","channels","Array","Struct","channel_id","name","type","Number","parent_id","NullOr","members","discord_id","username","avatar","roles","prefix"],"sources":["../../../../src/rpc/guild/GuildRpcGroup.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,GAAG,EAAEC,QAAQ,QAAQ,aAAa;AAC3C,SAASC,MAAM,QAAQ,QAAQ;AAC/B,SAASC,OAAO,QAAQ,gBAAa;AAErC,OAAO,MAAMC,aAAa,gBAAGH,QAAQ,CAACI,IAAI,CACxCL,GAAG,CAACK,IAAI,CAAC,eAAe,EAAE;EACxBC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAAEC,UAAU,EAAEP,MAAM,CAACQ;EAAM;CAClE,CAAC,EACFV,GAAG,CAACK,IAAI,CAAC,iBAAiB,EAAE;EAC1BC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK;EAAS;CACvC,CAAC,EACFR,GAAG,CAACK,IAAI,CAAC,mBAAmB,EAAE;EAC5BC,OAAO,EAAE;IAAEC,QAAQ,EAAEJ,OAAO,CAACK;EAAS,CAAE;EACxCG,OAAO,EAAET,MAAM,CAACU;CACjB,CAAC,EACFZ,GAAG,CAACK,IAAI,CAAC,mBAAmB,EAAE;EAC5BC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3BK,QAAQ,EAAEX,MAAM,CAACY,KAAK,CACpBZ,MAAM,CAACa,MAAM,CAAC;MACZC,UAAU,EAAEb,OAAO,CAACK,SAAS;MAC7BS,IAAI,EAAEf,MAAM,CAACQ,MAAM;MACnBQ,IAAI,EAAEhB,MAAM,CAACiB,MAAM;MACnBC,SAAS,EAAElB,MAAM,CAACmB,MAAM,CAAClB,OAAO,CAACK,SAAS;KAC3C,CAAC;;CAGP,CAAC,EACFR,GAAG,CAACK,IAAI,CAAC,kBAAkB,EAAE;EAC3BC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3Bc,OAAO,EAAEpB,MAAM,CAACY,KAAK,CACnBZ,MAAM,CAACa,MAAM,CAAC;MACZQ,UAAU,EAAErB,MAAM,CAACQ,MAAM;MACzBc,QAAQ,EAAEtB,MAAM,CAACQ,MAAM;MACvBe,MAAM,EAAEvB,MAAM,CAACmB,MAAM,CAACnB,MAAM,CAACQ,MAAM,CAAC;MACpCgB,KAAK,EAAExB,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACQ,MAAM;KAClC,CAAC;;CAGP,CAAC,EACFV,GAAG,CAACK,IAAI,CAAC,gBAAgB,EAAE;EACzBC,OAAO,EAAE;IACPC,QAAQ,EAAEJ,OAAO,CAACK,SAAS;IAC3Be,UAAU,EAAErB,MAAM,CAACQ,MAAM;IACzBc,QAAQ,EAAEtB,MAAM,CAACQ,MAAM;IACvBe,MAAM,EAAEvB,MAAM,CAACmB,MAAM,CAACnB,MAAM,CAACQ,MAAM,CAAC;IACpCgB,KAAK,EAAExB,MAAM,CAACY,KAAK,CAACZ,MAAM,CAACQ,MAAM;;CAEpC,CAAC,CACH,CAACiB,MAAM,CAAC,QAAQ,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sideline/domain",
3
- "version": "0.7.1",
3
+ "version": "0.9.0",
4
4
  "description": "The domain template",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/api/Auth.ts CHANGED
@@ -25,8 +25,8 @@ export class UserTeam extends Schema.Class<UserTeam>('UserTeam')({
25
25
  export class CurrentUser extends Schema.Class<CurrentUser>('CurrentUser')({
26
26
  id: UserId,
27
27
  discordId: Schema.String,
28
- discordUsername: Schema.String,
29
- discordAvatar: Schema.NullOr(Schema.String),
28
+ username: Schema.String,
29
+ avatar: Schema.NullOr(Schema.String),
30
30
  isProfileComplete: Schema.Boolean,
31
31
  name: Schema.NullOr(Schema.String),
32
32
  birthDate: Schema.NullOr(Schema.String),
@@ -9,6 +9,7 @@ import { TeamMemberId } from '~/models/TeamMember.js';
9
9
  export class RsvpEntry extends Schema.Class<RsvpEntry>('RsvpEntry')({
10
10
  teamMemberId: TeamMemberId,
11
11
  memberName: Schema.NullOr(Schema.String),
12
+ username: Schema.NullOr(Schema.String),
12
13
  response: RsvpResponse,
13
14
  message: Schema.NullOr(Schema.String),
14
15
  }) {}
@@ -21,6 +22,7 @@ export class EventRsvpDetail extends Schema.Class<EventRsvpDetail>('EventRsvpDet
21
22
  noCount: Schema.Number,
22
23
  maybeCount: Schema.Number,
23
24
  canRsvp: Schema.Boolean,
25
+ minPlayersThreshold: Schema.Number,
24
26
  }) {}
25
27
 
26
28
  export class SubmitRsvpRequest extends Schema.Class<SubmitRsvpRequest>('SubmitRsvpRequest')({
@@ -46,6 +48,18 @@ export class RsvpDeadlinePassed extends Schema.TaggedError<RsvpDeadlinePassed>()
46
48
  HttpApiSchema.annotations({ status: 400 }),
47
49
  ) {}
48
50
 
51
+ export class NonResponderEntry extends Schema.Class<NonResponderEntry>('NonResponderEntry')({
52
+ teamMemberId: TeamMemberId,
53
+ memberName: Schema.NullOr(Schema.String),
54
+ username: Schema.NullOr(Schema.String),
55
+ }) {}
56
+
57
+ export class NonRespondersResponse extends Schema.Class<NonRespondersResponse>(
58
+ 'NonRespondersResponse',
59
+ )({
60
+ nonResponders: Schema.Array(NonResponderEntry),
61
+ }) {}
62
+
49
63
  export class EventRsvpApiGroup extends HttpApiGroup.make('eventRsvp')
50
64
  .add(
51
65
  HttpApiEndpoint.get('getRsvps', '/teams/:teamId/events/:eventId/rsvps')
@@ -64,4 +78,12 @@ export class EventRsvpApiGroup extends HttpApiGroup.make('eventRsvp')
64
78
  .setPath(Schema.Struct({ teamId: TeamId, eventId: EventId }))
65
79
  .setPayload(SubmitRsvpRequest)
66
80
  .middleware(AuthMiddleware),
81
+ )
82
+ .add(
83
+ HttpApiEndpoint.get('getNonResponders', '/teams/:teamId/events/:eventId/rsvps/non-responders')
84
+ .addSuccess(NonRespondersResponse)
85
+ .addError(Forbidden, { status: 403 })
86
+ .addError(EventNotFound, { status: 404 })
87
+ .setPath(Schema.Struct({ teamId: TeamId, eventId: EventId }))
88
+ .middleware(AuthMiddleware),
67
89
  ) {}
@@ -3,7 +3,7 @@ import { Schema } from 'effect';
3
3
  import { AuthMiddleware } from '~/api/Auth.js';
4
4
  import { Forbidden } from '~/api/EventApi.js';
5
5
  import {
6
- DayOfWeek,
6
+ DaysOfWeek,
7
7
  EventSeriesId,
8
8
  EventSeriesStatus,
9
9
  RecurrenceFrequency,
@@ -16,7 +16,7 @@ export class EventSeriesInfo extends Schema.Class<EventSeriesInfo>('EventSeriesI
16
16
  teamId: TeamId,
17
17
  title: Schema.String,
18
18
  frequency: RecurrenceFrequency,
19
- dayOfWeek: DayOfWeek,
19
+ daysOfWeek: DaysOfWeek,
20
20
  startDate: Schema.String,
21
21
  endDate: Schema.NullOr(Schema.String),
22
22
  status: EventSeriesStatus,
@@ -34,7 +34,7 @@ export class EventSeriesDetail extends Schema.Class<EventSeriesDetail>('EventSer
34
34
  title: Schema.String,
35
35
  description: Schema.NullOr(Schema.String),
36
36
  frequency: RecurrenceFrequency,
37
- dayOfWeek: DayOfWeek,
37
+ daysOfWeek: DaysOfWeek,
38
38
  startDate: Schema.String,
39
39
  endDate: Schema.NullOr(Schema.String),
40
40
  status: EventSeriesStatus,
@@ -55,7 +55,7 @@ export class CreateEventSeriesRequest extends Schema.Class<CreateEventSeriesRequ
55
55
  trainingTypeId: Schema.NullOr(TrainingTypeId),
56
56
  description: Schema.NullOr(Schema.String),
57
57
  frequency: RecurrenceFrequency,
58
- dayOfWeek: DayOfWeek,
58
+ daysOfWeek: DaysOfWeek,
59
59
  startDate: Schema.String,
60
60
  endDate: Schema.NullOr(Schema.String),
61
61
  startTime: Schema.String,
@@ -70,6 +70,7 @@ export class UpdateEventSeriesRequest extends Schema.Class<UpdateEventSeriesRequ
70
70
  title: Schema.optionalWith(Schema.NonEmptyString, { as: 'Option' }),
71
71
  trainingTypeId: Schema.optionalWith(Schema.OptionFromNullOr(TrainingTypeId), { as: 'Option' }),
72
72
  description: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
73
+ daysOfWeek: Schema.optionalWith(DaysOfWeek, { as: 'Option' }),
73
74
  startTime: Schema.optionalWith(Schema.String, { as: 'Option' }),
74
75
  endTime: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
75
76
  location: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), { as: 'Option' }),
@@ -32,7 +32,7 @@ export class GroupDetail extends Schema.Class<GroupDetail>('GroupDetail')({
32
32
  Schema.Struct({
33
33
  memberId: TeamMemberId,
34
34
  name: Schema.NullOr(Schema.String),
35
- discordUsername: Schema.String,
35
+ username: Schema.String,
36
36
  }),
37
37
  ),
38
38
  }) {}
package/src/api/Roster.ts CHANGED
@@ -17,8 +17,8 @@ export class RosterPlayer extends Schema.Class<RosterPlayer>('RosterPlayer')({
17
17
  birthDate: Schema.NullOr(Schema.String),
18
18
  gender: Schema.NullOr(Gender),
19
19
  jerseyNumber: Schema.NullOr(Schema.Number),
20
- discordUsername: Schema.String,
21
- discordAvatar: Schema.NullOr(Schema.String),
20
+ username: Schema.String,
21
+ avatar: Schema.NullOr(Schema.String),
22
22
  }) {}
23
23
 
24
24
  export class UpdatePlayerRequest extends Schema.Class<UpdatePlayerRequest>('UpdatePlayerRequest')({
@@ -7,6 +7,8 @@ import { TeamId } from '~/models/Team.js';
7
7
  export class TeamSettingsInfo extends Schema.Class<TeamSettingsInfo>('TeamSettingsInfo')({
8
8
  teamId: TeamId,
9
9
  eventHorizonDays: Schema.Int,
10
+ minPlayersThreshold: Schema.Int,
11
+ rsvpReminderHours: Schema.Int,
10
12
  discordChannelTraining: Schema.NullOr(Schema.String),
11
13
  discordChannelMatch: Schema.NullOr(Schema.String),
12
14
  discordChannelTournament: Schema.NullOr(Schema.String),
@@ -19,6 +21,12 @@ export class UpdateTeamSettingsRequest extends Schema.Class<UpdateTeamSettingsRe
19
21
  'UpdateTeamSettingsRequest',
20
22
  )({
21
23
  eventHorizonDays: Schema.Int.pipe(Schema.between(1, 365)),
24
+ minPlayersThreshold: Schema.optionalWith(Schema.Int.pipe(Schema.between(0, 100)), {
25
+ as: 'Option',
26
+ }),
27
+ rsvpReminderHours: Schema.optionalWith(Schema.Int.pipe(Schema.between(0, 168)), {
28
+ as: 'Option',
29
+ }),
22
30
  discordChannelTraining: Schema.optionalWith(Schema.OptionFromNullOr(Schema.String), {
23
31
  as: 'Option',
24
32
  }),
@@ -13,6 +13,9 @@ export type RecurrenceFrequency = typeof RecurrenceFrequency.Type;
13
13
  export const DayOfWeek = Schema.Int.pipe(Schema.between(0, 6), Schema.brand('DayOfWeek'));
14
14
  export type DayOfWeek = typeof DayOfWeek.Type;
15
15
 
16
+ export const DaysOfWeek = Schema.Array(DayOfWeek).pipe(Schema.minItems(1), Schema.maxItems(7));
17
+ export type DaysOfWeek = typeof DaysOfWeek.Type;
18
+
16
19
  export const EventSeriesStatus = Schema.Literal('active', 'cancelled');
17
20
  export type EventSeriesStatus = typeof EventSeriesStatus.Type;
18
21
 
@@ -26,7 +29,7 @@ export class EventSeries extends Model.Class<EventSeries>('EventSeries')({
26
29
  end_time: Schema.NullOr(Schema.String),
27
30
  location: Schema.NullOr(Schema.String),
28
31
  frequency: RecurrenceFrequency,
29
- day_of_week: DayOfWeek,
32
+ days_of_week: DaysOfWeek,
30
33
  start_date: Schema.DateFromSelf,
31
34
  end_date: Schema.NullOr(Schema.DateFromSelf),
32
35
  status: Model.FieldExcept('update')(EventSeriesStatus),
@@ -5,6 +5,8 @@ import { TeamId } from '~/models/Team.js';
5
5
  export class TeamSettings extends Model.Class<TeamSettings>('TeamSettings')({
6
6
  team_id: TeamId,
7
7
  event_horizon_days: Schema.Int,
8
+ min_players_threshold: Schema.Int,
9
+ rsvp_reminder_hours: Schema.Int,
8
10
  created_at: Model.DateTimeInsertFromDate,
9
11
  updated_at: Model.DateTimeUpdateFromDate,
10
12
  }) {}
@@ -14,8 +14,8 @@ export type Locale = typeof Locale.Type;
14
14
  export class User extends Model.Class<User>('User')({
15
15
  id: Model.Generated(UserId),
16
16
  discord_id: Schema.String,
17
- discord_username: Schema.String,
18
- discord_avatar: Schema.NullOr(Schema.String),
17
+ username: Schema.String,
18
+ avatar: Schema.NullOr(Schema.String),
19
19
  name: Schema.NullOr(Schema.String),
20
20
  birth_date: Schema.OptionFromNullOr(Schemas.DateTimeFromDate),
21
21
  gender: Schema.NullOr(Gender),
@@ -39,10 +39,21 @@ export class EventCancelledEvent extends Schema.TaggedClass<EventCancelledEvent>
39
39
  },
40
40
  ) {}
41
41
 
42
+ export class RsvpReminderEvent extends Schema.TaggedClass<RsvpReminderEvent>()('rsvp_reminder', {
43
+ id: Schema.String,
44
+ team_id: Team.TeamId,
45
+ guild_id: Discord.Snowflake,
46
+ event_id: Event.EventId,
47
+ title: Schema.String,
48
+ start_at: Schema.String,
49
+ discord_channel_id: Schema.NullOr(Schema.String),
50
+ }) {}
51
+
42
52
  export const UnprocessedEventSyncEvent = Schema.Union(
43
53
  EventCreatedEvent,
44
54
  EventUpdatedEvent,
45
55
  EventCancelledEvent,
56
+ RsvpReminderEvent,
46
57
  );
47
58
 
48
59
  export type UnprocessedEventSyncEvent = Schema.Schema.Type<typeof UnprocessedEventSyncEvent>;
@@ -4,6 +4,10 @@ import { Discord, Event, EventRsvp, Team } from '~/index.js';
4
4
  import { UnprocessedEventSyncEvent } from './EventRpcEvents.js';
5
5
  import {
6
6
  ChannelEventEntry,
7
+ CreateEventForbidden,
8
+ CreateEventInvalidDate,
9
+ CreateEventNotMember,
10
+ CreateEventResult,
7
11
  EventDiscordMessage,
8
12
  EventEmbedInfo,
9
13
  RsvpAttendeesResult,
@@ -11,6 +15,7 @@ import {
11
15
  RsvpDeadlinePassed,
12
16
  RsvpEventNotFound,
13
17
  RsvpMemberNotFound,
18
+ RsvpReminderSummary,
14
19
  } from './EventRpcModels.js';
15
20
 
16
21
  export const EventRpcGroup = RpcGroup.make(
@@ -62,4 +67,22 @@ export const EventRpcGroup = RpcGroup.make(
62
67
  payload: { event_id: Event.EventId, offset: Schema.Number, limit: Schema.Number },
63
68
  success: RsvpAttendeesResult,
64
69
  }),
70
+ Rpc.make('GetRsvpReminderSummary', {
71
+ payload: { event_id: Event.EventId },
72
+ success: RsvpReminderSummary,
73
+ }),
74
+ Rpc.make('CreateEvent', {
75
+ payload: {
76
+ guild_id: Discord.Snowflake,
77
+ discord_user_id: Discord.Snowflake,
78
+ event_type: Event.EventType,
79
+ title: Schema.String,
80
+ start_at: Schema.String,
81
+ end_at: Schema.NullOr(Schema.String),
82
+ location: Schema.NullOr(Schema.String),
83
+ description: Schema.NullOr(Schema.String),
84
+ },
85
+ success: CreateEventResult,
86
+ error: Schema.Union(CreateEventNotMember, CreateEventForbidden, CreateEventInvalidDate),
87
+ }),
65
88
  ).prefix('Event/');
@@ -49,6 +49,26 @@ export class RsvpEventNotFound extends Schema.TaggedError<RsvpEventNotFound>()(
49
49
  {},
50
50
  ) {}
51
51
 
52
+ export class CreateEventNotMember extends Schema.TaggedError<CreateEventNotMember>()(
53
+ 'CreateEventNotMember',
54
+ {},
55
+ ) {}
56
+
57
+ export class CreateEventForbidden extends Schema.TaggedError<CreateEventForbidden>()(
58
+ 'CreateEventForbidden',
59
+ {},
60
+ ) {}
61
+
62
+ export class CreateEventInvalidDate extends Schema.TaggedError<CreateEventInvalidDate>()(
63
+ 'CreateEventInvalidDate',
64
+ {},
65
+ ) {}
66
+
67
+ export class CreateEventResult extends Schema.Class<CreateEventResult>('CreateEventResult')({
68
+ event_id: Schema.String,
69
+ title: Schema.String,
70
+ }) {}
71
+
52
72
  export class RsvpAttendeeEntry extends Schema.Class<RsvpAttendeeEntry>('RsvpAttendeeEntry')({
53
73
  discord_id: Schema.NullOr(Schema.String),
54
74
  name: Schema.NullOr(Schema.String),
@@ -60,3 +80,18 @@ export class RsvpAttendeesResult extends Schema.Class<RsvpAttendeesResult>('Rsvp
60
80
  attendees: Schema.Array(RsvpAttendeeEntry),
61
81
  total: Schema.Number,
62
82
  }) {}
83
+
84
+ export class NonResponderRpcEntry extends Schema.Class<NonResponderRpcEntry>(
85
+ 'NonResponderRpcEntry',
86
+ )({
87
+ discord_id: Schema.NullOr(Schema.String),
88
+ name: Schema.NullOr(Schema.String),
89
+ username: Schema.NullOr(Schema.String),
90
+ }) {}
91
+
92
+ export class RsvpReminderSummary extends Schema.Class<RsvpReminderSummary>('RsvpReminderSummary')({
93
+ yesCount: Schema.Number,
94
+ noCount: Schema.Number,
95
+ maybeCount: Schema.Number,
96
+ nonResponders: Schema.Array(NonResponderRpcEntry),
97
+ }) {}
@@ -32,8 +32,8 @@ export const GuildRpcGroup = RpcGroup.make(
32
32
  members: Schema.Array(
33
33
  Schema.Struct({
34
34
  discord_id: Schema.String,
35
- discord_username: Schema.String,
36
- discord_avatar: Schema.NullOr(Schema.String),
35
+ username: Schema.String,
36
+ avatar: Schema.NullOr(Schema.String),
37
37
  roles: Schema.Array(Schema.String),
38
38
  }),
39
39
  ),
@@ -43,8 +43,8 @@ export const GuildRpcGroup = RpcGroup.make(
43
43
  payload: {
44
44
  guild_id: Discord.Snowflake,
45
45
  discord_id: Schema.String,
46
- discord_username: Schema.String,
47
- discord_avatar: Schema.NullOr(Schema.String),
46
+ username: Schema.String,
47
+ avatar: Schema.NullOr(Schema.String),
48
48
  roles: Schema.Array(Schema.String),
49
49
  },
50
50
  }),