Skip to content

Commit 21c4bef

Browse files
authored
Merge pull request #33 from fmeringdal/make_some_public
Make some public
2 parents ebb9284 + a7cbca2 commit 21c4bef

File tree

38 files changed

+190
-412
lines changed

38 files changed

+190
-412
lines changed

scheduler/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name = "nettu_scheduler"
33
version = "0.1.0"
44
authors = ["Fredrik Meringdal"]
55
edition = "2018"
6+
default-run = "nettu_scheduler"
67

78
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
89

scheduler/clients/rust/src/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ pub use nettu_scheduler_api_structs::dtos::*;
2222
pub use nettu_scheduler_api_structs::send_event_reminders::AccountRemindersDTO as AccountReminders;
2323
pub use nettu_scheduler_domain::{
2424
providers::google::*, providers::outlook::*, scheduling::RoundRobinAlgorithm, BusyCalendar,
25-
CalendarEventReminder, IntegrationProvider, Metadata, RRuleOptions, ScheduleRule,
26-
ServiceMultiPersonOptions, SyncedCalendar, TimePlan, ID,
25+
CalendarEventReminder, IntegrationProvider, Metadata, RRuleFrequency, RRuleOptions,
26+
ScheduleRule, ServiceMultiPersonOptions, SyncedCalendar, TimePlan, ID,
2727
};
2828
use schedule::ScheduleClient;
2929
pub use schedule::{CreateScheduleInput, UpdateScheduleInput};
@@ -54,8 +54,7 @@ pub use nettu_scheduler_api_structs::dtos::ServiceResourceDTO as ServiceResource
5454
pub use nettu_scheduler_api_structs::dtos::ServiceWithUsersDTO as Service;
5555
pub use nettu_scheduler_api_structs::dtos::UserDTO as User;
5656

57-
pub use nettu_scheduler_domain::Tz;
58-
pub use nettu_scheduler_domain::Weekday;
57+
pub use nettu_scheduler_domain::{Month, Tz, WeekDay, Weekday};
5958

6059
/// Nettu Scheduler Server SDK
6160
///

scheduler/crates/api/src/account/add_account_integration.rs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub async fn add_account_integration_controller(
2727
.map_err(NettuError::from)
2828
}
2929

30-
#[derive(Debug)]
30+
#[derive(Debug, Clone)]
3131
pub struct AddAccountIntegrationUseCase {
3232
pub account: Account,
3333
pub client_id: String,
@@ -36,6 +36,18 @@ pub struct AddAccountIntegrationUseCase {
3636
pub provider: IntegrationProvider,
3737
}
3838

39+
impl From<AddAccountIntegrationUseCase> for AccountIntegration {
40+
fn from(e: AddAccountIntegrationUseCase) -> Self {
41+
Self {
42+
account_id: e.account.id,
43+
client_id: e.client_id,
44+
client_secret: e.client_secret,
45+
redirect_uri: e.redirect_uri,
46+
provider: e.provider,
47+
}
48+
}
49+
}
50+
3951
#[derive(Debug, PartialEq)]
4052
pub enum UseCaseError {
4153
StorageError,
@@ -53,6 +65,12 @@ impl From<UseCaseError> for NettuError {
5365
}
5466
}
5567

68+
impl From<anyhow::Error> for UseCaseError {
69+
fn from(_: anyhow::Error) -> Self {
70+
UseCaseError::StorageError
71+
}
72+
}
73+
5674
#[async_trait::async_trait(?Send)]
5775
impl UseCase for AddAccountIntegrationUseCase {
5876
type Response = ();
@@ -68,25 +86,15 @@ impl UseCase for AddAccountIntegrationUseCase {
6886
.repos
6987
.account_integrations
7088
.find(&self.account.id)
71-
.await
72-
.map_err(|_| UseCaseError::StorageError)?;
89+
.await?;
7390
if acc_integrations.iter().any(|i| i.provider == self.provider) {
7491
return Err(UseCaseError::IntegrationAlreadyExists);
7592
}
7693

77-
let integration = AccountIntegration {
78-
account_id: self.account.id.clone(),
79-
client_id: self.client_id.clone(),
80-
client_secret: self.client_secret.clone(),
81-
redirect_uri: self.redirect_uri.clone(),
82-
provider: self.provider.clone(),
83-
};
84-
8594
ctx.repos
8695
.account_integrations
87-
.insert(&integration)
88-
.await
89-
.map_err(|_| UseCaseError::StorageError)?;
96+
.insert(&self.clone().into())
97+
.await?;
9098

9199
Ok(())
92100
}

scheduler/crates/api/src/account/remove_account_integration.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,13 @@ impl From<UseCaseError> for NettuError {
4949
}
5050
}
5151
}
52+
53+
impl From<anyhow::Error> for UseCaseError {
54+
fn from(_: anyhow::Error) -> Self {
55+
UseCaseError::StorageError
56+
}
57+
}
58+
5259
#[async_trait::async_trait(?Send)]
5360
impl UseCase for RemoveAccountIntegrationUseCase {
5461
type Response = ();
@@ -62,16 +69,15 @@ impl UseCase for RemoveAccountIntegrationUseCase {
6269
.repos
6370
.account_integrations
6471
.find(&self.account.id)
65-
.await
66-
.map_err(|_| UseCaseError::StorageError)?;
72+
.await?;
6773
if !acc_integrations.iter().any(|i| i.provider == self.provider) {
6874
return Err(UseCaseError::IntegrationNotFound);
6975
}
7076

7177
ctx.repos
7278
.account_integrations
7379
.delete(&self.account.id, self.provider.clone())
74-
.await
75-
.map_err(|_| UseCaseError::StorageError)
80+
.await?;
81+
Ok(())
7682
}
7783
}

