@stevenkellner/team-conduct-api 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/lib/src/Firestore.d.ts +15 -0
  2. package/lib/src/Firestore.js +53 -0
  3. package/{src/FirestoreScheme.ts → lib/src/FirestoreScheme.d.ts} +12 -13
  4. package/lib/src/FirestoreScheme.js +2 -0
  5. package/lib/src/checkAuthentication.d.ts +2 -0
  6. package/lib/src/checkAuthentication.js +31 -0
  7. package/lib/src/firebase/FirebaseConfiguration.d.ts +15 -0
  8. package/lib/src/firebase/FirebaseConfiguration.js +28 -0
  9. package/{src/firebase/Messaging.ts → lib/src/firebase/Messaging.d.ts} +0 -3
  10. package/lib/src/firebase/Messaging.js +2 -0
  11. package/lib/src/firebase/index.js +18 -0
  12. package/lib/src/firebaseFunctionCreators.d.ts +50 -0
  13. package/lib/src/firebaseFunctionCreators.js +58 -0
  14. package/lib/src/functions/fine/add.d.ts +37 -0
  15. package/lib/src/functions/fine/add.js +71 -0
  16. package/lib/src/functions/fine/delete.d.ts +24 -0
  17. package/lib/src/functions/fine/delete.js +71 -0
  18. package/lib/src/functions/fine/update.d.ts +38 -0
  19. package/lib/src/functions/fine/update.js +73 -0
  20. package/lib/src/functions/fineTemplate/add.d.ts +32 -0
  21. package/lib/src/functions/fineTemplate/add.js +23 -0
  22. package/lib/src/functions/fineTemplate/delete.d.ts +17 -0
  23. package/lib/src/functions/fineTemplate/delete.js +23 -0
  24. package/lib/src/functions/fineTemplate/update.d.ts +32 -0
  25. package/lib/src/functions/fineTemplate/update.js +23 -0
  26. package/lib/src/functions/invitation/invite.d.ts +7 -0
  27. package/lib/src/functions/invitation/invite.js +23 -0
  28. package/lib/src/functions/invitation/register.d.ts +7 -0
  29. package/lib/src/functions/invitation/register.js +43 -0
  30. package/lib/src/functions/invitation/withdraw.d.ts +8 -0
  31. package/lib/src/functions/invitation/withdraw.js +21 -0
  32. package/lib/src/functions/notification/register.d.ts +19 -0
  33. package/lib/src/functions/notification/register.js +27 -0
  34. package/lib/src/functions/notification/subscribe.d.ts +19 -0
  35. package/lib/src/functions/notification/subscribe.js +26 -0
  36. package/lib/src/functions/paypalMe/edit.d.ts +17 -0
  37. package/lib/src/functions/paypalMe/edit.js +25 -0
  38. package/lib/src/functions/person/add.d.ts +22 -0
  39. package/lib/src/functions/person/add.js +24 -0
  40. package/lib/src/functions/person/delete.d.ts +17 -0
  41. package/lib/src/functions/person/delete.js +25 -0
  42. package/lib/src/functions/person/update.d.ts +22 -0
  43. package/lib/src/functions/person/update.js +25 -0
  44. package/lib/src/functions/team/new.d.ts +26 -0
  45. package/lib/src/functions/team/new.js +36 -0
  46. package/lib/src/functions/user/login.d.ts +8 -0
  47. package/lib/src/functions/user/login.js +21 -0
  48. package/lib/src/functions/user/roleEdit.d.ts +19 -0
  49. package/lib/src/functions/user/roleEdit.js +30 -0
  50. package/lib/src/pushNotification.d.ts +3 -0
  51. package/lib/src/pushNotification.js +35 -0
  52. package/lib/src/types/Configuration.d.ts +27 -0
  53. package/lib/src/types/Configuration.js +38 -0
  54. package/lib/src/types/Fine.d.ts +30 -0
  55. package/lib/src/types/Fine.js +42 -0
  56. package/lib/src/types/FineAmount.d.ts +51 -0
  57. package/lib/src/types/FineAmount.js +124 -0
  58. package/lib/src/types/FineTemplate.d.ts +28 -0
  59. package/lib/src/types/FineTemplate.js +40 -0
  60. package/lib/src/types/FineTemplateRepetition.d.ts +22 -0
  61. package/lib/src/types/FineTemplateRepetition.js +38 -0
  62. package/lib/src/types/Invitation.d.ts +25 -0
  63. package/lib/src/types/Invitation.js +42 -0
  64. package/lib/src/types/MoneyAmount.d.ts +17 -0
  65. package/lib/src/types/MoneyAmount.js +68 -0
  66. package/lib/src/types/NotificationProperties.d.ts +28 -0
  67. package/lib/src/types/NotificationProperties.js +50 -0
  68. package/lib/src/types/PayedState.d.ts +6 -0
  69. package/lib/src/types/PayedState.js +9 -0
  70. package/lib/src/types/Person.d.ts +29 -0
  71. package/lib/src/types/Person.js +41 -0
  72. package/lib/src/types/PersonPrivateProperties.d.ts +17 -0
  73. package/lib/src/types/PersonPrivateProperties.js +27 -0
  74. package/lib/src/types/PersonSignInProperties.d.ts +24 -0
  75. package/lib/src/types/PersonSignInProperties.js +36 -0
  76. package/lib/src/types/Team.d.ts +24 -0
  77. package/lib/src/types/Team.js +35 -0
  78. package/lib/src/types/User.d.ts +40 -0
  79. package/lib/src/types/User.js +58 -0
  80. package/lib/src/types/UserRole.d.ts +6 -0
  81. package/lib/src/types/UserRole.js +14 -0
  82. package/lib/src/types/index.js +31 -0
  83. package/lib/tsconfig.tsbuildinfo +1 -0
  84. package/package.json +4 -1
  85. package/eslint.config.js +0 -72
  86. package/src/Firestore.ts +0 -63
  87. package/src/checkAuthentication.ts +0 -36
  88. package/src/firebase/FirebaseConfiguration.ts +0 -39
  89. package/src/firebaseFunctionCreators.ts +0 -56
  90. package/src/functions/fine/add.ts +0 -54
  91. package/src/functions/fine/delete.ts +0 -54
  92. package/src/functions/fine/update.ts +0 -55
  93. package/src/functions/fineTemplate/add.ts +0 -34
  94. package/src/functions/fineTemplate/delete.ts +0 -34
  95. package/src/functions/fineTemplate/update.ts +0 -34
  96. package/src/functions/invitation/invite.ts +0 -28
  97. package/src/functions/invitation/register.ts +0 -54
  98. package/src/functions/invitation/withdraw.ts +0 -24
  99. package/src/functions/notification/register.ts +0 -39
  100. package/src/functions/notification/subscribe.ts +0 -38
  101. package/src/functions/paypalMe/edit.ts +0 -36
  102. package/src/functions/person/add.ts +0 -36
  103. package/src/functions/person/delete.ts +0 -37
  104. package/src/functions/person/update.ts +0 -37
  105. package/src/functions/team/new.ts +0 -54
  106. package/src/functions/user/login.ts +0 -25
  107. package/src/functions/user/roleEdit.ts +0 -44
  108. package/src/locales/de.json +0 -30
  109. package/src/locales/en.json +0 -30
  110. package/src/pushNotification.ts +0 -37
  111. package/src/types/Configuration.ts +0 -54
  112. package/src/types/Fine.ts +0 -59
  113. package/src/types/FineAmount.ts +0 -123
  114. package/src/types/FineTemplate.ts +0 -55
  115. package/src/types/FineTemplateRepetition.ts +0 -54
  116. package/src/types/Invitation.ts +0 -56
  117. package/src/types/MoneyAmount.ts +0 -41
  118. package/src/types/NotificationProperties.ts +0 -67
  119. package/src/types/PayedState.ts +0 -12
  120. package/src/types/Person.ts +0 -56
  121. package/src/types/PersonPrivateProperties.ts +0 -37
  122. package/src/types/PersonSignInProperties.ts +0 -42
  123. package/src/types/Team.ts +0 -49
  124. package/src/types/User.ts +0 -76
  125. package/src/types/UserRole.ts +0 -19
  126. package/tsconfig.json +0 -117
  127. /package/{index.ts → lib/index.d.ts} +0 -0
  128. /package/{src/firebase/index.ts → lib/src/firebase/index.d.ts} +0 -0
  129. /package/{src/types/index.ts → lib/src/types/index.d.ts} +0 -0
