@m481/mp-sdk-ng 0.1.2-alpha.2 → 0.1.2-alpha.20

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.
@@ -18,6 +18,7 @@ class CalendarShiftModel extends BaseModel {
18
18
  shiftId;
19
19
  startAt;
20
20
  endAt;
21
+ assignedUsersIds;
21
22
  }
22
23
 
23
24
  class EventModel extends BaseModel {
@@ -50,11 +51,13 @@ class ShiftModel extends BaseModel {
50
51
  assignedUsersIds;
51
52
  mission;
52
53
  timespan;
54
+ startAt;
53
55
  isEnabled;
54
56
  }
55
57
 
56
58
  class UserModel extends BaseModel {
57
59
  email;
60
+ username;
58
61
  verified;
59
62
  name;
60
63
  teamsAdmin;
@@ -67,6 +70,7 @@ class UserModel extends BaseModel {
67
70
 
68
71
  class TeamModel extends BaseModel {
69
72
  name;
73
+ slug;
70
74
  isEnabled;
71
75
  }
72
76
 
@@ -302,16 +306,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
302
306
  }] });
303
307
 
304
308
  class BasePocket extends BaseSdk {
305
- connection;
309
+ client;
310
+ filterData;
306
311
  connect() {
307
- if (!this.connection) {
308
- this.connection = new PocketBase(this.config.baseUrl);
312
+ if (!this.client) {
313
+ this.client = new PocketBase(this.config.baseUrl);
309
314
  }
310
315
  }
311
316
  getList(entity, options) {
312
317
  this.connect();
313
318
  this.log.d("getList --- entity", entity, this.authStore.getToken());
314
- return from(this.connection.collection(entity).getList(1, 20, this.buildOptions(options))).pipe(catchError$1(err => this.handleError(err)), map(d => (d ? {
319
+ const listOpts = options || {};
320
+ if (this.filterData) {
321
+ listOpts.filter = this.client.filter(this.filterData.criteria, this.filterData.params);
322
+ }
323
+ return from(this.client.collection(entity).getList(1, 20, this.buildOptions(listOpts))).pipe(catchError$1(err => this.handleError(err)), map(d => (d ? {
315
324
  page: d.page,
316
325
  pageSize: d.perPage,
317
326
  pagesTotal: d.totalPages,
@@ -322,12 +331,12 @@ class BasePocket extends BaseSdk {
322
331
  getOne(entity, id, options) {
323
332
  this.connect();
324
333
  this.log.d("fetchOne", entity, this.authStore.getToken());
325
- return from(this.connection.collection(entity).getOne(id, this.buildOptions(options))).pipe(catchError$1(err => this.handleError(err)));
334
+ return from(this.client.collection(entity).getOne(id, this.buildOptions(options))).pipe(catchError$1(err => this.handleError(err)));
326
335
  }
327
336
  save(entity, data) {
328
337
  this.connect();
329
338
  this.log.d("save", entity, data?.id, this.authStore.getToken());
330
- const target = this.connection.collection(entity);
339
+ const target = this.client.collection(entity);
331
340
  let promise;
332
341
  if (data.id) {
333
342
  promise = target.update(data.id, data, this.getAuthHeader());
@@ -340,7 +349,7 @@ class BasePocket extends BaseSdk {
340
349
  remove(entity, id) {
341
350
  this.connect();
342
351
  this.log.d("remove", entity, this.authStore.getToken());
343
- return from(this.connection.collection(entity).delete(id, this.getAuthHeader())).pipe(catchError$1(err => this.handleError(err)));
352
+ return from(this.client.collection(entity).delete(id, this.getAuthHeader())).pipe(catchError$1(err => this.handleError(err)));
344
353
  }
345
354
  handleError(error) {
346
355
  if (error instanceof ClientResponseError) {
@@ -393,7 +402,7 @@ class AuthService extends BasePocket {
393
402
  }
394
403
  login(user, pass) {
395
404
  this.connect();
396
- return from(this.connection.collection(SdkConfig.Entities.AUTH).authWithPassword(user, pass)).pipe(catchError$1(err => this.handleError(err)), map(data => {
405
+ return from(this.client.collection(SdkConfig.Entities.AUTH).authWithPassword(user, pass)).pipe(catchError$1(err => this.handleError(err)), map(data => {
397
406
  this.log.d("login ok", data);
398
407
  this.authStore.setToken(data.token);
399
408
  return data.record;
@@ -410,8 +419,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
410
419
  }], ctorParameters: () => [] });
411
420
 
412
421
  class BaseResource extends BasePocket {
422
+ FilterMeta = "isEnabled = {:isEnabled}";
423
+ FilterMetaParams = {
424
+ isEnabled: true
425
+ };
426
+ listOptions;
413
427
  fetchList() {
414
- return this.getList(this.Entity, this.Options);
428
+ return this.getList(this.Entity, this.listOptions);
415
429
  }
416
430
  fetchOne(id) {
417
431
  return this.getOne(this.Entity, id);
@@ -425,6 +439,9 @@ class BaseResource extends BasePocket {
425
439
  delete(id) {
426
440
  return this.remove(this.Entity, id);
427
441
  }
442
+ setFilterDefaults() {
443
+ this.filterData = { criteria: this.FilterMeta, params: this.FilterMetaParams };
444
+ }
428
445
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: BaseResource, deps: null, target: i0.ɵɵFactoryTarget.Directive });
429
446
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.14", type: BaseResource, isStandalone: true, usesInheritance: true, ngImport: i0 });
430
447
  }
@@ -433,16 +450,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
433
450
  }] });
434
451
 
435
452
  class MissionsService extends BaseResource {
436
- Options = {
437
- filter: "isEnabled = true"
438
- };
439
453
  Entity = SdkConfig.Entities.MISSIONS;
440
454
  constructor() {
441
455
  super();
442
456
  }
457
+ fetchList() {
458
+ this.setFilterDefaults();
459
+ return super.fetchList();
460
+ }
443
461
  getArchived() {
444
462
  return this.getList(SdkConfig.Entities.MISSIONS, {
445
- filter: "isEnabled = false"
463
+ filter: this.client.filter(this.FilterMeta, { isEnabled: false })
446
464
  });
447
465
  }
448
466
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -453,41 +471,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
453
471
  }], ctorParameters: () => [] });
454
472
 
455
473
  class ShiftsService extends BaseResource {
456
- Options = {
457
- filter: "isEnabled = true"
458
- };
459
474
  Entity = SdkConfig.Entities.SHIFTS;
460
475
  constructor() {
461
476
  super();
462
477
  }
478
+ fetch(startDate) {
479
+ this.listOptions = { perPage: 100 };
480
+ this.setFilterDefaults();
481
+ if (startDate) {
482
+ this.filterData.criteria += " && startAt >= {:startAt}";
483
+ this.filterData.params["startAt"] = new Date(startDate);
484
+ }
485
+ return this.fetchList();
486
+ }
487
+ searchByMissionAndHour(missionId, missionHourIndex) {
488
+ this.listOptions = { perPage: 100 };
489
+ this.setFilterDefaults();
490
+ this.filterData.criteria += ` && missionId = "${missionId}" && missionHourIndex = ${missionHourIndex}`;
491
+ return this.fetchList();
492
+ }
463
493
  create(data) {
464
- const repeat = data.timespan;
465
- if (!repeat) {
466
- return throwError(() => new Error('No repeat data provided'));
494
+ if (data.timespan) {
495
+ data.timespan.daysOfWeek = (data.timespan.daysOfWeek || []).map(d => d > 6 ? 0 : d);
496
+ data.startAt = !!data.timespan.initialAt ? new Date(data.timespan?.initialAt) : null;
467
497
  }
468
- // Generate CalendarShifts based on repeat configuration
469
- const calendarShifts = this.generateCalendarShifts(repeat);
470
- // Create the main Shift first
471
- return super.create(data).pipe(switchMap(createdShift => {
472
- // Assign the shiftId to all generated CalendarShifts
473
- const shiftsToCreate = calendarShifts.map(cs => ({
474
- shiftId: createdShift.id,
475
- startAt: cs.startAt,
476
- endAt: cs.endAt
477
- }));
478
- // Create all CalendarShifts in batch
479
- return this.createCalendarShiftsBatch(shiftsToCreate).pipe(
480
- // If successful, return the created shift
481
- switchMap(() => from([createdShift])),
482
- // If CalendarShift creation fails, rollback
483
- catchError$1(error => {
484
- this.log.e('Error creating calendar shifts, rolling back...', error);
485
- return this.delete(createdShift.id).pipe(switchMap(() => throwError(() => new Error('Failed to create calendar shifts. Shift has been rolled back.'))));
486
- }));
487
- }), catchError$1(error => {
488
- this.log.e('Error creating shift', error);
489
- return throwError(() => error);
490
- }));
498
+ return super.create(data);
491
499
  }
492
500
  delete(id) {
493
501
  this.connect();
@@ -513,114 +521,43 @@ class ShiftsService extends BaseResource {
513
521
  return throwError(() => error);
514
522
  }));
515
523
  }
516
- getCalendarShifts(year) {
517
- this.log.d('Fetching calendar shifts');
518
- const y = year || new Date().getFullYear();
519
- const startDate = new Date(y, 0, 1);
520
- const endDate = new Date(y, 11, 31);
521
- const startAt = startDate.getTime();
522
- const endAt = endDate.getTime();
523
- this.log.d(`Fetching calendar shifts for year ${y}`, `Start date: ${startDate.toISOString()}`, `End date: ${endDate.toISOString()}`, `Start at: ${startAt}`, `End at: ${endAt}`);
524
- const filter = `startAt = "${startAt}" AND endAt = "${endAt}"`;
525
- return from(this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
526
- .getFullList({ filter, ...this.getAuthHeader() })).pipe(catchError$1(err => this.handleError(err)));
527
- }
528
- /**
529
- * Generates CalendarShifts based on repeat configuration
530
- */
531
- generateCalendarShifts(repeat) {
532
- const shifts = [];
533
- const startDate = new Date(repeat.initDate);
534
- let currentDate = new Date(startDate);
535
- let occurrenceCount = 0;
536
- // Determine the end date
537
- const endDate = repeat.finalizeDate
538
- ? new Date(repeat.finalizeDate)
539
- : this.calculateEndDateByOccurrences(startDate, repeat);
540
- while (currentDate <= endDate) {
541
- // Check if we've reached the maximum number of occurrences
542
- if (repeat.occurrences && occurrenceCount >= repeat.occurrences) {
543
- break;
544
- }
545
- // Add shift based on recurrence type
546
- if (this.shouldAddShift(currentDate, repeat)) {
547
- const shift = new CalendarShiftModel();
548
- shift.startAt = currentDate.getTime();
549
- // Assume each shift lasts until end of day (you can adjust this)
550
- const endDateTime = new Date(currentDate);
551
- endDateTime.setHours(23, 59, 59, 999);
552
- shift.endAt = endDateTime.getTime();
553
- shifts.push(shift);
554
- occurrenceCount++;
524
+ assignUsersToCalendarShift(calendarShiftId, userIds) {
525
+ this.log.d('Assigning users to calendar shift', calendarShiftId, userIds);
526
+ return from(this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
527
+ .update(calendarShiftId, { assignedUsersIds: userIds }, this.getAuthHeader())).pipe(tap(record => this.log.d('Assigned users to calendar shift', record)), map(record => !!record));
528
+ }
529
+ getCalendarShifts(dates, pageSize = 1000) {
530
+ this.log.d('Fetching calendar shifts', dates);
531
+ if (dates?.length > 0) {
532
+ this.filterData = {
533
+ criteria: "startAt >= {:startAt}",
534
+ params: { startAt: new Date(dates[0]) }
535
+ };
536
+ if (dates.length > 1) {
537
+ this.filterData.criteria += " && endAt <= {:endAt}";
538
+ this.filterData.params["endAt"] = new Date(dates[1]);
555
539
  }
556
- // Move to next period
557
- currentDate = this.getNextDate(currentDate, repeat);
558
540
  }
559
- return shifts;
560
- }
561
- /**
562
- * Determines if a shift should be added on the current date
563
- */
564
- shouldAddShift(date, repeat) {
565
- switch (repeat.type) {
566
- case RecurrenceType.DAILY:
567
- return true;
568
- case RecurrenceType.WEEKLY:
569
- if (repeat.daysOfWeek && repeat.daysOfWeek.length > 0) {
570
- const dayOfWeek = date.getDay();
571
- return repeat.daysOfWeek.includes(dayOfWeek);
572
- }
573
- return true;
574
- case RecurrenceType.MONTHLY:
575
- if (repeat.dayOfMonth) {
576
- return date.getDate() === repeat.dayOfMonth;
577
- }
578
- return true;
579
- default:
580
- return false;
581
- }
582
- }
583
- /**
584
- * Calculates the next date based on recurrence type
585
- */
586
- getNextDate(currentDate, repeat) {
587
- const nextDate = new Date(currentDate);
588
- switch (repeat.type) {
589
- case RecurrenceType.DAILY:
590
- nextDate.setDate(nextDate.getDate() + repeat.interval);
591
- break;
592
- case RecurrenceType.WEEKLY:
593
- nextDate.setDate(nextDate.getDate() + (7 * repeat.interval));
594
- break;
595
- case RecurrenceType.MONTHLY:
596
- nextDate.setMonth(nextDate.getMonth() + repeat.interval);
597
- break;
541
+ const listOpts = {};
542
+ if (this.filterData) {
543
+ listOpts.filter = this.client.filter(this.filterData.criteria, this.filterData.params);
598
544
  }
599
- return nextDate;
545
+ return from(this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
546
+ .getList(1, pageSize, this.buildOptions(listOpts))).pipe(catchError$1(err => this.handleError(err)));
600
547
  }
601
- /**
602
- * Calculates the end date based on number of occurrences
603
- */
604
- calculateEndDateByOccurrences(startDate, repeat) {
605
- if (!repeat.occurrences) {
606
- // If no occurrences defined, set a reasonable limit (e.g., 1 year)
607
- const defaultEnd = new Date(startDate);
608
- defaultEnd.setFullYear(defaultEnd.getFullYear() + 1);
609
- return defaultEnd;
610
- }
611
- let estimatedEnd = new Date(startDate);
612
- switch (repeat.type) {
613
- case RecurrenceType.DAILY:
614
- estimatedEnd.setDate(estimatedEnd.getDate() + (repeat.occurrences * repeat.interval));
615
- break;
616
- case RecurrenceType.WEEKLY:
617
- estimatedEnd.setDate(estimatedEnd.getDate() + (repeat.occurrences * 7 * repeat.interval));
618
- break;
619
- case RecurrenceType.MONTHLY:
620
- estimatedEnd.setMonth(estimatedEnd.getMonth() + (repeat.occurrences * repeat.interval));
621
- break;
622
- }
623
- return estimatedEnd;
548
+ getCalendarShiftsByYear(year) {
549
+ this.log.d('Fetching calendar shifts per year');
550
+ const y = year || new Date().getFullYear();
551
+ const dates = [
552
+ (new Date(y, 0, 1)).getTime(),
553
+ (new Date(y, 11, 31)).getTime()
554
+ ];
555
+ return this.getCalendarShifts(dates);
556
+ }
557
+ deleteCalendarShiftById(id) {
558
+ this.log.d('Deleting calendar shift', id);
559
+ return from(this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
560
+ .delete(id, this.getAuthHeader()));
624
561
  }
625
562
  /**
626
563
  * Fetches all CalendarShifts associated with a specific Shift ID
@@ -628,7 +565,7 @@ class ShiftsService extends BaseResource {
628
565
  getCalendarShiftsByShiftId(shiftId) {
629
566
  this.log.d('Fetching calendar shifts for shift', shiftId);
630
567
  const filter = `shiftId = "${shiftId}"`;
631
- return from(this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
568
+ return from(this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
632
569
  .getFullList({ filter, ...this.getAuthHeader() })).pipe(catchError$1(err => this.handleError(err)));
633
570
  }
634
571
  /**
@@ -641,7 +578,7 @@ class ShiftsService extends BaseResource {
641
578
  this.log.d('Deleting calendar shifts batch', calendarShiftIds.length);
642
579
  // PocketBase batch ops could be disabled,
643
580
  // so we create a manual transaction using Promise.all
644
- const promises = calendarShiftIds.map(id => this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
581
+ const promises = calendarShiftIds.map(id => this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
645
582
  .delete(id, this.getAuthHeader()));
646
583
  return from(Promise.all(promises)).pipe(switchMap(() => from([true])), catchError$1(err => this.handleError(err)));
647
584
  }
@@ -654,7 +591,7 @@ class ShiftsService extends BaseResource {
654
591
  }
655
592
  this.log.d('Restoring calendar shifts', calendarShifts.length);
656
593
  // Recreate the CalendarShifts with their original data
657
- const promises = calendarShifts.map(cs => this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
594
+ const promises = calendarShifts.map(cs => this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
658
595
  .create({
659
596
  shiftId: cs.shiftId,
660
597
  startAt: cs.startAt,
@@ -665,22 +602,6 @@ class ShiftsService extends BaseResource {
665
602
  return this.handleError(err);
666
603
  }));
667
604
  }
668
- /**
669
- * Creates multiple CalendarShifts
670
- * TODO move to backend?
671
- */
672
- createCalendarShiftsBatch(shifts) {
673
- this.connect();
674
- if (shifts.length === 0) {
675
- return from([]);
676
- }
677
- this.log.d('Creating calendar shifts batch', shifts.length);
678
- // PocketBase batch ops could be disabled,
679
- // so we create a manual transaction using Promise.all
680
- const promises = shifts.map(shift => this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)
681
- .create(shift, this.getAuthHeader()));
682
- return from(Promise.all(promises)).pipe(catchError$1(err => this.handleError(err)));
683
- }
684
605
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ShiftsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
685
606
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: ShiftsService });
686
607
  }
@@ -688,14 +609,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
688
609
  type: Injectable
689
610
  }], ctorParameters: () => [] });
690
611
 
691
- class CrewService extends BaseResource {
692
- Options = {
693
- filter: "isEnabled = true"
694
- };
612
+ class UsersService extends BaseResource {
695
613
  Entity = SdkConfig.Entities.USERS;
696
614
  constructor() {
697
615
  super();
698
616
  }
617
+ fetchList() {
618
+ this.setFilterDefaults();
619
+ return super.fetchList();
620
+ }
621
+ getAssignmentsPerShift(shiftId) {
622
+ const ep = `/api/mp/users/assignments/shift/${shiftId}`;
623
+ const params = new HttpParams();
624
+ return this.doGet(ep, params);
625
+ }
626
+ getAssignmentsAt(ts) {
627
+ const ep = `/api/mp/users/assignments/at/${ts}`;
628
+ const params = new HttpParams();
629
+ return this.doGet(ep, params);
630
+ }
631
+ // Unsupported
699
632
  create(data) {
700
633
  throw new Error("Method not supported.");
701
634
  }
@@ -705,22 +638,23 @@ class CrewService extends BaseResource {
705
638
  delete(id) {
706
639
  throw new Error("Method not supported.");
707
640
  }
708
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
709
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrewService });
641
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UsersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
642
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UsersService });
710
643
  }
711
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: CrewService, decorators: [{
644
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: UsersService, decorators: [{
712
645
  type: Injectable
713
646
  }], ctorParameters: () => [] });
714
647
 
715
648
  class TeamsService extends BaseResource {
716
- Options = {
717
- filter: "isEnabled = true",
718
- fields: "id,name,isEnabled"
719
- };
720
649
  Entity = SdkConfig.Entities.TEAMS;
721
650
  constructor() {
722
651
  super();
723
652
  }
653
+ fetchList() {
654
+ this.listOptions = { fields: "id,name,isEnabled" };
655
+ this.setFilterDefaults();
656
+ return super.fetchList();
657
+ }
724
658
  // Unsupported methods
725
659
  /**
726
660
  * @
@@ -740,13 +674,13 @@ class TeamsService extends BaseResource {
740
674
  // Alternative methods using Angular Http
741
675
  getTeams() {
742
676
  const params = new HttpParams({
743
- fromObject: this.Options
677
+ fromObject: this.listOptions
744
678
  });
745
679
  return this.doGetList(SdkConfig.Endpoints.TEAMS, params)
746
680
  .pipe(tap(d => this.log.d("teams!!", d)));
747
681
  }
748
682
  fetchTeams() {
749
- return this.getList(SdkConfig.Entities.TEAMS, this.Options);
683
+ return this.getList(SdkConfig.Entities.TEAMS, this.listOptions);
750
684
  }
751
685
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TeamsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
752
686
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: TeamsService });
@@ -758,15 +692,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
758
692
  class MpSdkService extends BasePlain {
759
693
  missionsSrv;
760
694
  shiftsSrv;
761
- staffSrv;
695
+ usersSrv;
762
696
  teamsSrv;
763
697
  authSrv = inject(AuthService);
764
698
  authStoreSrv = inject(AuthStoreService);
765
- constructor(missionsSrv, shiftsSrv, staffSrv, teamsSrv) {
699
+ constructor(missionsSrv, shiftsSrv, usersSrv, teamsSrv) {
766
700
  super();
767
701
  this.missionsSrv = missionsSrv;
768
702
  this.shiftsSrv = shiftsSrv;
769
- this.staffSrv = staffSrv;
703
+ this.usersSrv = usersSrv;
770
704
  this.teamsSrv = teamsSrv;
771
705
  }
772
706
  // Auth
@@ -798,14 +732,20 @@ class MpSdkService extends BasePlain {
798
732
  return this.missionsSrv.delete(id);
799
733
  }
800
734
  // Shifts
801
- getShifts() {
802
- return this.shiftsSrv.fetchList();
735
+ getShifts(startDate) {
736
+ return this.shiftsSrv.fetch(startDate);
737
+ }
738
+ getShiftsByMissionHour(id, hourIndex) {
739
+ return this.shiftsSrv.searchByMissionAndHour(id, hourIndex).pipe(map(d => d.items));
803
740
  }
804
741
  getShiftById(id) {
805
742
  return this.shiftsSrv.fetchOne(id);
806
743
  }
807
- getCalendarShifts(year) {
808
- return this.shiftsSrv.getCalendarShifts();
744
+ getCalendarShifts(d) {
745
+ return this.shiftsSrv.getCalendarShifts(d);
746
+ }
747
+ getCalendarShiftsPerYear(year) {
748
+ return this.shiftsSrv.getCalendarShiftsByYear(year);
809
749
  }
810
750
  saveShift(m) {
811
751
  return !m.id
@@ -815,22 +755,35 @@ class MpSdkService extends BasePlain {
815
755
  deleteShift(id) {
816
756
  return this.shiftsSrv.delete(id);
817
757
  }
818
- // Staff
819
- getStaffUsers() {
820
- return this.staffSrv.fetchList();
758
+ deleteCalendarShift(id) {
759
+ return this.shiftsSrv.deleteCalendarShiftById(id);
760
+ }
761
+ assignUsersToCalendarShift(id, users) {
762
+ return this.shiftsSrv.assignUsersToCalendarShift(id, users);
763
+ }
764
+ // Users
765
+ getUsers() {
766
+ return this.usersSrv.fetchList();
821
767
  }
822
- getStaffUser(id) {
823
- return this.staffSrv.fetchOne(id);
768
+ getUserById(id) {
769
+ return this.usersSrv.fetchOne(id);
824
770
  }
825
- getStaffTeams() {
771
+ getAssignmentsPerShift(shiftId) {
772
+ return this.usersSrv.getAssignmentsPerShift(shiftId);
773
+ }
774
+ getAssignmentsAt(ts) {
775
+ return this.usersSrv.getAssignmentsAt(ts);
776
+ }
777
+ // Teams
778
+ getTeams() {
826
779
  return this.teamsSrv.fetchList();
827
780
  }
828
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MpSdkService, deps: [{ token: MissionsService }, { token: ShiftsService }, { token: CrewService }, { token: TeamsService }], target: i0.ɵɵFactoryTarget.Injectable });
781
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MpSdkService, deps: [{ token: MissionsService }, { token: ShiftsService }, { token: UsersService }, { token: TeamsService }], target: i0.ɵɵFactoryTarget.Injectable });
829
782
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MpSdkService });
830
783
  }
831
784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: MpSdkService, decorators: [{
832
785
  type: Injectable
833
- }], ctorParameters: () => [{ type: MissionsService }, { type: ShiftsService }, { type: CrewService }, { type: TeamsService }] });
786
+ }], ctorParameters: () => [{ type: MissionsService }, { type: ShiftsService }, { type: UsersService }, { type: TeamsService }] });
834
787
 
835
788
  const defaultConfig = () => {
836
789
  return new Configuration({
@@ -865,7 +818,7 @@ class MpSdkModule {
865
818
  MissionsService,
866
819
  ShiftsService,
867
820
  TeamsService,
868
- CrewService,
821
+ UsersService,
869
822
  MpSdkService
870
823
  ] });
871
824
  }
@@ -886,7 +839,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
886
839
  MissionsService,
887
840
  ShiftsService,
888
841
  TeamsService,
889
- CrewService,
842
+ UsersService,
890
843
  MpSdkService
891
844
  ]
892
845
  }]
@@ -1 +1 @@
1
- {"version":3,"file":"m481-mp-sdk-ng.mjs","sources":["../../../../projects/mp/sdk-ngx/src/lib/models/base.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/calendar-shift.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/event.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/mission.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/shift.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/user.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/team.model.ts","../../../../projects/mp/sdk-ngx/src/lib/services/logger.service.ts","../../../../projects/mp/sdk-ngx/src/lib/base/configuration.type.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-plain.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/services/utils.service.ts","../../../../projects/mp/sdk-ngx/src/lib/services/auth-store.service.ts","../../../../projects/mp/sdk-ngx/src/lib/services/auth.interceptor.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-main.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-pocket.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.constants.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/auth.service.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-resource.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/missions.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/shifts.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/crew.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/teams.service.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.service.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.module.ts","../../../../projects/mp/sdk-ngx/src/public-api.ts","../../../../projects/mp/sdk-ngx/src/m481-mp-sdk-ng.ts"],"sourcesContent":["\nexport abstract class BaseModel\n{\n public id: string;\n public created?: Date;\n public updated?: Date;\n}\n","import { BaseModel } from './base.model';\n\nexport class CalendarShiftModel extends BaseModel\n{\n\tpublic shiftId: string;\n public startAt: number;\n public endAt: number;\n}\n","import { BaseModel } from './base.model';\n\nexport type EventScope = \"mission\" | \"shift\" | \"user\";\n\nexport class EventModel extends BaseModel\n{\n\tpublic message: string;\n\tpublic scope: EventScope;\n\tpublic objectId: string;\n\tpublic userId: string;\n}\n","import { BaseModel } from './base.model';\nimport { TeamModel } from './team.model';\n\nexport class MissionModel extends BaseModel\n{\n\tpublic name: string;\n\tpublic isRegular: boolean;\n\tpublic color: string;\n\tpublic hours: Array<Array<number>>; // [ [11, 13], [17, 19] ] -\n \tpublic teamId: string;\n\tpublic team?: TeamModel;\n\tpublic isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\nimport { MissionModel } from './mission.model';\n\nexport enum RecurrenceType {\n DAILY,\n WEEKLY,\n MONTHLY\n}\n\nexport interface ShiftSpan {\n initialAt: number;\n maxSlots: number;\n type?: RecurrenceType;\n interval?: number;\n daysOfWeek?: Array<number>;\n dayOfMonth?: number;\n finalizeAt?: number;\n}\n\nexport class ShiftModel extends BaseModel\n{\n\tpublic missionId: string;\n public missionHourIndex: number;\n\tpublic teamId: string;\n\tpublic assignedUsersIds: Array<string>;\n\tpublic mission?: MissionModel;\n public timespan: ShiftSpan;\n public isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\nimport { RecordModel } from 'pocketbase';\n\nexport class UserModel extends BaseModel\n{\n\tpublic email: string;\n\tpublic verified: boolean;\n\tpublic name: string;\n public teamsAdmin: Array<string>;\n public teamsMember: Array<string>;\n public password?: string;\n\tpublic avatar?: any;\n public avatarUrl?: string;\n public isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\n\nexport class TeamModel extends BaseModel\n{\n\tpublic name: string;\n public isEnabled?: boolean;\n}\n","import { Injectable } from \"@angular/core\";\n\nexport interface ILogService {\n get(name: string, level: LogLevel): ILogger;\n}\n\nexport interface ILogger {\n d(...args: Array<unknown>): void;\n w(...args: Array<unknown>): void;\n e(...args: Array<unknown>): void;\n}\n\nexport enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class LoggerService implements ILogService {\n public log = window.console;\n public LOG_FNS = [this.log.log, this.log.warn, this.log.error];\n public MSG_PREFIXES = [ [\"[\", \"]\"], [\"[\", \"] WARN: \"], [\"[\", \"] ERROR: \"] ];\n\n public get(prefix: string, level: LogLevel): ILogger {\n const logLevel = level || LogLevel.INFO;\n if (logLevel >= LogLevel.INFO) {\n this.LOG_FNS[0].call(this.log, \"[\" + prefix + \"] Logger created\");\n }\n const loggerFns = this.LOG_FNS.map((logTemplFn, i) => {\n return logTemplFn.bind(this.log, this.MSG_PREFIXES[i][0] + prefix + this.MSG_PREFIXES[i][1]);\n });\n return {\n d: (...args: Array<unknown>): void => {\n if (logLevel === LogLevel.DEBUG) {\n loggerFns[0].apply(this.log, [...args]);\n }\n },\n w: (...args: Array<unknown>): void => {\n if (logLevel >= LogLevel.WARN) {\n loggerFns[1].apply(this.log, [...args]);\n }\n },\n e: (...args: Array<unknown>): void => {\n if (logLevel >= LogLevel.ERROR) {\n loggerFns[2].apply(this.log, [...args]);\n }\n }\n };\n }\n\n}\n","export interface IConfigParams {\n baseUrl?: string;\n secret?: string;\n isProduction?: boolean;\n}\n\nexport class Configuration implements IConfigParams {\n public baseUrl: string;\n public secret?: string;\n public isProduction: boolean;\n\n public constructor(params: IConfigParams) {\n this.baseUrl = params.baseUrl || \"\";\n this.secret = params.secret;\n this.isProduction = params.isProduction || false;\n }\n}\n","import { Directive, inject } from \"@angular/core\";\n\nimport { LoggerService, ILogger, LogLevel } from \"../services/logger.service\";\nimport { Configuration } from './configuration.type';\n\n@Directive()\nexport abstract class BasePlain {\n\n protected log: ILogger;\n protected config = inject(Configuration);\n\n protected constructor(logLevel?: LogLevel) {\n const logger = inject(LoggerService);\n this.log = logger.get(\n this.constructor.name,\n logLevel || this.config.isProduction ? LogLevel.ERROR : LogLevel.DEBUG\n );\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { AES, enc } from \"crypto-js\";\nimport { Configuration } from \"../base/configuration.type\";\nimport { BasePlain } from '../base/base-plain.directive';\n\n@Injectable()\nexport class UtilsService extends BasePlain {\n constructor(private cfg: Configuration) {\n super();\n }\n\n public encryptText(text: string): string {\n let data = text;\n if (this.cfg.secret) {\n data = AES.encrypt(text, this.cfg.secret).toString();\n }\n\n return data;\n }\n\n public decryptText(data: string): string {\n let text = data;\n if (text) {\n if (this.cfg.secret) {\n const bytes = AES.decrypt(data.toString(), this.cfg.secret);\n const decrypted = bytes.toString(enc.Utf8);\n if (decrypted) {\n text = decrypted;\n } else {\n this.log.d(\"error decrypting\", data);\n }\n }\n }\n\n return text;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { UtilsService } from \"./utils.service\";\n\n@Injectable()\nexport class AuthStoreService {\n private readonly KEY_TOKEN = \"mp_sdk:token\";\n private token = \"\";\n\n public constructor(private utilsSrv: UtilsService) {\n }\n\n public setToken(token: string): void {\n this.token = this.utilsSrv.encryptText(token);\n sessionStorage.setItem(this.KEY_TOKEN, this.token);\n }\n\n public getToken(): string {\n const data = sessionStorage.getItem(this.KEY_TOKEN);\n return !!data ? this.utilsSrv.decryptText(data) : null;\n }\n\n public clearToken(): void {\n this.token = null;\n sessionStorage.removeItem(this.KEY_TOKEN);\n }\n\n public isStoredToken(): boolean {\n return this.getToken() !== null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\n\nimport { AuthStoreService } from './auth-store.service';\nimport { BasePlain } from '../base/base-plain.directive';\nimport { LogLevel } from './logger.service';\n\n@Injectable()\nexport class AuthInterceptor extends BasePlain implements HttpInterceptor {\n\n // URLs that don't require authentication\n private readonly excludedUrls = [\n '/auth/login',\n '/auth/register',\n '/public',\n '/health'\n ];\n\n constructor(private authStore: AuthStoreService,\n private router: Router) {\n super(LogLevel.DEBUG);\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // Check if the URL should be excluded\n if (this.shouldExcludeUrl(req.url)) {\n return next.handle(req);\n }\n\n // Get token from AuthStore service\n const authToken = this.authStore.getToken();\n\n this.log.d(\"intercepting\", req.url, authToken);\n let ret: Observable<HttpEvent<any>>;\n if (authToken) {\n // Clone the request and add authorization header\n const authReq = req.clone({\n setHeaders: {\n Authorization: authToken\n }\n });\n // Continue with modified request and handle errors\n\n ret = next.handle(authReq).pipe(\n catchError((error: HttpErrorResponse) => this.handleAuthError(error))\n );\n } else {\n // If no token, continue with original request\n ret = next.handle(req);\n }\n\n return ret\n }\n\n private shouldExcludeUrl(url: string): boolean {\n return this.excludedUrls.some(excludedUrl => url.includes(excludedUrl));\n }\n\n private handleAuthError(error: HttpErrorResponse): Observable<never> {\n if (error.status === 401) {\n // Invalid or expired token\n this.log.w('Invalid or expired authentication token');\n this.authStore.clearToken();\n\n // Redirect to login\n this.router.navigate(['/login']);\n } else if (error.status === 403) {\n // Insufficient permissions\n this.log.w('Insufficient permissions to access the resource');\n }\n\n // Propagate error for component handling\n return throwError(() => error);\n }\n}\n","import { Directive, inject } from \"@angular/core\";;\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { catchError, from, map, Observable } from 'rxjs';\n\nimport { BasePlain } from \"./base-plain.directive\";\nimport { AuthStoreService } from \"../services/auth-store.service\";\nimport { Configuration } from './configuration.type';\nimport { LogLevel } from '../services/logger.service';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\n\n@Directive()\nexport abstract class BaseSdk extends BasePlain {\n\n protected authStore = inject(AuthStoreService);\n protected http = inject(HttpClient);\n\n protected doGet<T extends BaseModel>(endpoint: string, params?: HttpParams): Observable<T> {\n return this.http.get<T>(this.config.baseUrl + endpoint, {\n params,\n });\n }\n\n protected doGetList<T extends BaseModel>(endpoint: string, params?: HttpParams): Observable<IListDataResponse<T>> {\n return this.http.get<IListDataResponse<T>>(this.config.baseUrl + endpoint, {\n params,\n });\n }\n\n protected getAuthHeader(): { headers: { [key: string]: string; } } {\n return {\n headers: {\n \"Authorization\": this.authStore.getToken(),\n }\n }\n }\n\n protected handleError(error: any): void {\n this.log.e(\"Error\", error);\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { HttpErrorResponse } from '@angular/common/http';\nimport PocketBase, { ClientResponseError, RecordListOptions, RecordOptions } from \"pocketbase\";\nimport Client from \"pocketbase\";\nimport 'cross-fetch/polyfill';\nimport { catchError, from, map, Observable, ObservableInput } from 'rxjs';\n\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\nimport { BaseSdk } from './base-main.directive';\n\n@Directive()\nexport class BasePocket extends BaseSdk {\n\n protected connection: Client;\n\n protected connect(): void {\n if (!this.connection) {\n this.connection = new PocketBase(this.config.baseUrl);\n\n }\n }\n\n protected getList<T extends BaseModel>(entity: string, options?: RecordListOptions): Observable<IListDataResponse<T>> {\n this.connect();\n this.log.d(\"getList --- entity\", entity, this.authStore.getToken());\n\n return from(\n this.connection.collection(entity).getList<T>(1, 20, this.buildOptions(options))\n ).pipe(\n catchError(err => this.handleError(err)),\n map(d => (d ? {\n page: d.page,\n pageSize: d.perPage,\n pagesTotal: d.totalPages,\n items: d.items,\n total: d.totalItems\n } : null))\n );\n }\n\n protected getOne<T extends BaseModel>(entity: string, id: string, options?: RecordOptions): Observable<T> {\n this.connect();\n this.log.d(\"fetchOne\", entity, this.authStore.getToken());\n return from(\n this.connection.collection(entity).getOne<T>(id, this.buildOptions(options))\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n protected save<T extends BaseModel>(entity: string, data: Partial<T>): Observable<T> {\n this.connect();\n this.log.d(\"save\", entity, data?.id, this.authStore.getToken());\n const target = this.connection.collection(entity);\n let promise: Promise<T>;\n if (data.id) {\n promise = target.update<T>(data.id, data, this.getAuthHeader());\n } else {\n promise = target.create<T>(data, this.getAuthHeader());\n }\n\n return from(promise).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n protected remove(entity: string, id: string): Observable<boolean> {\n this.connect();\n this.log.d(\"remove\", entity, this.authStore.getToken());\n return from(\n this.connection.collection(entity).delete(id, this.getAuthHeader())\n ).pipe(\n catchError(err => this.handleError(err)),\n );\n }\n\n protected override handleError(error: any): ObservableInput<any> {\n if (error instanceof ClientResponseError) {\n this.log.w(\"Http error\", error.status);\n throw new HttpErrorResponse({\n error: error.originalError,\n status: error.status,\n url: error.url\n });\n } else {\n this.log.w(\"Error response unknown\", error);\n throw error;\n }\n }\n\n private buildOptions(options?: RecordListOptions | RecordOptions): RecordListOptions | RecordOptions {\n return options\n ? {...options, ...this.getAuthHeader()}\n : this.getAuthHeader();\n }\n}\n","\nexport class SdkConfig {\n public static readonly Entities = {\n AUTH: \"users\",\n USERS: \"users\",\n EVENTS: \"events\",\n MISSIONS: \"missions\",\n SHIFTS: \"shifts\",\n CALENDAR_SHIFTS: \"calendar_shifts\",\n TEAMS: \"teams\"\n }\n\n public static readonly Endpoints = {\n TEAMS: \"/api/collections/teams/records\"\n }\n\n public static readonly ModelKeys = {\n CREATE_AT: \"created\",\n UPDATE_AT: \"updated\"\n }\n}\n","import { Injectable } from '@angular/core';\nimport { catchError, from, map, Observable } from 'rxjs';\nimport 'cross-fetch/polyfill';\n\nimport { UserModel } from '../models/user.model';\nimport { BasePocket } from '../base/base-pocket.directive';\nimport { SdkConfig } from '../mp-sdk.constants';\n\n@Injectable()\nexport class AuthService extends BasePocket {\n\n constructor() {\n super();\n }\n\n public login(user: string, pass: string): Observable<UserModel> {\n this.connect();\n return from(\n this.connection.collection(SdkConfig.Entities.AUTH).authWithPassword<UserModel>(user, pass)\n ).pipe(\n catchError(err => this.handleError(err)),\n map(data => {\n this.log.d(\"login ok\", data);\n this.authStore.setToken(data.token);\n return data.record;\n })\n )\n }\n\n public logout(): void {\n this.authStore.clearToken();\n }\n}\n","import { Directive } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { BasePocket } from './base-pocket.directive';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\nimport { SendOptions } from 'pocketbase';\n\n@Directive()\nexport abstract class BaseResource<T extends BaseModel> extends BasePocket {\n\n protected abstract readonly Options: SendOptions;\n protected abstract readonly Entity: string;\n\n public fetchList(): Observable<IListDataResponse<T>> {\n return this.getList<T>(this.Entity, this.Options);\n }\n\n public fetchOne(id: string): Observable<T> {\n return this.getOne<T>(this.Entity, id)\n }\n\n public create(data: Partial<T>): Observable<T> {\n return this.save<T>(this.Entity, data);\n }\n\n public update(id: string, data: Partial<T>): Observable<T> {\n return this.save<T>(this.Entity, {id, ...data});\n }\n\n public delete(id: string): Observable<boolean> {\n return this.remove(this.Entity, id);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport 'cross-fetch/polyfill';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { MissionModel } from '../models/mission.model';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\n\n@Injectable()\nexport class MissionsService extends BaseResource<MissionModel> {\n\n protected readonly Options = {\n filter: \"isEnabled = true\"\n };\n protected readonly Entity = SdkConfig.Entities.MISSIONS;\n\n constructor() {\n super();\n }\n\n public getArchived(): Observable<IListDataResponse<MissionModel>> {\n return this.getList<MissionModel>(SdkConfig.Entities.MISSIONS, {\n filter: \"isEnabled = false\"\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'cross-fetch/polyfill';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { ShiftModel, RecurrenceType } from '../models/shift.model';\nimport { CalendarShiftModel } from '../models/calendar-shift.model';\nimport { Observable, from, throwError, catchError, switchMap } from 'rxjs';\n\n@Injectable()\nexport class ShiftsService extends BaseResource<ShiftModel> {\n\n protected readonly Options = {\n filter: \"isEnabled = true\"\n };\n\n protected readonly Entity = SdkConfig.Entities.SHIFTS;\n\n constructor() {\n super();\n }\n\n public override create(data: Partial<ShiftModel>): Observable<ShiftModel> {\n const repeat = data.timespan;\n\n if (!repeat) {\n return throwError(() => new Error('No repeat data provided'));\n }\n\n // Generate CalendarShifts based on repeat configuration\n const calendarShifts = this.generateCalendarShifts(repeat);\n\n // Create the main Shift first\n return super.create(data).pipe(\n switchMap(createdShift => {\n // Assign the shiftId to all generated CalendarShifts\n const shiftsToCreate = calendarShifts.map(cs => ({\n shiftId: createdShift.id,\n startAt: cs.startAt,\n endAt: cs.endAt\n }));\n\n // Create all CalendarShifts in batch\n return this.createCalendarShiftsBatch(shiftsToCreate).pipe(\n // If successful, return the created shift\n switchMap(() => from([createdShift])),\n // If CalendarShift creation fails, rollback\n catchError(error => {\n this.log.e('Error creating calendar shifts, rolling back...', error);\n return this.delete(createdShift.id!).pipe(\n switchMap(() => throwError(() => new Error('Failed to create calendar shifts. Shift has been rolled back.')))\n );\n })\n );\n }),\n catchError(error => {\n this.log.e('Error creating shift', error);\n return throwError(() => error);\n })\n );\n }\n\n public override delete(id: string): Observable<boolean> {\n this.connect();\n\n // First, fetch all CalendarShifts associated with this Shift\n return this.getCalendarShiftsByShiftId(id).pipe(\n switchMap(calendarShifts => {\n // Store the IDs for potential rollback\n const calendarShiftIds = calendarShifts.map(cs => cs.id);\n\n // Delete all CalendarShifts first\n return this.deleteCalendarShiftsBatch(calendarShiftIds).pipe(\n switchMap(() => {\n // After successful CalendarShift deletion, delete the main Shift\n return super.delete(id).pipe(\n catchError(error => {\n // If Shift deletion fails, try to restore CalendarShifts\n this.log.e('Error deleting shift, attempting rollback...', error);\n return this.restoreCalendarShifts(calendarShifts).pipe(\n switchMap(() => throwError(() => new Error('Failed to delete shift. CalendarShifts have been restored.')))\n );\n })\n );\n }),\n catchError(error => {\n // If CalendarShift deletion fails, propagate the error\n this.log.e('Error deleting calendar shifts', error);\n return throwError(() => new Error('Failed to delete calendar shifts.'));\n })\n );\n }),\n catchError(error => {\n this.log.e('Error fetching calendar shifts for deletion', error);\n return throwError(() => error);\n })\n );\n }\n\n public getCalendarShifts(year?: number): Observable<CalendarShiftModel[]> {\n this.log.d('Fetching calendar shifts');\n const y = year || new Date().getFullYear();\n const startDate = new Date(y, 0, 1);\n const endDate = new Date(y, 11, 31);\n const startAt = startDate.getTime();\n const endAt = endDate.getTime();\n this.log.d(\n `Fetching calendar shifts for year ${y}`,\n `Start date: ${startDate.toISOString()}`,\n `End date: ${endDate.toISOString()}`,\n `Start at: ${startAt}`,\n `End at: ${endAt}`\n )\n const filter = `startAt = \"${startAt}\" AND endAt = \"${endAt}\"`;\n\n return from(\n this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .getFullList<CalendarShiftModel>({ filter, ...this.getAuthHeader() })\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n /**\n * Generates CalendarShifts based on repeat configuration\n */\n private generateCalendarShifts(repeat: any): CalendarShiftModel[] {\n const shifts: CalendarShiftModel[] = [];\n const startDate = new Date(repeat.initDate);\n let currentDate = new Date(startDate);\n let occurrenceCount = 0;\n\n // Determine the end date\n const endDate = repeat.finalizeDate\n ? new Date(repeat.finalizeDate)\n : this.calculateEndDateByOccurrences(startDate, repeat);\n\n while (currentDate <= endDate) {\n // Check if we've reached the maximum number of occurrences\n if (repeat.occurrences && occurrenceCount >= repeat.occurrences) {\n break;\n }\n\n // Add shift based on recurrence type\n if (this.shouldAddShift(currentDate, repeat)) {\n const shift = new CalendarShiftModel();\n shift.startAt = currentDate.getTime();\n // Assume each shift lasts until end of day (you can adjust this)\n const endDateTime = new Date(currentDate);\n endDateTime.setHours(23, 59, 59, 999);\n shift.endAt = endDateTime.getTime();\n\n shifts.push(shift);\n occurrenceCount++;\n }\n\n // Move to next period\n currentDate = this.getNextDate(currentDate, repeat);\n }\n\n return shifts;\n }\n\n /**\n * Determines if a shift should be added on the current date\n */\n private shouldAddShift(date: Date, repeat: any): boolean {\n switch (repeat.type) {\n case RecurrenceType.DAILY:\n return true;\n\n case RecurrenceType.WEEKLY:\n if (repeat.daysOfWeek && repeat.daysOfWeek.length > 0) {\n const dayOfWeek = date.getDay();\n return repeat.daysOfWeek.includes(dayOfWeek);\n }\n return true;\n\n case RecurrenceType.MONTHLY:\n if (repeat.dayOfMonth) {\n return date.getDate() === repeat.dayOfMonth;\n }\n return true;\n\n default:\n return false;\n }\n }\n\n /**\n * Calculates the next date based on recurrence type\n */\n private getNextDate(currentDate: Date, repeat: any): Date {\n const nextDate = new Date(currentDate);\n\n switch (repeat.type) {\n case RecurrenceType.DAILY:\n nextDate.setDate(nextDate.getDate() + repeat.interval);\n break;\n\n case RecurrenceType.WEEKLY:\n nextDate.setDate(nextDate.getDate() + (7 * repeat.interval));\n break;\n\n case RecurrenceType.MONTHLY:\n nextDate.setMonth(nextDate.getMonth() + repeat.interval);\n break;\n }\n\n return nextDate;\n }\n\n /**\n * Calculates the end date based on number of occurrences\n */\n private calculateEndDateByOccurrences(startDate: Date, repeat: any): Date {\n if (!repeat.occurrences) {\n // If no occurrences defined, set a reasonable limit (e.g., 1 year)\n const defaultEnd = new Date(startDate);\n defaultEnd.setFullYear(defaultEnd.getFullYear() + 1);\n return defaultEnd;\n }\n\n let estimatedEnd = new Date(startDate);\n\n switch (repeat.type) {\n case RecurrenceType.DAILY:\n estimatedEnd.setDate(estimatedEnd.getDate() + (repeat.occurrences * repeat.interval));\n break;\n\n case RecurrenceType.WEEKLY:\n estimatedEnd.setDate(estimatedEnd.getDate() + (repeat.occurrences * 7 * repeat.interval));\n break;\n\n case RecurrenceType.MONTHLY:\n estimatedEnd.setMonth(estimatedEnd.getMonth() + (repeat.occurrences * repeat.interval));\n break;\n }\n\n return estimatedEnd;\n }\n\n /**\n * Fetches all CalendarShifts associated with a specific Shift ID\n */\n private getCalendarShiftsByShiftId(shiftId: string): Observable<CalendarShiftModel[]> {\n this.log.d('Fetching calendar shifts for shift', shiftId);\n\n const filter = `shiftId = \"${shiftId}\"`;\n\n return from(\n this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .getFullList<CalendarShiftModel>({ filter, ...this.getAuthHeader() })\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n /**\n * Deletes multiple CalendarShifts in batch\n */\n private deleteCalendarShiftsBatch(calendarShiftIds: string[]): Observable<boolean> {\n if (calendarShiftIds.length === 0) {\n return from([true]);\n }\n\n this.log.d('Deleting calendar shifts batch', calendarShiftIds.length);\n\n // PocketBase batch ops could be disabled,\n // so we create a manual transaction using Promise.all\n const promises = calendarShiftIds.map(id =>\n this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .delete(id, this.getAuthHeader())\n );\n\n return from(Promise.all(promises)).pipe(\n switchMap(() => from([true])),\n catchError(err => this.handleError(err))\n );\n }\n\n /**\n * Restores CalendarShifts in case of rollback\n */\n private restoreCalendarShifts(calendarShifts: CalendarShiftModel[]): Observable<boolean> {\n if (calendarShifts.length === 0) {\n return from([true]);\n }\n\n this.log.d('Restoring calendar shifts', calendarShifts.length);\n\n // Recreate the CalendarShifts with their original data\n const promises = calendarShifts.map(cs =>\n this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .create({\n shiftId: cs.shiftId,\n startAt: cs.startAt,\n endAt: cs.endAt\n }, this.getAuthHeader())\n );\n\n return from(Promise.all(promises)).pipe(\n switchMap(() => from([true])),\n catchError(err => {\n this.log.e('Failed to restore calendar shifts during rollback', err);\n return this.handleError(err);\n })\n );\n }\n\n /**\n * Creates multiple CalendarShifts\n * TODO move to backend?\n */\n private createCalendarShiftsBatch(shifts: Partial<CalendarShiftModel>[]): Observable<any> {\n this.connect();\n\n if (shifts.length === 0) {\n return from([]);\n }\n\n this.log.d('Creating calendar shifts batch', shifts.length);\n\n // PocketBase batch ops could be disabled,\n // so we create a manual transaction using Promise.all\n const promises = shifts.map(shift =>\n this.connection.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .create(shift, this.getAuthHeader())\n );\n\n return from(Promise.all(promises)).pipe(\n catchError(err => this.handleError(err))\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'cross-fetch/polyfill';\nimport { Observable } from 'rxjs';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { UserModel } from '../models/user.model';\n\n@Injectable()\nexport class CrewService extends BaseResource<UserModel> {\n\n protected readonly Options = {\n filter: \"isEnabled = true\"\n };\n protected readonly Entity = SdkConfig.Entities.USERS;\n\n constructor() {\n super();\n }\n\n public override create(data: Partial<UserModel>): Observable<UserModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override update(id: string, data: Partial<UserModel>): Observable<UserModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override delete(id: string): Observable<boolean> {\n throw new Error(\"Method not supported.\");\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, tap } from 'rxjs';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { TeamModel } from '../models/team.model';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { HttpParams } from '@angular/common/http';\nimport { BaseResource } from '../base/base-resource.directive';\n\n@Injectable()\nexport class TeamsService extends BaseResource<TeamModel> {\n\n protected readonly Options = {\n filter: \"isEnabled = true\",\n fields: \"id,name,isEnabled\"\n };\n protected readonly Entity = SdkConfig.Entities.TEAMS;\n\n constructor() {\n super()\n }\n\n // Unsupported methods\n /**\n * @\n */\n public override fetchOne(id: string): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override create(data: Partial<TeamModel>): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override update(id: string, data: Partial<TeamModel>): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override delete(id: string): Observable<boolean> {\n throw new Error(\"Method not supported.\");\n }\n\n // Alternative methods using Angular Http\n\n public getTeams(): Observable<IListDataResponse<TeamModel>> {\n const params = new HttpParams({\n fromObject: this.Options\n });\n return this.doGetList<TeamModel>(SdkConfig.Endpoints.TEAMS, params)\n .pipe(\n tap(d => this.log.d(\"teams!!\", d))\n );\n }\n\n public fetchTeams(): Observable<IListDataResponse<TeamModel>> {\n return this.getList<TeamModel>(SdkConfig.Entities.TEAMS, this.Options);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { BasePlain } from './base/base-plain.directive';\nimport { AuthService } from './resources/auth.service';\nimport { UserModel } from './models/user.model';\nimport { IListDataResponse } from './models/reponses/list-data.response';\nimport { AuthStoreService } from './services/auth-store.service';\nimport { MissionsService } from './resources/missions.service';\nimport { MissionModel } from './models/mission.model';\nimport { ShiftsService } from './resources/shifts.service';\nimport { ShiftModel } from './models/shift.model';\nimport { CrewService } from './resources/crew.service';\nimport { TeamsService } from './resources/teams.service';\nimport { TeamModel } from './models/team.model';\nimport { CalendarShiftModel } from \"./models/calendar-shift.model\";\n\n@Injectable()\nexport class MpSdkService extends BasePlain {\n\n private readonly authSrv = inject(AuthService);\n private readonly authStoreSrv = inject(AuthStoreService);\n\n constructor(private readonly missionsSrv: MissionsService,\n private readonly shiftsSrv: ShiftsService,\n private readonly staffSrv: CrewService,\n private readonly teamsSrv: TeamsService) {\n super();\n }\n\n // Auth\n public login(user: string, pass: string): Observable<UserModel> {\n return this.authSrv.login(user, pass);\n }\n\n public logout(): void {\n this.authSrv.logout();\n }\n\n public isLoggedIn(): boolean {\n return this.authStoreSrv.isStoredToken();\n }\n\n // Missions\n public getMissions(): Observable<IListDataResponse<MissionModel>> {\n return this.missionsSrv.fetchList();\n }\n\n public getArchivedMissions(): Observable<IListDataResponse<MissionModel>> {\n return this.missionsSrv.getArchived();\n }\n\n public getMissionById(id: string): Observable<MissionModel> {\n return this.missionsSrv.fetchOne(id);\n }\n\n public saveMission(m: Partial<MissionModel>): Observable<MissionModel> {\n return !m.id\n ? this.missionsSrv.create(m)\n : this.missionsSrv.update(m.id, m);\n }\n\n public deleteMission(id): Observable<boolean> {\n return this.missionsSrv.delete(id);\n }\n\n // Shifts\n public getShifts(): Observable<IListDataResponse<ShiftModel>> {\n return this.shiftsSrv.fetchList();\n }\n\n public getShiftById(id: string): Observable<ShiftModel> {\n return this.shiftsSrv.fetchOne(id);\n }\n\n public getCalendarShifts(year?: number): Observable<Array<CalendarShiftModel>> {\n return this.shiftsSrv.getCalendarShifts()\n }\n\n public saveShift(m: Partial<ShiftModel>): Observable<ShiftModel> {\n return !m.id\n ? this.shiftsSrv.create(m)\n : this.shiftsSrv.update(m.id, m);\n }\n\n public deleteShift(id): Observable<boolean> {\n return this.shiftsSrv.delete(id);\n }\n\n // Staff\n public getStaffUsers(): Observable<IListDataResponse<UserModel>> {\n return this.staffSrv.fetchList();\n }\n\n public getStaffUser(id: string): Observable<UserModel> {\n return this.staffSrv.fetchOne(id);\n }\n\n public getStaffTeams(): Observable<IListDataResponse<TeamModel>> {\n return this.teamsSrv.fetchList();\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n HTTP_INTERCEPTORS,\n provideHttpClient,\n withInterceptorsFromDi\n} from '@angular/common/http';\n\n\nimport { AuthInterceptor } from './services/auth.interceptor';\nimport { Configuration } from './base/configuration.type';\nimport { AuthService } from './resources/auth.service';\nimport { AuthStoreService } from './services/auth-store.service';\nimport { MpSdkService } from './mp-sdk.service';\nimport { LoggerService } from './services/logger.service';\nimport { UtilsService } from './services/utils.service';\nimport { TeamsService } from './resources/teams.service';\nimport { MissionsService } from './resources/missions.service';\nimport { ShiftsService } from './resources/shifts.service';\nimport { CrewService } from './resources/crew.service';\n\nconst defaultConfig = (): Configuration => {\n return new Configuration({\n baseUrl: \"http://localhost:3000/api/\",\n secret: \"lwjhvkjdfhglk\",\n isProduction: false\n });\n};\n\n@NgModule({\n providers: [\n provideHttpClient(withInterceptorsFromDi()),\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true\n },\n LoggerService,\n UtilsService,\n AuthStoreService,\n AuthService,\n MissionsService,\n ShiftsService,\n TeamsService,\n CrewService,\n MpSdkService\n ]\n})\nexport class MpSdkModule\n{\n public static forRoot(\n configurationFactory: () => Configuration,\n ): ModuleWithProviders<MpSdkModule> {\n return {\n ngModule: MpSdkModule,\n providers: [{\n provide: Configuration,\n useFactory: configurationFactory || defaultConfig\n }],\n };\n }\n}\n","/*\n * Public API Surface of lib\n */\n\nexport * from \"./lib/models/calendar-shift.model\";\nexport * from \"./lib/models/event.model\";\nexport * from \"./lib/models/mission.model\";\nexport * from \"./lib/models/shift.model\";\nexport * from \"./lib/models/user.model\";\nexport * from \"./lib/models/team.model\";\n\nexport * from \"./lib/mp-sdk.module\";\nexport * from \"./lib/mp-sdk.service\";\nexport * from \"./lib/base/configuration.type\";\nexport * from \"./lib/services/auth-store.service\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LogLevel","i1.Configuration","i1.UtilsService","i1.AuthStoreService","catchError","i1.MissionsService","i2.ShiftsService","i3.CrewService","i4.TeamsService"],"mappings":"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"}
1
+ {"version":3,"file":"m481-mp-sdk-ng.mjs","sources":["../../../../projects/mp/sdk-ngx/src/lib/models/base.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/calendar-shift.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/event.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/mission.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/shift.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/user.model.ts","../../../../projects/mp/sdk-ngx/src/lib/models/team.model.ts","../../../../projects/mp/sdk-ngx/src/lib/services/logger.service.ts","../../../../projects/mp/sdk-ngx/src/lib/base/configuration.type.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-plain.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/services/utils.service.ts","../../../../projects/mp/sdk-ngx/src/lib/services/auth-store.service.ts","../../../../projects/mp/sdk-ngx/src/lib/services/auth.interceptor.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-main.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-pocket.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.constants.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/auth.service.ts","../../../../projects/mp/sdk-ngx/src/lib/base/base-resource.directive.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/missions.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/shifts.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/users.service.ts","../../../../projects/mp/sdk-ngx/src/lib/resources/teams.service.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.service.ts","../../../../projects/mp/sdk-ngx/src/lib/mp-sdk.module.ts","../../../../projects/mp/sdk-ngx/src/public-api.ts","../../../../projects/mp/sdk-ngx/src/m481-mp-sdk-ng.ts"],"sourcesContent":["\nexport abstract class BaseModel\n{\n public id: string;\n public created?: Date;\n public updated?: Date;\n}\n","import { BaseModel } from './base.model';\n\nexport class CalendarShiftModel extends BaseModel\n{\n\tpublic shiftId: string;\n public startAt: Date;\n public endAt: Date;\n public assignedUsersIds: Array<string>;\n}\n","import { BaseModel } from './base.model';\n\nexport type EventScope = \"mission\" | \"shift\" | \"user\";\n\nexport class EventModel extends BaseModel\n{\n\tpublic message: string;\n\tpublic scope: EventScope;\n\tpublic objectId: string;\n\tpublic userId: string;\n}\n","import { BaseModel } from './base.model';\nimport { TeamModel } from './team.model';\n\nexport class MissionModel extends BaseModel\n{\n\tpublic name: string;\n\tpublic isRegular: boolean;\n\tpublic color: string;\n\tpublic hours: Array<Array<number>>; // [ [11, 13], [17, 19] ] -\n \tpublic teamId: string;\n\tpublic team?: TeamModel;\n\tpublic isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\nimport { MissionModel } from './mission.model';\n\nexport enum RecurrenceType {\n DAILY,\n WEEKLY,\n MONTHLY\n}\n\nexport interface ShiftSpan {\n initialAt: number;\n maxSlots: number;\n type?: RecurrenceType;\n interval?: number;\n daysOfWeek?: Array<number>;\n dayOfMonth?: number;\n finalizeAt?: number;\n}\n\nexport class ShiftModel extends BaseModel\n{\n\tpublic missionId: string;\n public missionHourIndex: number;\n\tpublic teamId: string;\n\tpublic assignedUsersIds: Array<string>;\n\tpublic mission?: MissionModel;\n public timespan: ShiftSpan;\n public startAt?: Date;\n public isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\nimport { RecordModel } from 'pocketbase';\n\nexport class UserModel extends BaseModel\n{\n\tpublic email: string;\n public username: string;\n\tpublic verified: boolean;\n\tpublic name: string;\n public teamsAdmin: Array<string>;\n public teamsMember: Array<string>;\n public password?: string;\n\tpublic avatar?: any;\n public avatarUrl?: string;\n public isEnabled?: boolean;\n}\n","import { BaseModel } from './base.model';\n\nexport class TeamModel extends BaseModel\n{\n\tpublic name: string;\n public slug: string;\n public isEnabled?: boolean;\n}\n","import { Injectable } from \"@angular/core\";\n\nexport interface ILogService {\n get(name: string, level: LogLevel): ILogger;\n}\n\nexport interface ILogger {\n d(...args: Array<unknown>): void;\n w(...args: Array<unknown>): void;\n e(...args: Array<unknown>): void;\n}\n\nexport enum LogLevel {\n ERROR = 0,\n WARN = 1,\n INFO = 2,\n DEBUG = 3,\n}\n\n@Injectable({ providedIn: \"root\" })\nexport class LoggerService implements ILogService {\n public log = window.console;\n public LOG_FNS = [this.log.log, this.log.warn, this.log.error];\n public MSG_PREFIXES = [ [\"[\", \"]\"], [\"[\", \"] WARN: \"], [\"[\", \"] ERROR: \"] ];\n\n public get(prefix: string, level: LogLevel): ILogger {\n const logLevel = level || LogLevel.INFO;\n if (logLevel >= LogLevel.INFO) {\n this.LOG_FNS[0].call(this.log, \"[\" + prefix + \"] Logger created\");\n }\n const loggerFns = this.LOG_FNS.map((logTemplFn, i) => {\n return logTemplFn.bind(this.log, this.MSG_PREFIXES[i][0] + prefix + this.MSG_PREFIXES[i][1]);\n });\n return {\n d: (...args: Array<unknown>): void => {\n if (logLevel === LogLevel.DEBUG) {\n loggerFns[0].apply(this.log, [...args]);\n }\n },\n w: (...args: Array<unknown>): void => {\n if (logLevel >= LogLevel.WARN) {\n loggerFns[1].apply(this.log, [...args]);\n }\n },\n e: (...args: Array<unknown>): void => {\n if (logLevel >= LogLevel.ERROR) {\n loggerFns[2].apply(this.log, [...args]);\n }\n }\n };\n }\n\n}\n","export interface IConfigParams {\n baseUrl?: string;\n secret?: string;\n isProduction?: boolean;\n}\n\nexport class Configuration implements IConfigParams {\n public baseUrl: string;\n public secret?: string;\n public isProduction: boolean;\n\n public constructor(params: IConfigParams) {\n this.baseUrl = params.baseUrl || \"\";\n this.secret = params.secret;\n this.isProduction = params.isProduction || false;\n }\n}\n","import { Directive, inject } from \"@angular/core\";\n\nimport { LoggerService, ILogger, LogLevel } from \"../services/logger.service\";\nimport { Configuration } from './configuration.type';\n\n@Directive()\nexport abstract class BasePlain {\n\n protected log: ILogger;\n protected config = inject(Configuration);\n\n protected constructor(logLevel?: LogLevel) {\n const logger = inject(LoggerService);\n this.log = logger.get(\n this.constructor.name,\n logLevel || this.config.isProduction ? LogLevel.ERROR : LogLevel.DEBUG\n );\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { AES, enc } from \"crypto-js\";\nimport { Configuration } from \"../base/configuration.type\";\nimport { BasePlain } from '../base/base-plain.directive';\n\n@Injectable()\nexport class UtilsService extends BasePlain {\n constructor(private cfg: Configuration) {\n super();\n }\n\n public encryptText(text: string): string {\n let data = text;\n if (this.cfg.secret) {\n data = AES.encrypt(text, this.cfg.secret).toString();\n }\n\n return data;\n }\n\n public decryptText(data: string): string {\n let text = data;\n if (text) {\n if (this.cfg.secret) {\n const bytes = AES.decrypt(data.toString(), this.cfg.secret);\n const decrypted = bytes.toString(enc.Utf8);\n if (decrypted) {\n text = decrypted;\n } else {\n this.log.d(\"error decrypting\", data);\n }\n }\n }\n\n return text;\n }\n}\n","import { Injectable } from \"@angular/core\";\n\nimport { UtilsService } from \"./utils.service\";\n\n@Injectable()\nexport class AuthStoreService {\n private readonly KEY_TOKEN = \"mp_sdk:token\";\n private token = \"\";\n\n public constructor(private utilsSrv: UtilsService) {\n }\n\n public setToken(token: string): void {\n this.token = this.utilsSrv.encryptText(token);\n sessionStorage.setItem(this.KEY_TOKEN, this.token);\n }\n\n public getToken(): string {\n const data = sessionStorage.getItem(this.KEY_TOKEN);\n return !!data ? this.utilsSrv.decryptText(data) : null;\n }\n\n public clearToken(): void {\n this.token = null;\n sessionStorage.removeItem(this.KEY_TOKEN);\n }\n\n public isStoredToken(): boolean {\n return this.getToken() !== null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { Router } from '@angular/router';\n\nimport { AuthStoreService } from './auth-store.service';\nimport { BasePlain } from '../base/base-plain.directive';\nimport { LogLevel } from './logger.service';\n\n@Injectable()\nexport class AuthInterceptor extends BasePlain implements HttpInterceptor {\n\n // URLs that don't require authentication\n private readonly excludedUrls = [\n '/auth/login',\n '/auth/register',\n '/public',\n '/health'\n ];\n\n constructor(private authStore: AuthStoreService,\n private router: Router) {\n super(LogLevel.DEBUG);\n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // Check if the URL should be excluded\n if (this.shouldExcludeUrl(req.url)) {\n return next.handle(req);\n }\n\n // Get token from AuthStore service\n const authToken = this.authStore.getToken();\n\n this.log.d(\"intercepting\", req.url, authToken);\n let ret: Observable<HttpEvent<any>>;\n if (authToken) {\n // Clone the request and add authorization header\n const authReq = req.clone({\n setHeaders: {\n Authorization: authToken\n }\n });\n // Continue with modified request and handle errors\n\n ret = next.handle(authReq).pipe(\n catchError((error: HttpErrorResponse) => this.handleAuthError(error))\n );\n } else {\n // If no token, continue with original request\n ret = next.handle(req);\n }\n\n return ret\n }\n\n private shouldExcludeUrl(url: string): boolean {\n return this.excludedUrls.some(excludedUrl => url.includes(excludedUrl));\n }\n\n private handleAuthError(error: HttpErrorResponse): Observable<never> {\n if (error.status === 401) {\n // Invalid or expired token\n this.log.w('Invalid or expired authentication token');\n this.authStore.clearToken();\n\n // Redirect to login\n this.router.navigate(['/login']);\n } else if (error.status === 403) {\n // Insufficient permissions\n this.log.w('Insufficient permissions to access the resource');\n }\n\n // Propagate error for component handling\n return throwError(() => error);\n }\n}\n","import { Directive, inject } from \"@angular/core\";;\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { catchError, from, map, Observable } from 'rxjs';\n\nimport { BasePlain } from \"./base-plain.directive\";\nimport { AuthStoreService } from \"../services/auth-store.service\";\nimport { Configuration } from './configuration.type';\nimport { LogLevel } from '../services/logger.service';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\n\n@Directive()\nexport abstract class BaseSdk extends BasePlain {\n\n protected authStore = inject(AuthStoreService);\n protected http = inject(HttpClient);\n\n protected doGet<T extends BaseModel>(endpoint: string, params?: HttpParams): Observable<T> {\n return this.http.get<T>(this.config.baseUrl + endpoint, {\n params,\n });\n }\n\n protected doGetList<T extends BaseModel>(endpoint: string, params?: HttpParams): Observable<IListDataResponse<T>> {\n return this.http.get<IListDataResponse<T>>(this.config.baseUrl + endpoint, {\n params,\n });\n }\n\n protected getAuthHeader(): { headers: { [key: string]: string; } } {\n return {\n headers: {\n \"Authorization\": this.authStore.getToken(),\n }\n }\n }\n\n protected handleError(error: any): void {\n this.log.e(\"Error\", error);\n }\n}\n","import { Directive } from \"@angular/core\";\nimport { HttpErrorResponse } from '@angular/common/http';\nimport PocketBase, { ClientResponseError, RecordListOptions, RecordOptions } from \"pocketbase\";\nimport Client from \"pocketbase\";\nimport 'cross-fetch/polyfill';\nimport { catchError, from, map, Observable, ObservableInput } from 'rxjs';\n\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\nimport { BaseSdk } from './base-main.directive';\n\n@Directive()\nexport class BasePocket extends BaseSdk {\n\n protected client: Client;\n protected filterData: { criteria: string; params: { [key: string]: any; }; };\n\n protected connect(): void {\n if (!this.client) {\n this.client = new PocketBase(this.config.baseUrl);\n }\n }\n\n protected getList<T extends BaseModel>(entity: string, options?: RecordListOptions): Observable<IListDataResponse<T>> {\n this.connect();\n this.log.d(\"getList --- entity\", entity, this.authStore.getToken());\n\n const listOpts = options || {} as RecordListOptions;\n if (this.filterData) {\n listOpts.filter = this.client.filter(this.filterData.criteria, this.filterData.params);\n }\n\n return from(\n this.client.collection(entity).getList<T>(1, 20, this.buildOptions(listOpts))\n ).pipe(\n catchError(err => this.handleError(err)),\n map(d => (d ? {\n page: d.page,\n pageSize: d.perPage,\n pagesTotal: d.totalPages,\n items: d.items,\n total: d.totalItems\n } : null))\n );\n }\n\n protected getOne<T extends BaseModel>(entity: string, id: string, options?: RecordOptions): Observable<T> {\n this.connect();\n this.log.d(\"fetchOne\", entity, this.authStore.getToken());\n return from(\n this.client.collection(entity).getOne<T>(id, this.buildOptions(options))\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n protected save<T extends BaseModel>(entity: string, data: Partial<T>): Observable<T> {\n this.connect();\n this.log.d(\"save\", entity, data?.id, this.authStore.getToken());\n const target = this.client.collection(entity);\n let promise: Promise<T>;\n if (data.id) {\n promise = target.update<T>(data.id, data, this.getAuthHeader());\n } else {\n promise = target.create<T>(data, this.getAuthHeader());\n }\n\n return from(promise).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n protected remove(entity: string, id: string): Observable<boolean> {\n this.connect();\n this.log.d(\"remove\", entity, this.authStore.getToken());\n return from(\n this.client.collection(entity).delete(id, this.getAuthHeader())\n ).pipe(\n catchError(err => this.handleError(err)),\n );\n }\n\n protected override handleError(error: any): ObservableInput<any> {\n if (error instanceof ClientResponseError) {\n this.log.w(\"Http error\", error.status);\n throw new HttpErrorResponse({\n error: error.originalError,\n status: error.status,\n url: error.url\n });\n } else {\n this.log.w(\"Error response unknown\", error);\n throw error;\n }\n }\n\n protected buildOptions(options?: RecordListOptions | RecordOptions): RecordListOptions | RecordOptions {\n return options\n ? {...options, ...this.getAuthHeader()}\n : this.getAuthHeader();\n }\n}\n","\nexport class SdkConfig {\n public static readonly Entities = {\n AUTH: \"users\",\n USERS: \"users\",\n EVENTS: \"events\",\n MISSIONS: \"missions\",\n SHIFTS: \"shifts\",\n CALENDAR_SHIFTS: \"calendar_shifts\",\n TEAMS: \"teams\"\n }\n\n public static readonly Endpoints = {\n TEAMS: \"/api/collections/teams/records\"\n }\n\n public static readonly ModelKeys = {\n CREATE_AT: \"created\",\n UPDATE_AT: \"updated\"\n }\n}\n","import { Injectable } from '@angular/core';\nimport { catchError, from, map, Observable } from 'rxjs';\nimport 'cross-fetch/polyfill';\n\nimport { UserModel } from '../models/user.model';\nimport { BasePocket } from '../base/base-pocket.directive';\nimport { SdkConfig } from '../mp-sdk.constants';\n\n@Injectable()\nexport class AuthService extends BasePocket {\n\n constructor() {\n super();\n }\n\n public login(user: string, pass: string): Observable<UserModel> {\n this.connect();\n return from(\n this.client.collection(SdkConfig.Entities.AUTH).authWithPassword<UserModel>(user, pass)\n ).pipe(\n catchError(err => this.handleError(err)),\n map(data => {\n this.log.d(\"login ok\", data);\n this.authStore.setToken(data.token);\n return data.record;\n })\n )\n }\n\n public logout(): void {\n this.authStore.clearToken();\n }\n}\n","import { Directive } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { RecordListOptions } from 'pocketbase';\n\nimport { BasePocket } from './base-pocket.directive';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseModel } from '../models/base.model';\n\n@Directive()\nexport abstract class BaseResource<T extends BaseModel> extends BasePocket {\n\n protected abstract readonly Entity: string;\n protected readonly FilterMeta = \"isEnabled = {:isEnabled}\"\n protected readonly FilterMetaParams = {\n isEnabled: true\n };\n protected listOptions: RecordListOptions;\n\n public fetchList(): Observable<IListDataResponse<T>> {\n return this.getList<T>(this.Entity, this.listOptions);\n }\n\n public fetchOne(id: string): Observable<T> {\n return this.getOne<T>(this.Entity, id)\n }\n\n public create(data: Partial<T>): Observable<T> {\n return this.save<T>(this.Entity, data);\n }\n\n public update(id: string, data: Partial<T>): Observable<T> {\n return this.save<T>(this.Entity, {id, ...data});\n }\n\n public delete(id: string): Observable<boolean> {\n return this.remove(this.Entity, id);\n }\n\n protected setFilterDefaults(): void {\n this.filterData = { criteria: this.FilterMeta, params: this.FilterMetaParams };\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport 'cross-fetch/polyfill';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { MissionModel } from '../models/mission.model';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\n\n@Injectable()\nexport class MissionsService extends BaseResource<MissionModel> {\n\n protected readonly Entity = SdkConfig.Entities.MISSIONS;\n\n constructor() {\n super();\n }\n\n public override fetchList(): Observable<IListDataResponse<MissionModel>> {\n this.setFilterDefaults();\n return super.fetchList();\n }\n\n public getArchived(): Observable<IListDataResponse<MissionModel>> {\n return this.getList<MissionModel>(SdkConfig.Entities.MISSIONS, {\n filter: this.client.filter(this.FilterMeta, { isEnabled: false })\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport 'cross-fetch/polyfill';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { ShiftModel, RecurrenceType, ShiftSpan } from '../models/shift.model';\nimport { CalendarShiftModel } from '../models/calendar-shift.model';\nimport { Observable, from, throwError, catchError, switchMap, map, tap } from 'rxjs';\nimport { IListDataResponse } from \"../models/reponses/list-data.response\";\nimport { RecordListOptions } from 'pocketbase';\n\n@Injectable()\nexport class ShiftsService extends BaseResource<ShiftModel> {\n\n protected readonly Entity = SdkConfig.Entities.SHIFTS;\n\n constructor() {\n super();\n }\n\n public fetch(startDate?: number): Observable<IListDataResponse<ShiftModel>> {\n this.listOptions = { perPage: 100 } as RecordListOptions;\n this.setFilterDefaults();\n if (startDate) {\n this.filterData.criteria += \" && startAt >= {:startAt}\";\n this.filterData.params[\"startAt\"] = new Date(startDate);\n }\n return this.fetchList();\n }\n\n public searchByMissionAndHour(missionId: string, missionHourIndex: number): Observable<IListDataResponse<ShiftModel>> {\n this.listOptions = { perPage: 100 } as RecordListOptions;\n this.setFilterDefaults();\n this.filterData.criteria += ` && missionId = \"${missionId}\" && missionHourIndex = ${missionHourIndex}`;\n return this.fetchList();\n }\n\n public override create(data: Partial<ShiftModel>): Observable<ShiftModel> {\n if (data.timespan) {\n data.timespan.daysOfWeek = (data.timespan.daysOfWeek || []).map(d => d > 6 ? 0 : d);\n data.startAt = !!data.timespan.initialAt ? new Date(data.timespan?.initialAt) : null;\n }\n return super.create(data);\n }\n\n public override delete(id: string): Observable<boolean> {\n this.connect();\n\n // First, fetch all CalendarShifts associated with this Shift\n return this.getCalendarShiftsByShiftId(id).pipe(\n switchMap(calendarShifts => {\n // Store the IDs for potential rollback\n const calendarShiftIds = calendarShifts.map(cs => cs.id);\n\n // Delete all CalendarShifts first\n return this.deleteCalendarShiftsBatch(calendarShiftIds).pipe(\n switchMap(() => {\n // After successful CalendarShift deletion, delete the main Shift\n return super.delete(id).pipe(\n catchError(error => {\n // If Shift deletion fails, try to restore CalendarShifts\n this.log.e('Error deleting shift, attempting rollback...', error);\n return this.restoreCalendarShifts(calendarShifts).pipe(\n switchMap(() => throwError(() => new Error('Failed to delete shift. CalendarShifts have been restored.')))\n );\n })\n );\n }),\n catchError(error => {\n // If CalendarShift deletion fails, propagate the error\n this.log.e('Error deleting calendar shifts', error);\n return throwError(() => new Error('Failed to delete calendar shifts.'));\n })\n );\n }),\n catchError(error => {\n this.log.e('Error fetching calendar shifts for deletion', error);\n return throwError(() => error);\n })\n );\n }\n\n public assignUsersToCalendarShift(calendarShiftId: string, userIds: Array<string>): Observable<boolean> {\n this.log.d('Assigning users to calendar shift', calendarShiftId, userIds);\n return from(\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .update(calendarShiftId, { assignedUsersIds: userIds }, this.getAuthHeader())\n ).pipe(\n tap(record => this.log.d('Assigned users to calendar shift', record)),\n map(record => !!record)\n );\n }\n\n public getCalendarShifts(dates: Array<number>, pageSize = 1000): Observable<IListDataResponse<CalendarShiftModel>> {\n this.log.d('Fetching calendar shifts', dates);\n if (dates?.length > 0) {\n this.filterData = {\n criteria: \"startAt >= {:startAt}\",\n params: { startAt: new Date(dates[0]) }\n };\n\n if (dates.length > 1) {\n this.filterData.criteria += \" && endAt <= {:endAt}\";\n this.filterData.params[\"endAt\"] = new Date(dates[1]);\n }\n }\n\n const listOpts = {} as RecordListOptions;\n if (this.filterData) {\n listOpts.filter = this.client.filter(this.filterData.criteria, this.filterData.params);\n }\n\n return from(\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .getList<CalendarShiftModel>(1, pageSize, this.buildOptions(listOpts))\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n public getCalendarShiftsByYear(year?: number): Observable<IListDataResponse<CalendarShiftModel>> {\n this.log.d('Fetching calendar shifts per year');\n const y = year || new Date().getFullYear();\n const dates = [\n (new Date(y, 0, 1)).getTime(),\n (new Date(y, 11, 31)).getTime()\n ];\n\n return this.getCalendarShifts(dates);\n }\n\n public deleteCalendarShiftById(id: string): Observable<boolean> {\n this.log.d('Deleting calendar shift', id);\n return from(\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .delete(id, this.getAuthHeader())\n );\n }\n\n /**\n * Fetches all CalendarShifts associated with a specific Shift ID\n */\n private getCalendarShiftsByShiftId(shiftId: string): Observable<CalendarShiftModel[]> {\n this.log.d('Fetching calendar shifts for shift', shiftId);\n\n const filter = `shiftId = \"${shiftId}\"`;\n\n return from(\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .getFullList<CalendarShiftModel>({ filter, ...this.getAuthHeader() })\n ).pipe(\n catchError(err => this.handleError(err))\n );\n }\n\n /**\n * Deletes multiple CalendarShifts in batch\n */\n private deleteCalendarShiftsBatch(calendarShiftIds: string[]): Observable<boolean> {\n if (calendarShiftIds.length === 0) {\n return from([true]);\n }\n\n this.log.d('Deleting calendar shifts batch', calendarShiftIds.length);\n\n // PocketBase batch ops could be disabled,\n // so we create a manual transaction using Promise.all\n const promises = calendarShiftIds.map(id =>\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .delete(id, this.getAuthHeader())\n );\n\n return from(Promise.all(promises)).pipe(\n switchMap(() => from([true])),\n catchError(err => this.handleError(err))\n );\n }\n\n /**\n * Restores CalendarShifts in case of rollback\n */\n private restoreCalendarShifts(calendarShifts: CalendarShiftModel[]): Observable<boolean> {\n if (calendarShifts.length === 0) {\n return from([true]);\n }\n\n this.log.d('Restoring calendar shifts', calendarShifts.length);\n\n // Recreate the CalendarShifts with their original data\n const promises = calendarShifts.map(cs =>\n this.client.collection(SdkConfig.Entities.CALENDAR_SHIFTS)\n .create({\n shiftId: cs.shiftId,\n startAt: cs.startAt,\n endAt: cs.endAt\n }, this.getAuthHeader())\n );\n\n return from(Promise.all(promises)).pipe(\n switchMap(() => from([true])),\n catchError(err => {\n this.log.e('Failed to restore calendar shifts during rollback', err);\n return this.handleError(err);\n })\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport 'cross-fetch/polyfill';\nimport { Observable } from 'rxjs';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { BaseResource } from '../base/base-resource.directive';\nimport { UserModel } from '../models/user.model';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { HttpParams } from '@angular/common/http';\n\n@Injectable()\nexport class UsersService extends BaseResource<UserModel> {\n\n protected readonly Entity = SdkConfig.Entities.USERS;\n\n constructor() {\n super();\n }\n\n public override fetchList(): Observable<IListDataResponse<UserModel>> {\n this.setFilterDefaults();\n return super.fetchList();\n }\n\n public getAssignmentsPerShift(shiftId: string): Observable<any> {\n const ep = `/api/mp/users/assignments/shift/${shiftId}`;\n const params = new HttpParams();\n return this.doGet(ep, params);\n }\n\n public getAssignmentsAt(ts: number): Observable<any> {\n const ep = `/api/mp/users/assignments/at/${ts}`;\n const params = new HttpParams();\n return this.doGet(ep, params);\n }\n\n // Unsupported\n\n public override create(data: Partial<UserModel>): Observable<UserModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override update(id: string, data: Partial<UserModel>): Observable<UserModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override delete(id: string): Observable<boolean> {\n throw new Error(\"Method not supported.\");\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpParams } from '@angular/common/http';\nimport { Observable, tap } from 'rxjs';\nimport { RecordListOptions } from 'pocketbase';\n\nimport { SdkConfig } from '../mp-sdk.constants';\nimport { TeamModel } from '../models/team.model';\nimport { IListDataResponse } from '../models/reponses/list-data.response';\nimport { BaseResource } from '../base/base-resource.directive';\n\n@Injectable()\nexport class TeamsService extends BaseResource<TeamModel> {\n\n protected readonly Entity = SdkConfig.Entities.TEAMS;\n\n constructor() {\n super()\n }\n\n public override fetchList(): Observable<IListDataResponse<TeamModel>> {\n this.listOptions = { fields: \"id,name,isEnabled\" };\n this.setFilterDefaults();\n return super.fetchList();\n }\n\n // Unsupported methods\n /**\n * @\n */\n public override fetchOne(id: string): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override create(data: Partial<TeamModel>): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override update(id: string, data: Partial<TeamModel>): Observable<TeamModel> {\n throw new Error(\"Method not supported.\");\n }\n\n public override delete(id: string): Observable<boolean> {\n throw new Error(\"Method not supported.\");\n }\n\n // Alternative methods using Angular Http\n\n public getTeams(): Observable<IListDataResponse<TeamModel>> {\n const params = new HttpParams({\n fromObject: this.listOptions\n });\n return this.doGetList<TeamModel>(SdkConfig.Endpoints.TEAMS, params)\n .pipe(\n tap(d => this.log.d(\"teams!!\", d))\n );\n }\n\n public fetchTeams(): Observable<IListDataResponse<TeamModel>> {\n return this.getList<TeamModel>(SdkConfig.Entities.TEAMS, this.listOptions);\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { map, Observable } from 'rxjs';\n\nimport { BasePlain } from './base/base-plain.directive';\nimport { AuthService } from './resources/auth.service';\nimport { UserModel } from './models/user.model';\nimport { IListDataResponse } from './models/reponses/list-data.response';\nimport { AuthStoreService } from './services/auth-store.service';\nimport { MissionsService } from './resources/missions.service';\nimport { MissionModel } from './models/mission.model';\nimport { ShiftsService } from './resources/shifts.service';\nimport { ShiftModel } from './models/shift.model';\nimport { UsersService } from './resources/users.service';\nimport { TeamsService } from './resources/teams.service';\nimport { TeamModel } from './models/team.model';\nimport { CalendarShiftModel } from \"./models/calendar-shift.model\";\n\n@Injectable()\nexport class MpSdkService extends BasePlain {\n\n private readonly authSrv = inject(AuthService);\n private readonly authStoreSrv = inject(AuthStoreService);\n\n constructor(private readonly missionsSrv: MissionsService,\n private readonly shiftsSrv: ShiftsService,\n private readonly usersSrv: UsersService,\n private readonly teamsSrv: TeamsService) {\n super();\n }\n\n // Auth\n public login(user: string, pass: string): Observable<UserModel> {\n return this.authSrv.login(user, pass);\n }\n\n public logout(): void {\n this.authSrv.logout();\n }\n\n public isLoggedIn(): boolean {\n return this.authStoreSrv.isStoredToken();\n }\n\n // Missions\n public getMissions(): Observable<IListDataResponse<MissionModel>> {\n return this.missionsSrv.fetchList();\n }\n\n public getArchivedMissions(): Observable<IListDataResponse<MissionModel>> {\n return this.missionsSrv.getArchived();\n }\n\n public getMissionById(id: string): Observable<MissionModel> {\n return this.missionsSrv.fetchOne(id);\n }\n\n public saveMission(m: Partial<MissionModel>): Observable<MissionModel> {\n return !m.id\n ? this.missionsSrv.create(m)\n : this.missionsSrv.update(m.id, m);\n }\n\n public deleteMission(id): Observable<boolean> {\n return this.missionsSrv.delete(id);\n }\n\n // Shifts\n public getShifts(startDate?: number): Observable<IListDataResponse<ShiftModel>> {\n return this.shiftsSrv.fetch(startDate);\n }\n\n public getShiftsByMissionHour(id: string, hourIndex: number): Observable<Array<ShiftModel>> {\n return this.shiftsSrv.searchByMissionAndHour(id, hourIndex).pipe(\n map(d => d.items)\n );\n }\n\n public getShiftById(id: string): Observable<ShiftModel> {\n return this.shiftsSrv.fetchOne(id);\n }\n\n public getCalendarShifts(d: Array<number>): Observable<IListDataResponse<CalendarShiftModel>> {\n return this.shiftsSrv.getCalendarShifts(d)\n }\n\n public getCalendarShiftsPerYear(year?: number): Observable<IListDataResponse<CalendarShiftModel>> {\n return this.shiftsSrv.getCalendarShiftsByYear(year)\n }\n\n public saveShift(m: Partial<ShiftModel>): Observable<ShiftModel> {\n return !m.id\n ? this.shiftsSrv.create(m)\n : this.shiftsSrv.update(m.id, m);\n }\n\n public deleteShift(id): Observable<boolean> {\n return this.shiftsSrv.delete(id);\n }\n\n public deleteCalendarShift(id): Observable<boolean> {\n return this.shiftsSrv.deleteCalendarShiftById(id);\n }\n\n public assignUsersToCalendarShift(id: string, users: Array<string>): Observable<boolean> {\n return this.shiftsSrv.assignUsersToCalendarShift(id, users);\n }\n\n // Users\n public getUsers(): Observable<IListDataResponse<UserModel>> {\n return this.usersSrv.fetchList();\n }\n\n public getUserById(id: string): Observable<UserModel> {\n return this.usersSrv.fetchOne(id);\n }\n\n public getAssignmentsPerShift(shiftId: string): Observable<any> {\n return this.usersSrv.getAssignmentsPerShift(shiftId);\n }\n\n public getAssignmentsAt(ts: number): Observable<any> {\n return this.usersSrv.getAssignmentsAt(ts);\n }\n\n // Teams\n\n public getTeams(): Observable<IListDataResponse<TeamModel>> {\n return this.teamsSrv.fetchList();\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n HTTP_INTERCEPTORS,\n provideHttpClient,\n withInterceptorsFromDi\n} from '@angular/common/http';\n\n\nimport { AuthInterceptor } from './services/auth.interceptor';\nimport { Configuration } from './base/configuration.type';\nimport { AuthService } from './resources/auth.service';\nimport { AuthStoreService } from './services/auth-store.service';\nimport { MpSdkService } from './mp-sdk.service';\nimport { LoggerService } from './services/logger.service';\nimport { UtilsService } from './services/utils.service';\nimport { TeamsService } from './resources/teams.service';\nimport { MissionsService } from './resources/missions.service';\nimport { ShiftsService } from './resources/shifts.service';\nimport { UsersService } from './resources/users.service';\n\nconst defaultConfig = (): Configuration => {\n return new Configuration({\n baseUrl: \"http://localhost:3000/api/\",\n secret: \"lwjhvkjdfhglk\",\n isProduction: false\n });\n};\n\n@NgModule({\n providers: [\n provideHttpClient(withInterceptorsFromDi()),\n {\n provide: HTTP_INTERCEPTORS,\n useClass: AuthInterceptor,\n multi: true\n },\n LoggerService,\n UtilsService,\n AuthStoreService,\n AuthService,\n MissionsService,\n ShiftsService,\n TeamsService,\n UsersService,\n MpSdkService\n ]\n})\nexport class MpSdkModule\n{\n public static forRoot(\n configurationFactory: () => Configuration,\n ): ModuleWithProviders<MpSdkModule> {\n return {\n ngModule: MpSdkModule,\n providers: [{\n provide: Configuration,\n useFactory: configurationFactory || defaultConfig\n }],\n };\n }\n}\n","/*\n * Public API Surface of lib\n */\n\nexport * from \"./lib/models/calendar-shift.model\";\nexport * from \"./lib/models/event.model\";\nexport * from \"./lib/models/mission.model\";\nexport * from \"./lib/models/shift.model\";\nexport * from \"./lib/models/user.model\";\nexport * from \"./lib/models/team.model\";\n\nexport * from \"./lib/mp-sdk.module\";\nexport * from \"./lib/mp-sdk.service\";\nexport * from \"./lib/base/configuration.type\";\nexport * from \"./lib/services/auth-store.service\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LogLevel","i1.Configuration","i1.UtilsService","i1.AuthStoreService","catchError","i1.MissionsService","i2.ShiftsService","i3.UsersService","i4.TeamsService"],"mappings":"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"}
@@ -7,14 +7,20 @@ import { BaseModel } from '../models/base.model';
7
7
  import { BaseSdk } from './base-main.directive';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare class BasePocket extends BaseSdk {
10
- protected connection: Client;
10
+ protected client: Client;
11
+ protected filterData: {
12
+ criteria: string;
13
+ params: {
14
+ [key: string]: any;
15
+ };
16
+ };
11
17
  protected connect(): void;
12
18
  protected getList<T extends BaseModel>(entity: string, options?: RecordListOptions): Observable<IListDataResponse<T>>;
13
19
  protected getOne<T extends BaseModel>(entity: string, id: string, options?: RecordOptions): Observable<T>;
14
20
  protected save<T extends BaseModel>(entity: string, data: Partial<T>): Observable<T>;
15
21
  protected remove(entity: string, id: string): Observable<boolean>;
16
22
  protected handleError(error: any): ObservableInput<any>;
17
- private buildOptions;
23
+ protected buildOptions(options?: RecordListOptions | RecordOptions): RecordListOptions | RecordOptions;
18
24
  static ɵfac: i0.ɵɵFactoryDeclaration<BasePocket, never>;
19
25
  static ɵdir: i0.ɵɵDirectiveDeclaration<BasePocket, never, never, {}, {}, never, never, true, never>;
20
26
  }
@@ -1,17 +1,22 @@
1
1
  import { Observable } from 'rxjs';
2
+ import { RecordListOptions } from 'pocketbase';
2
3
  import { BasePocket } from './base-pocket.directive';
3
4
  import { IListDataResponse } from '../models/reponses/list-data.response';
4
5
  import { BaseModel } from '../models/base.model';
5
- import { SendOptions } from 'pocketbase';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare abstract class BaseResource<T extends BaseModel> extends BasePocket {
8
- protected abstract readonly Options: SendOptions;
9
8
  protected abstract readonly Entity: string;
9
+ protected readonly FilterMeta = "isEnabled = {:isEnabled}";
10
+ protected readonly FilterMetaParams: {
11
+ isEnabled: boolean;
12
+ };
13
+ protected listOptions: RecordListOptions;
10
14
  fetchList(): Observable<IListDataResponse<T>>;
11
15
  fetchOne(id: string): Observable<T>;
12
16
  create(data: Partial<T>): Observable<T>;
13
17
  update(id: string, data: Partial<T>): Observable<T>;
14
18
  delete(id: string): Observable<boolean>;
19
+ protected setFilterDefaults(): void;
15
20
  static ɵfac: i0.ɵɵFactoryDeclaration<BaseResource<any>, never>;
16
21
  static ɵdir: i0.ɵɵDirectiveDeclaration<BaseResource<any>, never, never, {}, {}, never, never, true, never>;
17
22
  }
@@ -1,6 +1,7 @@
1
1
  import { BaseModel } from './base.model';
2
2
  export declare class CalendarShiftModel extends BaseModel {
3
3
  shiftId: string;
4
- startAt: number;
5
- endAt: number;
4
+ startAt: Date;
5
+ endAt: Date;
6
+ assignedUsersIds: Array<string>;
6
7
  }
@@ -21,5 +21,6 @@ export declare class ShiftModel extends BaseModel {
21
21
  assignedUsersIds: Array<string>;
22
22
  mission?: MissionModel;
23
23
  timespan: ShiftSpan;
24
+ startAt?: Date;
24
25
  isEnabled?: boolean;
25
26
  }
@@ -1,5 +1,6 @@
1
1
  import { BaseModel } from './base.model';
2
2
  export declare class TeamModel extends BaseModel {
3
3
  name: string;
4
+ slug: string;
4
5
  isEnabled?: boolean;
5
6
  }
@@ -1,6 +1,7 @@
1
1
  import { BaseModel } from './base.model';
2
2
  export declare class UserModel extends BaseModel {
3
3
  email: string;
4
+ username: string;
4
5
  verified: boolean;
5
6
  name: string;
6
7
  teamsAdmin: Array<string>;
@@ -6,7 +6,7 @@ import { MissionsService } from './resources/missions.service';
6
6
  import { MissionModel } from './models/mission.model';
7
7
  import { ShiftsService } from './resources/shifts.service';
8
8
  import { ShiftModel } from './models/shift.model';
9
- import { CrewService } from './resources/crew.service';
9
+ import { UsersService } from './resources/users.service';
10
10
  import { TeamsService } from './resources/teams.service';
11
11
  import { TeamModel } from './models/team.model';
12
12
  import { CalendarShiftModel } from "./models/calendar-shift.model";
@@ -14,11 +14,11 @@ import * as i0 from "@angular/core";
14
14
  export declare class MpSdkService extends BasePlain {
15
15
  private readonly missionsSrv;
16
16
  private readonly shiftsSrv;
17
- private readonly staffSrv;
17
+ private readonly usersSrv;
18
18
  private readonly teamsSrv;
19
19
  private readonly authSrv;
20
20
  private readonly authStoreSrv;
21
- constructor(missionsSrv: MissionsService, shiftsSrv: ShiftsService, staffSrv: CrewService, teamsSrv: TeamsService);
21
+ constructor(missionsSrv: MissionsService, shiftsSrv: ShiftsService, usersSrv: UsersService, teamsSrv: TeamsService);
22
22
  login(user: string, pass: string): Observable<UserModel>;
23
23
  logout(): void;
24
24
  isLoggedIn(): boolean;
@@ -27,14 +27,20 @@ export declare class MpSdkService extends BasePlain {
27
27
  getMissionById(id: string): Observable<MissionModel>;
28
28
  saveMission(m: Partial<MissionModel>): Observable<MissionModel>;
29
29
  deleteMission(id: any): Observable<boolean>;
30
- getShifts(): Observable<IListDataResponse<ShiftModel>>;
30
+ getShifts(startDate?: number): Observable<IListDataResponse<ShiftModel>>;
31
+ getShiftsByMissionHour(id: string, hourIndex: number): Observable<Array<ShiftModel>>;
31
32
  getShiftById(id: string): Observable<ShiftModel>;
32
- getCalendarShifts(year?: number): Observable<Array<CalendarShiftModel>>;
33
+ getCalendarShifts(d: Array<number>): Observable<IListDataResponse<CalendarShiftModel>>;
34
+ getCalendarShiftsPerYear(year?: number): Observable<IListDataResponse<CalendarShiftModel>>;
33
35
  saveShift(m: Partial<ShiftModel>): Observable<ShiftModel>;
34
36
  deleteShift(id: any): Observable<boolean>;
35
- getStaffUsers(): Observable<IListDataResponse<UserModel>>;
36
- getStaffUser(id: string): Observable<UserModel>;
37
- getStaffTeams(): Observable<IListDataResponse<TeamModel>>;
37
+ deleteCalendarShift(id: any): Observable<boolean>;
38
+ assignUsersToCalendarShift(id: string, users: Array<string>): Observable<boolean>;
39
+ getUsers(): Observable<IListDataResponse<UserModel>>;
40
+ getUserById(id: string): Observable<UserModel>;
41
+ getAssignmentsPerShift(shiftId: string): Observable<any>;
42
+ getAssignmentsAt(ts: number): Observable<any>;
43
+ getTeams(): Observable<IListDataResponse<TeamModel>>;
38
44
  static ɵfac: i0.ɵɵFactoryDeclaration<MpSdkService, never>;
39
45
  static ɵprov: i0.ɵɵInjectableDeclaration<MpSdkService>;
40
46
  }
@@ -5,11 +5,9 @@ import { MissionModel } from '../models/mission.model';
5
5
  import { IListDataResponse } from '../models/reponses/list-data.response';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class MissionsService extends BaseResource<MissionModel> {
8
- protected readonly Options: {
9
- filter: string;
10
- };
11
8
  protected readonly Entity: string;
12
9
  constructor();
10
+ fetchList(): Observable<IListDataResponse<MissionModel>>;
13
11
  getArchived(): Observable<IListDataResponse<MissionModel>>;
14
12
  static ɵfac: i0.ɵɵFactoryDeclaration<MissionsService, never>;
15
13
  static ɵprov: i0.ɵɵInjectableDeclaration<MissionsService>;
@@ -3,32 +3,19 @@ import { BaseResource } from '../base/base-resource.directive';
3
3
  import { ShiftModel } from '../models/shift.model';
4
4
  import { CalendarShiftModel } from '../models/calendar-shift.model';
5
5
  import { Observable } from 'rxjs';
6
+ import { IListDataResponse } from "../models/reponses/list-data.response";
6
7
  import * as i0 from "@angular/core";
7
8
  export declare class ShiftsService extends BaseResource<ShiftModel> {
8
- protected readonly Options: {
9
- filter: string;
10
- };
11
9
  protected readonly Entity: string;
12
10
  constructor();
11
+ fetch(startDate?: number): Observable<IListDataResponse<ShiftModel>>;
12
+ searchByMissionAndHour(missionId: string, missionHourIndex: number): Observable<IListDataResponse<ShiftModel>>;
13
13
  create(data: Partial<ShiftModel>): Observable<ShiftModel>;
14
14
  delete(id: string): Observable<boolean>;
15
- getCalendarShifts(year?: number): Observable<CalendarShiftModel[]>;
16
- /**
17
- * Generates CalendarShifts based on repeat configuration
18
- */
19
- private generateCalendarShifts;
20
- /**
21
- * Determines if a shift should be added on the current date
22
- */
23
- private shouldAddShift;
24
- /**
25
- * Calculates the next date based on recurrence type
26
- */
27
- private getNextDate;
28
- /**
29
- * Calculates the end date based on number of occurrences
30
- */
31
- private calculateEndDateByOccurrences;
15
+ assignUsersToCalendarShift(calendarShiftId: string, userIds: Array<string>): Observable<boolean>;
16
+ getCalendarShifts(dates: Array<number>, pageSize?: number): Observable<IListDataResponse<CalendarShiftModel>>;
17
+ getCalendarShiftsByYear(year?: number): Observable<IListDataResponse<CalendarShiftModel>>;
18
+ deleteCalendarShiftById(id: string): Observable<boolean>;
32
19
  /**
33
20
  * Fetches all CalendarShifts associated with a specific Shift ID
34
21
  */
@@ -41,11 +28,6 @@ export declare class ShiftsService extends BaseResource<ShiftModel> {
41
28
  * Restores CalendarShifts in case of rollback
42
29
  */
43
30
  private restoreCalendarShifts;
44
- /**
45
- * Creates multiple CalendarShifts
46
- * TODO move to backend?
47
- */
48
- private createCalendarShiftsBatch;
49
31
  static ɵfac: i0.ɵɵFactoryDeclaration<ShiftsService, never>;
50
32
  static ɵprov: i0.ɵɵInjectableDeclaration<ShiftsService>;
51
33
  }
@@ -4,12 +4,9 @@ import { IListDataResponse } from '../models/reponses/list-data.response';
4
4
  import { BaseResource } from '../base/base-resource.directive';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class TeamsService extends BaseResource<TeamModel> {
7
- protected readonly Options: {
8
- filter: string;
9
- fields: string;
10
- };
11
7
  protected readonly Entity: string;
12
8
  constructor();
9
+ fetchList(): Observable<IListDataResponse<TeamModel>>;
13
10
  /**
14
11
  * @
15
12
  */
@@ -2,16 +2,17 @@ import 'cross-fetch/polyfill';
2
2
  import { Observable } from 'rxjs';
3
3
  import { BaseResource } from '../base/base-resource.directive';
4
4
  import { UserModel } from '../models/user.model';
5
+ import { IListDataResponse } from '../models/reponses/list-data.response';
5
6
  import * as i0 from "@angular/core";
6
- export declare class CrewService extends BaseResource<UserModel> {
7
- protected readonly Options: {
8
- filter: string;
9
- };
7
+ export declare class UsersService extends BaseResource<UserModel> {
10
8
  protected readonly Entity: string;
11
9
  constructor();
10
+ fetchList(): Observable<IListDataResponse<UserModel>>;
11
+ getAssignmentsPerShift(shiftId: string): Observable<any>;
12
+ getAssignmentsAt(ts: number): Observable<any>;
12
13
  create(data: Partial<UserModel>): Observable<UserModel>;
13
14
  update(id: string, data: Partial<UserModel>): Observable<UserModel>;
14
15
  delete(id: string): Observable<boolean>;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<CrewService, never>;
16
- static ɵprov: i0.ɵɵInjectableDeclaration<CrewService>;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<UsersService, never>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<UsersService>;
17
18
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@m481/mp-sdk-ng",
3
- "version": "0.1.2-alpha.2",
3
+ "version": "0.1.2-alpha.20",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0"