scheduler/crates/api/src/account/set_account_webhook.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ impl From<UseCaseError> for NettuError {
4545
}
4646
}
4747
}
48+
4849
#[async_trait::async_trait(?Send)]
4950
impl UseCase for SetAccountWebhookUseCase {
5051
type Response = Account;

scheduler/crates/api/src/calendar/add_sync_calendar.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ impl UseCase for AddSyncCalendarUseCase {
153153
.map_err(|_| UseCaseError::StorageError)?;
154154

155155
if !outlook_calendars
156-
.value
157156
.into_iter()
158157
.map(|c| c.id)
159158
.any(|outlook_calendar_id| outlook_calendar_id == self.ext_calendar_id)

scheduler/crates/api/src/calendar/get_outlook_calendars.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,5 @@ impl UseCase for GetOutlookCalendarsUseCase {
8989
.list(self.min_access_role.clone())
9090
.await
9191
.map_err(|_| UseCaseError::OutlookQuery)
92-
.map(|res| res.value)
9392
}
9493
}

scheduler/crates/api/src/calendar/remove_sync_calendar.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ enum UseCaseError {
8181
StorageError,
8282
}
8383

84+
impl From<anyhow::Error> for UseCaseError {
85+
fn from(_: anyhow::Error) -> Self {
86+
UseCaseError::StorageError
87+
}
88+
}
89+
8490
#[async_trait::async_trait(?Send)]
8591
impl UseCase for RemoveSyncCalendarUseCase {
8692
type Response = ();
@@ -95,17 +101,13 @@ impl UseCase for RemoveSyncCalendarUseCase {
95101
.repos
96102
.calendar_synced
97103
.find_by_calendar(&self.calendar_id)
98-
.await
99-
.map_err(|_| UseCaseError::StorageError)?
104+
.await?
100105
.into_iter()
101106
.find(|c| c.provider == self.provider && c.ext_calendar_id == self.ext_calendar_id)
102107
.ok_or(UseCaseError::SyncNotFound)?;
103108

104-
ctx.repos
105-
.calendar_synced
106-
.delete(&sync_calendar)
107-
.await
108-
.map_err(|_| UseCaseError::StorageError)
109+
ctx.repos.calendar_synced.delete(&sync_calendar).await?;
110+
Ok(())
109111
}
110112
}
111113

scheduler/crates/api/src/event/create_event.rs

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub async fn create_event_controller(
6666
.map_err(NettuError::from)
6767
}
6868

69-
#[derive(Debug)]
69+
#[derive(Debug, Default)]
7070
pub struct CreateEventUseCase {
7171
pub calendar_id: ID,
7272
pub user: User,
@@ -105,6 +105,12 @@ impl From<UseCaseError> for NettuError {
105105
}
106106
}
107107

108+
impl From<anyhow::Error> for UseCaseError {
109+
fn from(_: anyhow::Error) -> Self {
110+
UseCaseError::StorageError
111+
}
112+
}
113+
108114
#[async_trait::async_trait(?Send)]
109115
impl UseCase for CreateEventUseCase {
110116
type Response = CalendarEvent;
@@ -150,11 +156,7 @@ impl UseCase for CreateEventUseCase {
150156
}
151157
}
152158

153-
ctx.repos
154-
.events
155-
.insert(&e)
156-
.await
157-
.map_err(|_| UseCaseError::StorageError)?;
159+
ctx.repos.events.insert(&e).await?;
158160

159161
Ok(e)
160162
}
@@ -215,13 +217,9 @@ mod test {
215217
let mut usecase = CreateEventUseCase {
216218
start_ts: 500,
217219
duration: 800,
218-
recurrence: None,
219-
busy: false,
220220
calendar_id: calendar.id.clone(),
221221
user,
222-
reminders: Vec::new(),
223-
service_id: None,
224-
metadata: Default::default(),
222+
..Default::default()
225223
};
226224

227225
let res = usecase.execute(&ctx).await;
@@ -242,12 +240,9 @@ mod test {
242240
start_ts: 500,
243241
duration: 800,
244242
recurrence: Some(Default::default()),
245-
busy: false,
246243
calendar_id: calendar.id.clone(),
247244
user,
248-
reminders: Vec::new(),
249-
service_id: None,
250-
metadata: Default::default(),
245+
..Default::default()
251246
};
252247

253248
let res = usecase.execute(&ctx).await;
@@ -268,12 +263,8 @@ mod test {
268263
start_ts: 500,
269264
duration: 800,
270265
recurrence: Some(Default::default()),
271-
busy: false,
272-
calendar_id: ID::default(),
273266
user,
274-
reminders: Vec::new(),
275-
service_id: None,
276-
metadata: Default::default(),
267+
..Default::default()
277268
};
278269

279270
let res = usecase.execute(&ctx).await;
@@ -307,12 +298,9 @@ mod test {
307298
start_ts: 500,
308299
duration: 800,
309300
recurrence: Some(rrule),
310-
busy: false,
311301
calendar_id: calendar.id.clone(),
312302
user: user.clone(),
313-
reminders: Vec::new(),
314-
service_id: None,
315-
metadata: Default::default(),
303+
..Default::default()
316304
};
317305

318306
let res = usecase.execute(&ctx).await;

scheduler/crates/api/src/event/get_upcoming_reminders.rs

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ mod tests {
199199
calendar_id: calendar.id.clone(),
200200
start_ts: ctx.sys.get_timestamp_millis(),
201201
duration: 1000 * 60 * 60 * 2,
202-
busy: false,
203202
recurrence: Some(Default::default()),
204203
reminders: vec![
205204
CalendarEventReminder {
@@ -211,8 +210,7 @@ mod tests {
211210
identifier: "".into(),
212211
},
213212
],
214-
service_id: None,
215-
metadata: Default::default(),
213+
..Default::default()
216214
};
217215

218216
execute(usecase, &ctx).await.unwrap();
@@ -223,14 +221,11 @@ mod tests {
223221
user,
224222
start_ts: sys3.get_timestamp_millis() + 1000 * 60 * 5,
225223
duration: 1000 * 60 * 60 * 2,
226-
busy: false,
227-
recurrence: None,
228224
reminders: vec![CalendarEventReminder {
229225
delta: -10,
230226
identifier: "".into(),
231227
}],
232-
service_id: None,
233-
metadata: Default::default(),
228+
..Default::default()
234229
};
235230

236231
execute(usecase, &ctx).await.unwrap();
@@ -290,14 +285,12 @@ mod tests {
290285
user: user.clone(),
291286
start_ts: initial_start_ts,
292287
duration: 1000 * 60 * 60 * 2,
293-
busy: false,
294288
recurrence: Some(Default::default()),
295289
reminders: vec![CalendarEventReminder {
296290
delta,
297291
identifier: "".into(),
298292
}],
299-
service_id: None,
300-
metadata: Default::default(),
293+
..Default::default()
301294
};
302295

303296
let calendar_event = execute(usecase, &ctx).await.unwrap();
@@ -318,17 +311,13 @@ mod tests {
318311
let update_event_usecase = UpdateEventUseCase {
319312
event_id: calendar_event.id,
320313
user,
321-
busy: None,
322-
duration: None,
323-
exdates: None,
324-
metadata: None,
325314
reminders: Some(vec![CalendarEventReminder {
326315
delta,
327316
identifier: "".into(),
328317
}]),
329318
recurrence: Some(Default::default()),
330-
service_id: None,
331319
start_ts: Some(new_start),
320+
..Default::default()
332321
};
333322
execute(update_event_usecase, &ctx).await.unwrap();
334323
let new_reminders = ctx.repos.reminders.delete_all_before(new_start).await;
@@ -359,14 +348,12 @@ mod tests {
359348
calendar_id: calendar.id.clone(),
360349
start_ts: now,
361350
duration: 1000 * 60 * 60 * 2,
362-
busy: false,
363351
recurrence: Some(Default::default()),
364352
reminders: vec![CalendarEventReminder {
365353
delta,
366354
identifier: "".into(),
367355
}],
368-
service_id: None,
369-
metadata: Default::default(),
356+
..Default::default()
370357
};
371358

372359
let calendar_event = execute(usecase, &ctx).await.unwrap();
@@ -385,14 +372,9 @@ mod tests {
385372
let update_event_usecase = UpdateEventUseCase {
386373
user: user.clone(),
387374
event_id: calendar_event.id.clone(),
388-
busy: None,
389-
duration: None,
390-
exdates: None,
391-
metadata: None,
392375
reminders: Some(Vec::new()),
393376
recurrence: Some(Default::default()),
394-
service_id: None,
395-
start_ts: None,
377+
..Default::default()
396378
};
397379
execute(update_event_usecase, &ctx).await.unwrap();
398380
let new_reminders = ctx.repos.reminders.delete_all_before(remind_at).await;
@@ -421,14 +403,12 @@ mod tests {
421403
calendar_id: calendar.id.clone(),
422404
start_ts: now,
423405
duration: 1000 * 60 * 60 * 2,
424-
busy: false,
425406
recurrence: Some(Default::default()),
426407
reminders: vec![CalendarEventReminder {
427408
delta,
428409
identifier: "".into(),
429410
}],
430-
service_id: None,
431-
metadata: Default::default(),
411+
..Default::default()
432412
};
433413

434414
let calendar_event = execute(usecase, &ctx).await.unwrap();

0 commit comments

Comments
 (0)