@@ -0,0 +1,15 @@
1
+ import { FirestoreDocument } from '@stevenkellner/firebase-function';
2
+ import { FirestoreScheme } from './FirestoreScheme';
3
+ import { Fine, FineTemplate, Invitation, Person, User, Team } from './types';
4
+ export declare class Firestore {
5
+ protected base: FirestoreScheme;
6
+ protected constructor();
7
+ private static sharedInstance;
8
+ static get shared(): Firestore;
9
+ team(id: Team.Id): FirestoreDocument<Team>;
10
+ user(id: User.Id): FirestoreDocument<User>;
11
+ invitation(id: Invitation.Id): FirestoreDocument<Invitation>;
12
+ person(teamId: Team.Id, id: Person.Id): FirestoreDocument<Person>;
13
+ fineTemplate(teamId: Team.Id, id: FineTemplate.Id): FirestoreDocument<FineTemplate>;
14
+ fine(teamId: Team.Id, id: Fine.Id): FirestoreDocument<Fine>;
15
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Firestore = void 0;
4
+ const firebase_1 = require("./firebase");
5
+ class Firestore {
6
+ base;
7
+ constructor() {
8
+ this.base = firebase_1.FirebaseConfiguration.shared.baseFirestoreDocument;
9
+ }
10
+ static sharedInstance = null;
11
+ static get shared() {
12
+ if (!Firestore.sharedInstance)
13
+ Firestore.sharedInstance = new Firestore();
14
+ return Firestore.sharedInstance;
15
+ }
16
+ team(id) {
17
+ return this.base
18
+ .collection('teams')
19
+ .document(id.guidString);
20
+ }
21
+ user(id) {
22
+ return this.base
23
+ .collection('users')
24
+ .document(id.value);
25
+ }
26
+ invitation(id) {
27
+ return this.base
28
+ .collection('invitations')
29
+ .document(id.value);
30
+ }
31
+ person(teamId, id) {
32
+ return this.base
33
+ .collection('teams')
34
+ .document(teamId.guidString)
35
+ .collection('persons')
36
+ .document(id.guidString);
37
+ }
38
+ fineTemplate(teamId, id) {
39
+ return this.base
40
+ .collection('teams')
41
+ .document(teamId.guidString)
42
+ .collection('fineTemplates')
43
+ .document(id.guidString);
44
+ }
45
+ fine(teamId, id) {
46
+ return this.base
47
+ .collection('teams')
48
+ .document(teamId.guidString)
49
+ .collection('fines')
50
+ .document(id.guidString);
51
+ }
52
+ }
53
+ exports.Firestore = Firestore;
@@ -1,24 +1,23 @@
1
1
  import { FirestoreCollection, FirestoreDocument } from '@stevenkellner/firebase-function';
2
2
  import { Fine, FineTemplate, Invitation, Person, Team, User } from './types';
3
-
4
3
  export type FirestoreScheme = FirestoreDocument<never, {
5
4
  users: FirestoreCollection<{
6
- [UserId in string]: FirestoreDocument<User>
7
- }>
5
+ [UserId in string]: FirestoreDocument<User>;
6
+ }>;
8
7
  invitations: FirestoreCollection<{
9
- [InvitationId in string]: FirestoreDocument<Invitation>
10
- }>
8
+ [InvitationId in string]: FirestoreDocument<Invitation>;
9
+ }>;
11
10
  teams: FirestoreCollection<{
12
11
  [TeamId in string]: FirestoreDocument<Team, {
13
12
  persons: FirestoreCollection<{
14
- [PersonId in string]: FirestoreDocument<Person>
15
- }>
13
+ [PersonId in string]: FirestoreDocument<Person>;
14
+ }>;
16
15
  fineTemplates: FirestoreCollection<{
17
- [PersonId in string]: FirestoreDocument<FineTemplate>
18
- }>
16
+ [PersonId in string]: FirestoreDocument<FineTemplate>;
17
+ }>;
19
18
  fines: FirestoreCollection<{
20
- [PersonId in string]: FirestoreDocument<Fine>
21
- }>
22
- }>
23
- }>
19
+ [PersonId in string]: FirestoreDocument<Fine>;
20
+ }>;
21
+ }>;
22
+ }>;
24
23
  }>;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { Team, User, UserRole } from './types';
2
+ export declare function checkAuthentication(rawUserId: string | null, teamId: Team.Id, ...roles: UserRole[]): Promise<User.Id>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkAuthentication = checkAuthentication;
4
+ const firebase_function_1 = require("@stevenkellner/firebase-function");
5
+ const types_1 = require("./types");
6
+ const Firestore_1 = require("./Firestore");
7
+ function includesAll(array, ...values) {
8
+ return values.every(value => array.includes(value));
9
+ }
10
+ async function checkAuthentication(rawUserId, teamId, ...roles) {
11
+ if (rawUserId === null)
12
+ throw new firebase_function_1.FunctionsError('unauthenticated', 'User is not authenticated');
13
+ const userId = types_1.User.Id.builder.build(rawUserId);
14
+ const userSnapshot = await Firestore_1.Firestore.shared.user(userId).snapshot();
15
+ if (!userSnapshot.exists)
16
+ throw new firebase_function_1.FunctionsError('permission-denied', 'User does not exist');
17
+ const user = types_1.User.builder.build(userSnapshot.data);
18
+ if (!user.teams.has(teamId))
19
+ throw new firebase_function_1.FunctionsError('permission-denied', 'User is not a member of the team');
20
+ const team = user.teams.get(teamId);
21
+ const personSnapshot = await Firestore_1.Firestore.shared.person(teamId, team.personId).snapshot();
22
+ if (!personSnapshot.exists)
23
+ throw new firebase_function_1.FunctionsError('permission-denied', 'Person does not exist');
24
+ const person = types_1.Person.builder.build(personSnapshot.data);
25
+ if (person.signInProperties === null)
26
+ throw new firebase_function_1.FunctionsError('permission-denied', 'Person is not signed in');
27
+ const userHasRoles = includesAll(person.signInProperties.roles, ...roles);
28
+ if (!userHasRoles)
29
+ throw new firebase_function_1.FunctionsError('permission-denied', 'User does not have the required roles');
30
+ return userId;
31
+ }
@@ -0,0 +1,15 @@
1
+ import { FirestoreScheme } from '../FirestoreScheme';
2
+ import { Messaging } from './Messaging';
3
+ export declare class FirebaseConfiguration {
4
+ static readonly shared: FirebaseConfiguration;
5
+ private configured;
6
+ private _baseFirestoreDocument;
7
+ private _messaging;
8
+ private constructor();
9
+ configure(configuration: {
10
+ baseFirestoreDocument: FirestoreScheme;
11
+ messaging: Messaging;
12
+ }): void;
13
+ get baseFirestoreDocument(): FirestoreScheme;
14
+ get messaging(): Messaging;
15
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FirebaseConfiguration = void 0;
4
+ class FirebaseConfiguration {
5
+ static shared = new FirebaseConfiguration();
6
+ configured = false;
7
+ _baseFirestoreDocument = null;
8
+ _messaging = null;
9
+ constructor() { }
10
+ configure(configuration) {
11
+ if (this.configured)
12
+ throw new Error('Configuration is already configured');
13
+ this._baseFirestoreDocument = configuration.baseFirestoreDocument;
14
+ this._messaging = configuration.messaging;
15
+ this.configured = true;
16
+ }
17
+ get baseFirestoreDocument() {
18
+ if (!this.configured || !this._baseFirestoreDocument)
19
+ throw new Error('Configuration.baseFirestoreDocument is not configured');
20
+ return this._baseFirestoreDocument;
21
+ }
22
+ get messaging() {
23
+ if (!this.configured || !this._messaging)
24
+ throw new Error('Configuration.messaging is not configured');
25
+ return this._messaging;
26
+ }
27
+ }
28
+ exports.FirebaseConfiguration = FirebaseConfiguration;
@@ -3,7 +3,6 @@ export interface Notification {
3
3
  body?: string;
4
4
  imageUrl?: string;
5
5
  }
6
-
7
6
  export interface BatchResponse {
8
7
  responses: {
9
8
  success: boolean;
@@ -18,12 +17,10 @@ export interface BatchResponse {
18
17
  successCount: number;
19
18
  failureCount: number;
20
19
  }
21
-
22
20
  export interface MulticastMessage {
23
21
  tokens: string[];
24
22
  notification?: Notification;
25
23
  }
26
-
27
24
  export interface Messaging {
28
25
  sendEachForMulticast(message: MulticastMessage, dryRun?: boolean): Promise<BatchResponse>;
29
26
  }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./FirebaseConfiguration"), exports);
18
+ __exportStar(require("./Messaging"), exports);
@@ -0,0 +1,50 @@
1
+ import { TeamNewFunction } from './functions/team/new';
2
+ import { UserRoleEditFunction } from './functions/user/roleEdit';
3
+ import { PaypalMeEditFunction } from './functions/paypalMe/edit';
4
+ import { NotificationRegisterFunction } from './functions/notification/register';
5
+ import { NotificationSubscribeFunction } from './functions/notification/subscribe';
6
+ import { PersonAddFunction } from './functions/person/add';
7
+ import { PersonUpdateFunction } from './functions/person/update';
8
+ import { PersonDeleteFunction } from './functions/person/delete';
9
+ import { FineAddFunction } from './functions/fine/add';
10
+ import { FineUpdateFunction } from './functions/fine/update';
11
+ import { FineDeleteFunction } from './functions/fine/delete';
12
+ import { FineTemplateAddFunction } from './functions/fineTemplate/add';
13
+ import { FineTemplateUpdateFunction } from './functions/fineTemplate/update';
14
+ import { FineTemplateDeleteFunction } from './functions/fineTemplate/delete';
15
+ export declare const firebaseFunctionCreators: {
16
+ team: {
17
+ new: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<TeamNewFunction.Parameters, import("./types").User>;
18
+ };
19
+ user: {
20
+ login: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<null, import("./types").User>;
21
+ roleEdit: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<UserRoleEditFunction.Parameters, void>;
22
+ };
23
+ paypalMe: {
24
+ edit: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<PaypalMeEditFunction.Parameters, void>;
25
+ };
26
+ notification: {
27
+ register: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<NotificationRegisterFunction.Parameters, void>;
28
+ subscribe: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<NotificationSubscribeFunction.Parameters, void>;
29
+ };
30
+ invitation: {
31
+ invite: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<import("./types").Invitation, import("./types").Invitation.Id>;
32
+ withdraw: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<import("./types").Invitation, void>;
33
+ register: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<import("./types").Invitation.Id, import("./types").User>;
34
+ };
35
+ person: {
36
+ add: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<PersonAddFunction.Parameters, void>;
37
+ update: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<PersonUpdateFunction.Parameters, void>;
38
+ delete: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<PersonDeleteFunction.Parameters, void>;
39
+ };
40
+ fineTemplate: {
41
+ add: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineTemplateAddFunction.Parameters, void>;
42
+ update: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineTemplateUpdateFunction.Parameters, void>;
43
+ delete: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineTemplateDeleteFunction.Parameters, void>;
44
+ };
45
+ fine: {
46
+ add: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineAddFunction.Parameters, void>;
47
+ update: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineUpdateFunction.Parameters, void>;
48
+ delete: import("@stevenkellner/firebase-function").AdminAndClientFunctionCreator<FineDeleteFunction.Parameters, void>;
49
+ };
50
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firebaseFunctionCreators = void 0;
4
+ const firebase_function_1 = require("@stevenkellner/firebase-function");
5
+ const new_1 = require("./functions/team/new");
6
+ const login_1 = require("./functions/user/login");
7
+ const roleEdit_1 = require("./functions/user/roleEdit");
8
+ const edit_1 = require("./functions/paypalMe/edit");
9
+ const register_1 = require("./functions/notification/register");
10
+ const subscribe_1 = require("./functions/notification/subscribe");
11
+ const invite_1 = require("./functions/invitation/invite");
12
+ const withdraw_1 = require("./functions/invitation/withdraw");
13
+ const register_2 = require("./functions/invitation/register");
14
+ const add_1 = require("./functions/person/add");
15
+ const update_1 = require("./functions/person/update");
16
+ const delete_1 = require("./functions/person/delete");
17
+ const add_2 = require("./functions/fine/add");
18
+ const update_2 = require("./functions/fine/update");
19
+ const delete_2 = require("./functions/fine/delete");
20
+ const add_3 = require("./functions/fineTemplate/add");
21
+ const update_3 = require("./functions/fineTemplate/update");
22
+ const delete_3 = require("./functions/fineTemplate/delete");
23
+ exports.firebaseFunctionCreators = (0, firebase_function_1.createFirebaseFunctionCreators)(builder => ({
24
+ team: {
25
+ new: builder.function(new_1.TeamNewFunction)
26
+ },
27
+ user: {
28
+ login: builder.function(login_1.UserLoginFunction),
29
+ roleEdit: builder.function(roleEdit_1.UserRoleEditFunction)
30
+ },
31
+ paypalMe: {
32
+ edit: builder.function(edit_1.PaypalMeEditFunction)
33
+ },
34
+ notification: {
35
+ register: builder.function(register_1.NotificationRegisterFunction),
36
+ subscribe: builder.function(subscribe_1.NotificationSubscribeFunction)
37
+ },
38
+ invitation: {
39
+ invite: builder.function(invite_1.InvitationInviteFunction),
40
+ withdraw: builder.function(withdraw_1.InvitationWithdrawFunction),
41
+ register: builder.function(register_2.InvitationRegisterFunction)
42
+ },
43
+ person: {
44
+ add: builder.function(add_1.PersonAddFunction),
45
+ update: builder.function(update_1.PersonUpdateFunction),
46
+ delete: builder.function(delete_1.PersonDeleteFunction)
47
+ },
48
+ fineTemplate: {
49
+ add: builder.function(add_3.FineTemplateAddFunction),
50
+ update: builder.function(update_3.FineTemplateUpdateFunction),
51
+ delete: builder.function(delete_3.FineTemplateDeleteFunction)
52
+ },
53
+ fine: {
54
+ add: builder.function(add_2.FineAddFunction),
55
+ update: builder.function(update_2.FineUpdateFunction),
56
+ delete: builder.function(delete_2.FineDeleteFunction)
57
+ }
58
+ }));
@@ -0,0 +1,37 @@
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
+ import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
3
+ import { Configuration, Fine, Person, Team } from '../../types';
4
+ export declare namespace FineAddFunction {
5
+ type Parameters = {
6
+ teamId: Team.Id;
7
+ personId: Person.Id;
8
+ fine: Fine;
9
+ configuration: Configuration;
10
+ };
11
+ }
12
+ export declare class FineAddFunction extends FirebaseFunction<FineAddFunction.Parameters, void> {
13
+ parametersBuilder: ObjectTypeBuilder<{
14
+ teamId: string;
15
+ personId: string;
16
+ fine: {
17
+ id: Fine.Id.Flatten;
18
+ payedState: import("../../types").PayedState;
19
+ date: import("@stevenkellner/typescript-common-functionality").UtcDate.Flatten;
20
+ reason: string;
21
+ amount: {
22
+ type: "money";
23
+ amount: import("../../types").MoneyAmount.Flatten;
24
+ } | {
25
+ type: "item";
26
+ item: import("../../types").FineAmount.Item.Type;
27
+ count: number;
28
+ };
29
+ };
30
+ configuration: {
31
+ currency: Configuration.Currency;
32
+ locale: Configuration.Locale;
33
+ };
34
+ }, FineAddFunction.Parameters>;
35
+ returnTypeBuilder: ValueTypeBuilder<void>;
36
+ execute(parameters: FineAddFunction.Parameters): Promise<void>;
37
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FineAddFunction = void 0;
37
+ const firebase_function_1 = require("@stevenkellner/firebase-function");
38
+ const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
39
+ const types_1 = require("../../types");
40
+ const checkAuthentication_1 = require("../../checkAuthentication");
41
+ const Firestore_1 = require("../../Firestore");
42
+ const pushNotification_1 = require("../../pushNotification");
43
+ const i18n = __importStar(require("i18n"));
44
+ class FineAddFunction extends firebase_function_1.FirebaseFunction {
45
+ parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
46
+ teamId: types_1.Team.Id.builder,
47
+ personId: types_1.Person.Id.builder,
48
+ fine: types_1.Fine.builder,
49
+ configuration: types_1.Configuration.builder
50
+ });
51
+ returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
52
+ async execute(parameters) {
53
+ await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fine-manager');
54
+ const fineSnapshot = await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).snapshot();
55
+ if (fineSnapshot.exists)
56
+ throw new firebase_function_1.FunctionsError('already-exists', 'Fine already exists');
57
+ const personSnapshot = await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
58
+ if (!personSnapshot.exists)
59
+ throw new firebase_function_1.FunctionsError('not-found', 'Person not found');
60
+ const person = types_1.Person.builder.build(personSnapshot.data);
61
+ await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).set(parameters.fine);
62
+ person.fineIds.push(parameters.fine.id);
63
+ await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
64
+ i18n.setLocale(parameters.configuration.locale);
65
+ await (0, pushNotification_1.pushNotification)(parameters.teamId, parameters.personId, 'new-fine', {
66
+ title: i18n.__('notification.fine.new.title', parameters.fine.reason),
67
+ body: i18n.__('notification.fine.new.body', parameters.fine.amount.formatted(parameters.configuration))
68
+ });
69
+ }
70
+ }
71
+ exports.FineAddFunction = FineAddFunction;
@@ -0,0 +1,24 @@
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
+ import { Configuration, Fine, Person, Team } from '../../types';
3
+ import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
4
+ export declare namespace FineDeleteFunction {
5
+ type Parameters = {
6
+ teamId: Team.Id;
7
+ personId: Person.Id;
8
+ id: Fine.Id;
9
+ configuration: Configuration;
10
+ };
11
+ }
12
+ export declare class FineDeleteFunction extends FirebaseFunction<FineDeleteFunction.Parameters, void> {
13
+ parametersBuilder: ObjectTypeBuilder<{
14
+ teamId: string;
15
+ personId: string;
16
+ id: string;
17
+ configuration: {
18
+ currency: Configuration.Currency;
19
+ locale: Configuration.Locale;
20
+ };
21
+ }, FineDeleteFunction.Parameters>;
22
+ returnTypeBuilder: ValueTypeBuilder<void>;
23
+ execute(parameters: FineDeleteFunction.Parameters): Promise<void>;
24
+ }
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FineDeleteFunction = void 0;
37
+ const firebase_function_1 = require("@stevenkellner/firebase-function");
38
+ const types_1 = require("../../types");
39
+ const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
40
+ const checkAuthentication_1 = require("../../checkAuthentication");
41
+ const Firestore_1 = require("../../Firestore");
42
+ const pushNotification_1 = require("../../pushNotification");
43
+ const i18n = __importStar(require("i18n"));
44
+ class FineDeleteFunction extends firebase_function_1.FirebaseFunction {
45
+ parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
46
+ teamId: types_1.Team.Id.builder,
47
+ personId: types_1.Person.Id.builder,
48
+ id: types_1.Fine.Id.builder,
49
+ configuration: types_1.Configuration.builder
50
+ });
51
+ returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
52
+ async execute(parameters) {
53
+ await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fine-manager');
54
+ const fineSnapshot = await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.id).snapshot();
55
+ if (!fineSnapshot.exists)
56
+ throw new firebase_function_1.FunctionsError('not-found', 'Fine not found');
57
+ const personSnapshot = await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
58
+ if (!personSnapshot.exists)
59
+ throw new firebase_function_1.FunctionsError('not-found', 'Person not found');
60
+ const person = types_1.Person.builder.build(personSnapshot.data);
61
+ await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.id).remove();
62
+ person.fineIds = person.fineIds.filter(id => id.guidString !== parameters.id.guidString);
63
+ await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
64
+ i18n.setLocale(parameters.configuration.locale);
65
+ await (0, pushNotification_1.pushNotification)(parameters.teamId, parameters.personId, 'fine-state-change', {
66
+ title: i18n.__('notification.fine.state-change.title'),
67
+ body: i18n.__('notification.fine.state-change.body-deleted', fineSnapshot.data.reason, types_1.FineAmount.builder.build(fineSnapshot.data.amount).formatted(parameters.configuration))
68
+ });
69
+ }
70
+ }
71
+ exports.FineDeleteFunction = FineDeleteFunction;
@@ -0,0 +1,38 @@
1
+ import { Configuration } from '../../types/Configuration';
2
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
3
+ import { Fine, Person, Team } from '../../types';
4
+ import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
5
+ export declare namespace FineUpdateFunction {
6
+ type Parameters = {
7
+ teamId: Team.Id;
8
+ personId: Person.Id;
9
+ fine: Fine;
10
+ configuration: Configuration;
11
+ };
12
+ }
13
+ export declare class FineUpdateFunction extends FirebaseFunction<FineUpdateFunction.Parameters, void> {
14
+ parametersBuilder: ObjectTypeBuilder<{
15
+ teamId: string;
16
+ personId: string;
17
+ fine: {
18
+ id: Fine.Id.Flatten;
19
+ payedState: import("../../types").PayedState;
20
+ date: import("@stevenkellner/typescript-common-functionality").UtcDate.Flatten;
21
+ reason: string;
22
+ amount: {
23
+ type: "money";
24
+ amount: import("../../types").MoneyAmount.Flatten;
25
+ } | {
26
+ type: "item";
27
+ item: import("../../types").FineAmount.Item.Type;
28
+ count: number;
29
+ };
30
+ };
31
+ configuration: {
32
+ currency: Configuration.Currency;
33
+ locale: Configuration.Locale;
34
+ };
35
+ }, FineUpdateFunction.Parameters>;
36
+ returnTypeBuilder: ValueTypeBuilder<void>;
37
+ execute(parameters: FineUpdateFunction.Parameters): Promise<void>;
38
+ }