@stevenkellner/team-conduct-api 1.0.36 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/firebase/FirebaseConfiguration.d.ts +45 -1
- package/lib/src/firebase/FirebaseConfiguration.js +44 -0
- package/lib/src/firebase/Firestore.d.ts +196 -0
- package/lib/src/firebase/Firestore.js +235 -0
- package/lib/src/{FirestoreScheme.d.ts → firebase/FirestoreScheme.d.ts} +15 -1
- package/lib/src/firebase/Messaging.d.ts +64 -0
- package/lib/src/firebase/checkAuthentication.d.ts +37 -0
- package/lib/src/{checkAuthentication.js → firebase/checkAuthentication.js} +26 -1
- package/lib/src/firebase/index.d.ts +4 -0
- package/lib/src/firebase/index.js +4 -0
- package/lib/src/firebase/pushNotification.d.ts +39 -0
- package/lib/src/firebase/pushNotification.js +88 -0
- package/lib/src/functions/fine/add.d.ts +10 -13
- package/lib/src/functions/fine/add.js +3 -30
- package/lib/src/functions/fine/delete.d.ts +10 -13
- package/lib/src/functions/fine/delete.js +3 -27
- package/lib/src/functions/fine/update.d.ts +10 -13
- package/lib/src/functions/fine/update.js +3 -28
- package/lib/src/functions/fineTemplate/add.d.ts +6 -9
- package/lib/src/functions/fineTemplate/add.js +3 -12
- package/lib/src/functions/fineTemplate/delete.d.ts +6 -9
- package/lib/src/functions/fineTemplate/delete.js +3 -12
- package/lib/src/functions/fineTemplate/update.d.ts +6 -9
- package/lib/src/functions/fineTemplate/update.js +3 -12
- package/lib/src/functions/invitation/getInvitation.d.ts +40 -43
- package/lib/src/functions/invitation/getInvitation.js +57 -88
- package/lib/src/functions/invitation/invite.d.ts +1 -2
- package/lib/src/functions/invitation/invite.js +3 -18
- package/lib/src/functions/invitation/register.d.ts +6 -11
- package/lib/src/functions/invitation/register.js +3 -39
- package/lib/src/functions/invitation/withdraw.d.ts +1 -2
- package/lib/src/functions/invitation/withdraw.js +3 -13
- package/lib/src/functions/notification/register.d.ts +7 -10
- package/lib/src/functions/notification/register.js +3 -15
- package/lib/src/functions/notification/subscribe.d.ts +8 -11
- package/lib/src/functions/notification/subscribe.js +3 -14
- package/lib/src/functions/paypalMe/edit.d.ts +6 -9
- package/lib/src/functions/paypalMe/edit.js +3 -14
- package/lib/src/functions/person/add.d.ts +7 -10
- package/lib/src/functions/person/add.js +3 -12
- package/lib/src/functions/person/delete.d.ts +6 -9
- package/lib/src/functions/person/delete.js +3 -14
- package/lib/src/functions/person/update.d.ts +7 -10
- package/lib/src/functions/person/update.js +3 -13
- package/lib/src/functions/team/new.d.ts +9 -12
- package/lib/src/functions/team/new.js +3 -22
- package/lib/src/functions/user/kickout.d.ts +6 -9
- package/lib/src/functions/user/kickout.js +3 -25
- package/lib/src/functions/user/login.d.ts +1 -2
- package/lib/src/functions/user/login.js +3 -13
- package/lib/src/functions/user/roleEdit.d.ts +8 -11
- package/lib/src/functions/user/roleEdit.js +3 -18
- package/lib/src/index.d.ts +0 -5
- package/lib/src/index.js +0 -5
- package/lib/src/locales/de.d.ts +10 -67
- package/lib/src/locales/de.js +8 -0
- package/lib/src/locales/en.d.ts +10 -0
- package/lib/src/locales/en.js +19 -2
- package/lib/src/types/Configuration.d.ts +33 -15
- package/lib/src/types/Configuration.js +24 -12
- package/lib/src/types/Currency.d.ts +20 -0
- package/lib/src/types/Currency.js +19 -0
- package/lib/src/types/Fine.d.ts +41 -0
- package/lib/src/types/Fine.js +32 -0
- package/lib/src/types/FineAmount.d.ts +160 -9
- package/lib/src/types/FineAmount.js +128 -7
- package/lib/src/types/FineTemplate.d.ts +41 -0
- package/lib/src/types/FineTemplate.js +32 -0
- package/lib/src/types/FineTemplateRepetition.d.ts +72 -10
- package/lib/src/types/FineTemplateRepetition.js +66 -12
- package/lib/src/types/Invitation.d.ts +48 -0
- package/lib/src/types/Invitation.js +39 -0
- package/lib/src/types/Locale.d.ts +16 -0
- package/lib/src/types/Locale.js +16 -0
- package/lib/src/types/Localization.d.ts +74 -74
- package/lib/src/types/Localization.js +80 -41
- package/lib/src/types/MoneyAmount.d.ts +67 -1
- package/lib/src/types/MoneyAmount.js +62 -0
- package/lib/src/types/NotificationProperties.d.ts +70 -9
- package/lib/src/types/NotificationProperties.js +49 -5
- package/lib/src/types/PayedState.d.ts +25 -9
- package/lib/src/types/PayedState.js +17 -27
- package/lib/src/types/Person.d.ts +45 -0
- package/lib/src/types/Person.js +36 -0
- package/lib/src/types/PersonPrivateProperties.d.ts +28 -0
- package/lib/src/types/PersonPrivateProperties.js +25 -0
- package/lib/src/types/PersonSignInProperties.d.ts +30 -0
- package/lib/src/types/PersonSignInProperties.js +27 -0
- package/lib/src/types/Pluralization.d.ts +46 -0
- package/lib/src/types/Pluralization.js +46 -0
- package/lib/src/types/Team.d.ts +38 -0
- package/lib/src/types/Team.js +29 -0
- package/lib/src/types/User.d.ts +68 -3
- package/lib/src/types/User.js +59 -5
- package/lib/src/types/UserRole.d.ts +26 -4
- package/lib/src/types/UserRole.js +25 -9
- package/lib/src/types/index.d.ts +2 -0
- package/lib/src/types/index.js +2 -0
- package/lib/test/firebase/FirebaseConfiguration.test.js +155 -0
- package/lib/test/firebase/Firestore.test.js +46 -0
- package/lib/test/firebase/checkAuthentication.test.d.ts +1 -0
- package/lib/test/firebase/checkAuthentication.test.js +305 -0
- package/lib/test/firebase/firebase-utils.d.ts +32 -0
- package/lib/test/firebase/firebase-utils.js +131 -0
- package/lib/test/firebase/pushNotification.test.d.ts +1 -0
- package/lib/test/firebase/pushNotification.test.js +300 -0
- package/lib/test/locales/localization.de.test.d.ts +1 -0
- package/lib/test/locales/localization.de.test.js +144 -0
- package/lib/test/locales/localization.en.test.d.ts +1 -0
- package/lib/test/locales/localization.en.test.js +144 -0
- package/lib/test/types/Configuration.test.d.ts +1 -0
- package/lib/test/types/Configuration.test.js +84 -0
- package/lib/test/types/Currency.test.d.ts +1 -0
- package/lib/test/types/Currency.test.js +41 -0
- package/lib/test/types/Fine.test.d.ts +1 -0
- package/lib/test/types/Fine.test.js +265 -0
- package/lib/test/types/FineAmount.test.d.ts +1 -0
- package/lib/test/types/FineAmount.test.js +445 -0
- package/lib/test/types/FineTemplate.test.d.ts +1 -0
- package/lib/test/types/FineTemplate.test.js +271 -0
- package/lib/test/types/FineTemplateRepetition.test.d.ts +1 -0
- package/lib/test/types/FineTemplateRepetition.test.js +361 -0
- package/lib/test/types/Invitation.test.d.ts +1 -0
- package/lib/test/types/Invitation.test.js +269 -0
- package/lib/test/types/Locale.test.d.ts +1 -0
- package/lib/test/types/Locale.test.js +46 -0
- package/lib/test/types/Localization.test.d.ts +1 -0
- package/lib/test/types/Localization.test.js +241 -0
- package/lib/test/types/MoneyAmount.test.d.ts +1 -0
- package/lib/test/types/MoneyAmount.test.js +276 -0
- package/lib/test/types/NotificationProperties.test.d.ts +1 -0
- package/lib/test/types/NotificationProperties.test.js +258 -0
- package/lib/test/types/PayedState.test.d.ts +1 -0
- package/lib/test/types/PayedState.test.js +105 -0
- package/lib/test/types/Person.test.d.ts +1 -0
- package/lib/test/types/Person.test.js +266 -0
- package/lib/test/types/PersonPrivateProperties.test.d.ts +1 -0
- package/lib/test/types/PersonPrivateProperties.test.js +155 -0
- package/lib/test/types/PersonSignInProperties.test.d.ts +1 -0
- package/lib/test/types/PersonSignInProperties.test.js +208 -0
- package/lib/test/types/Pluralization.test.d.ts +1 -0
- package/lib/test/types/Pluralization.test.js +206 -0
- package/lib/test/types/Team.test.d.ts +1 -0
- package/lib/test/types/Team.test.js +145 -0
- package/lib/test/types/User.test.d.ts +1 -0
- package/lib/test/types/User.test.js +232 -0
- package/lib/test/types/UserRole.test.d.ts +1 -0
- package/lib/test/types/UserRole.test.js +140 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -9
- package/src/firebase/FirebaseConfiguration.ts +49 -1
- package/src/firebase/Firestore.ts +248 -0
- package/src/{FirestoreScheme.ts → firebase/FirestoreScheme.ts} +15 -1
- package/src/firebase/Messaging.ts +64 -0
- package/src/{checkAuthentication.ts → firebase/checkAuthentication.ts} +39 -1
- package/src/firebase/index.ts +5 -0
- package/src/firebase/pushNotification.ts +90 -0
- package/src/functions/fine/add.ts +10 -48
- package/src/functions/fine/delete.ts +9 -43
- package/src/functions/fine/update.ts +10 -44
- package/src/functions/fineTemplate/add.ts +7 -23
- package/src/functions/fineTemplate/delete.ts +7 -23
- package/src/functions/fineTemplate/update.ts +7 -24
- package/src/functions/index.ts +0 -1
- package/src/functions/invitation/getInvitation.ts +81 -118
- package/src/functions/invitation/invite.ts +2 -25
- package/src/functions/invitation/register.ts +9 -60
- package/src/functions/invitation/withdraw.ts +2 -16
- package/src/functions/notification/register.ts +7 -26
- package/src/functions/notification/subscribe.ts +8 -26
- package/src/functions/paypalMe/edit.ts +7 -25
- package/src/functions/person/add.ts +8 -24
- package/src/functions/person/delete.ts +6 -25
- package/src/functions/person/update.ts +8 -25
- package/src/functions/team/new.ts +12 -42
- package/src/functions/user/kickout.ts +8 -41
- package/src/functions/user/login.ts +2 -16
- package/src/functions/user/roleEdit.ts +8 -32
- package/src/index.ts +0 -5
- package/src/locales/de.ts +10 -1
- package/src/locales/en.ts +21 -2
- package/src/types/Configuration.ts +33 -23
- package/src/types/Currency.ts +24 -0
- package/src/types/Fine.ts +41 -0
- package/src/types/FineAmount.ts +162 -11
- package/src/types/FineTemplate.ts +41 -0
- package/src/types/FineTemplateRepetition.ts +75 -17
- package/src/types/Invitation.ts +48 -0
- package/src/types/Locale.ts +20 -0
- package/src/types/Localization.ts +96 -41
- package/src/types/MoneyAmount.ts +67 -1
- package/src/types/NotificationProperties.ts +67 -9
- package/src/types/PayedState.ts +25 -30
- package/src/types/Person.ts +45 -0
- package/src/types/PersonPrivateProperties.ts +28 -1
- package/src/types/PersonSignInProperties.ts +30 -0
- package/src/types/Pluralization.ts +46 -0
- package/src/types/Team.ts +38 -0
- package/src/types/User.ts +70 -4
- package/src/types/UserRole.ts +32 -16
- package/src/types/index.ts +2 -0
- package/lib/src/Firestore.d.ts +0 -24
- package/lib/src/Firestore.js +0 -62
- package/lib/src/checkAuthentication.d.ts +0 -6
- package/lib/src/firebaseFunctionsContext.d.ts +0 -39
- package/lib/src/firebaseFunctionsContext.js +0 -43
- package/lib/src/pushNotification.d.ts +0 -3
- package/lib/src/pushNotification.js +0 -35
- package/lib/test/localization-utils.d.ts +0 -1
- package/lib/test/localization-utils.js +0 -24
- package/lib/test/localization.de.test.js +0 -151
- package/lib/test/localization.en.test.js +0 -145
- package/src/Firestore.ts +0 -75
- package/src/firebaseFunctionsContext.ts +0 -48
- package/src/pushNotification.ts +0 -37
- /package/lib/src/{FirestoreScheme.js → firebase/FirestoreScheme.js} +0 -0
- /package/lib/test/{localization.de.test.d.ts → firebase/FirebaseConfiguration.test.d.ts} +0 -0
- /package/lib/test/{localization.en.test.d.ts → firebase/Firestore.test.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Team, User, UserRole } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Type representing expected user role requirements.
|
|
4
|
+
*
|
|
5
|
+
* Can be:
|
|
6
|
+
* - A single `UserRole` (user must have this role)
|
|
7
|
+
* - An array of `ExpectedUserRoles` (user must satisfy ALL requirements - logical AND)
|
|
8
|
+
* - An object with `anyOf` property (user must satisfy AT LEAST ONE requirement - logical OR)
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* - `'admin'` - User must be admin
|
|
12
|
+
* - `['member', 'treasurer']` - User must be both member AND treasurer
|
|
13
|
+
* - `{ anyOf: ['admin', 'treasurer'] }` - User must be admin OR treasurer
|
|
14
|
+
*/
|
|
15
|
+
type ExpectedUserRoles = UserRole | ExpectedUserRoles[] | {
|
|
16
|
+
anyOf: ExpectedUserRoles[];
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Validates that a user is authenticated and has the required roles for a specific team.
|
|
20
|
+
*
|
|
21
|
+
* Performs comprehensive authentication checks:
|
|
22
|
+
* 1. Verifies the user is authenticated (rawUserId is not null)
|
|
23
|
+
* 2. Checks that the user exists in the database
|
|
24
|
+
* 3. Confirms the user is a member of the specified team
|
|
25
|
+
* 4. Validates that the person associated with the user exists
|
|
26
|
+
* 5. Ensures the person is signed in (has signInProperties)
|
|
27
|
+
* 6. Verifies the person has the required roles
|
|
28
|
+
*
|
|
29
|
+
* @param rawUserId - The raw user ID string from authentication context (null if not authenticated)
|
|
30
|
+
* @param teamId - The ID of the team to check membership and roles for
|
|
31
|
+
* @param roles - The expected role requirements (supports AND/OR logic via ExpectedUserRoles)
|
|
32
|
+
* @returns The validated User.Id if all checks pass
|
|
33
|
+
* @throws {FunctionsError} 'unauthenticated' - If rawUserId is null
|
|
34
|
+
* @throws {FunctionsError} 'permission-denied' - If any validation check fails
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkAuthentication(rawUserId: string | null, teamId: Team.Id, roles: ExpectedUserRoles): Promise<User.Id>;
|
|
37
|
+
export {};
|
|
@@ -2,8 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.checkAuthentication = checkAuthentication;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
|
-
const types_1 = require("
|
|
5
|
+
const types_1 = require("../types");
|
|
6
6
|
const Firestore_1 = require("./Firestore");
|
|
7
|
+
/**
|
|
8
|
+
* Checks if the user has the required roles according to the expected role requirements.
|
|
9
|
+
*
|
|
10
|
+
* @param userRoles - Array of roles the user currently has
|
|
11
|
+
* @param expectedRoles - The role requirements to check against (supports AND/OR logic)
|
|
12
|
+
* @returns `true` if the user satisfies the role requirements, `false` otherwise
|
|
13
|
+
*/
|
|
7
14
|
function hasUserRoles(userRoles, expectedRoles) {
|
|
8
15
|
if (Array.isArray(expectedRoles))
|
|
9
16
|
return expectedRoles.every(expectedRole => hasUserRoles(userRoles, expectedRole));
|
|
@@ -12,6 +19,24 @@ function hasUserRoles(userRoles, expectedRoles) {
|
|
|
12
19
|
else
|
|
13
20
|
return userRoles.includes(expectedRoles);
|
|
14
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Validates that a user is authenticated and has the required roles for a specific team.
|
|
24
|
+
*
|
|
25
|
+
* Performs comprehensive authentication checks:
|
|
26
|
+
* 1. Verifies the user is authenticated (rawUserId is not null)
|
|
27
|
+
* 2. Checks that the user exists in the database
|
|
28
|
+
* 3. Confirms the user is a member of the specified team
|
|
29
|
+
* 4. Validates that the person associated with the user exists
|
|
30
|
+
* 5. Ensures the person is signed in (has signInProperties)
|
|
31
|
+
* 6. Verifies the person has the required roles
|
|
32
|
+
*
|
|
33
|
+
* @param rawUserId - The raw user ID string from authentication context (null if not authenticated)
|
|
34
|
+
* @param teamId - The ID of the team to check membership and roles for
|
|
35
|
+
* @param roles - The expected role requirements (supports AND/OR logic via ExpectedUserRoles)
|
|
36
|
+
* @returns The validated User.Id if all checks pass
|
|
37
|
+
* @throws {FunctionsError} 'unauthenticated' - If rawUserId is null
|
|
38
|
+
* @throws {FunctionsError} 'permission-denied' - If any validation check fails
|
|
39
|
+
*/
|
|
15
40
|
async function checkAuthentication(rawUserId, teamId, roles) {
|
|
16
41
|
if (rawUserId === null)
|
|
17
42
|
throw new firebase_function_1.FunctionsError('unauthenticated', 'User is not authenticated');
|
|
@@ -16,3 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./FirebaseConfiguration"), exports);
|
|
18
18
|
__exportStar(require("./Messaging"), exports);
|
|
19
|
+
__exportStar(require("./checkAuthentication"), exports);
|
|
20
|
+
__exportStar(require("./Firestore"), exports);
|
|
21
|
+
__exportStar(require("./FirestoreScheme"), exports);
|
|
22
|
+
__exportStar(require("./pushNotification"), exports);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { NotificationProperties, Person, Team } from '../types';
|
|
2
|
+
import { Notification } from '.';
|
|
3
|
+
/**
|
|
4
|
+
* Sends a push notification to a person if they are subscribed to the topic.
|
|
5
|
+
*
|
|
6
|
+
* Retrieves the person's notification properties, checks their subscription status,
|
|
7
|
+
* sends the notification to all their registered device tokens, and updates their
|
|
8
|
+
* token list to remove any failed tokens.
|
|
9
|
+
*
|
|
10
|
+
* @param teamId - The unique identifier of the team
|
|
11
|
+
* @param personId - The unique identifier of the person
|
|
12
|
+
* @param topic - The notification subscription topic (e.g., 'new-fine', 'fine-reminder', 'fine-state-change')
|
|
13
|
+
* @param notification - The notification content to send
|
|
14
|
+
*
|
|
15
|
+
* @returns A promise that resolves when the notification is sent and person data is updated
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* The function will silently return without sending if:
|
|
19
|
+
* - The person does not exist in the database
|
|
20
|
+
* - The person is not signed in (signInProperties is null)
|
|
21
|
+
* - The person is not subscribed to the specified topic
|
|
22
|
+
*
|
|
23
|
+
* After sending, the person's token list is automatically updated to remove
|
|
24
|
+
* any tokens that are invalid or unregistered, maintaining clean notification data.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* await pushNotification(
|
|
29
|
+
* teamId,
|
|
30
|
+
* personId,
|
|
31
|
+
* 'new-fine',
|
|
32
|
+
* {
|
|
33
|
+
* title: 'New Fine',
|
|
34
|
+
* body: 'You have received a new fine'
|
|
35
|
+
* }
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function pushNotification(teamId: Team.Id, personId: Person.Id, topic: NotificationProperties.Subscription, notification: Notification): Promise<void>;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pushNotification = pushNotification;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
const Firestore_1 = require("./Firestore");
|
|
6
|
+
const types_1 = require("../types");
|
|
7
|
+
const _1 = require(".");
|
|
8
|
+
/**
|
|
9
|
+
* Filters successful tokens from a Firebase Cloud Messaging batch response.
|
|
10
|
+
*
|
|
11
|
+
* Removes tokens that failed due to invalid or unregistered registration tokens,
|
|
12
|
+
* keeping only the tokens that successfully received the notification.
|
|
13
|
+
*
|
|
14
|
+
* @param response - The batch response from Firebase Cloud Messaging
|
|
15
|
+
* @param tokens - The array of device tokens that were sent the notification
|
|
16
|
+
* @returns A dictionary mapping token IDs to their corresponding device tokens for successful deliveries
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* Filters out tokens with the following error codes:
|
|
20
|
+
* - `messaging/invalid-registration-token`: The token format is invalid
|
|
21
|
+
* - `messaging/registration-token-not-registered`: The token is no longer registered
|
|
22
|
+
*
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
function successfulTokens(response, tokens) {
|
|
26
|
+
const successfulTokens = response.responses
|
|
27
|
+
.map((response, index) => ({
|
|
28
|
+
failed: response.error?.code === 'messaging/invalid-registration-token' || response.error?.code === 'messaging/registration-token-not-registered',
|
|
29
|
+
token: tokens[index]
|
|
30
|
+
}))
|
|
31
|
+
.filter(response => !response.failed)
|
|
32
|
+
.map(response => response.token);
|
|
33
|
+
const tokenDict = new typescript_common_functionality_1.Dictionary(types_1.NotificationProperties.TokenId.builder);
|
|
34
|
+
for (const token of successfulTokens)
|
|
35
|
+
tokenDict.set(types_1.NotificationProperties.TokenId.create(token), token);
|
|
36
|
+
return tokenDict;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Sends a push notification to a person if they are subscribed to the topic.
|
|
40
|
+
*
|
|
41
|
+
* Retrieves the person's notification properties, checks their subscription status,
|
|
42
|
+
* sends the notification to all their registered device tokens, and updates their
|
|
43
|
+
* token list to remove any failed tokens.
|
|
44
|
+
*
|
|
45
|
+
* @param teamId - The unique identifier of the team
|
|
46
|
+
* @param personId - The unique identifier of the person
|
|
47
|
+
* @param topic - The notification subscription topic (e.g., 'new-fine', 'fine-reminder', 'fine-state-change')
|
|
48
|
+
* @param notification - The notification content to send
|
|
49
|
+
*
|
|
50
|
+
* @returns A promise that resolves when the notification is sent and person data is updated
|
|
51
|
+
*
|
|
52
|
+
* @remarks
|
|
53
|
+
* The function will silently return without sending if:
|
|
54
|
+
* - The person does not exist in the database
|
|
55
|
+
* - The person is not signed in (signInProperties is null)
|
|
56
|
+
* - The person is not subscribed to the specified topic
|
|
57
|
+
*
|
|
58
|
+
* After sending, the person's token list is automatically updated to remove
|
|
59
|
+
* any tokens that are invalid or unregistered, maintaining clean notification data.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* await pushNotification(
|
|
64
|
+
* teamId,
|
|
65
|
+
* personId,
|
|
66
|
+
* 'new-fine',
|
|
67
|
+
* {
|
|
68
|
+
* title: 'New Fine',
|
|
69
|
+
* body: 'You have received a new fine'
|
|
70
|
+
* }
|
|
71
|
+
* );
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
async function pushNotification(teamId, personId, topic, notification) {
|
|
75
|
+
const personSnapshot = await Firestore_1.Firestore.shared.person(teamId, personId).snapshot();
|
|
76
|
+
if (!personSnapshot.exists)
|
|
77
|
+
return;
|
|
78
|
+
const person = types_1.Person.builder.build(personSnapshot.data);
|
|
79
|
+
if (person.signInProperties === null || !person.signInProperties.notificationProperties.subscriptions.includes(topic))
|
|
80
|
+
return;
|
|
81
|
+
const tokens = person.signInProperties.notificationProperties.tokens.values;
|
|
82
|
+
const response = await _1.FirebaseConfiguration.shared.messaging.sendEachForMulticast({
|
|
83
|
+
tokens: tokens,
|
|
84
|
+
notification: notification
|
|
85
|
+
});
|
|
86
|
+
person.signInProperties.notificationProperties.tokens = successfulTokens(response, tokens);
|
|
87
|
+
await Firestore_1.Firestore.shared.person(teamId, personId).set(person);
|
|
88
|
+
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
2
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
3
3
|
import { Configuration, Fine, Person, Team } from '../../types';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
export declare class FineAddFunction extends FirebaseFunction<FineAddFunction.Parameters, void> {
|
|
4
|
+
export type FineAddFunctionParameters = {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
personId: Person.Id;
|
|
7
|
+
fine: Fine;
|
|
8
|
+
configuration: Configuration;
|
|
9
|
+
};
|
|
10
|
+
export declare abstract class FineAddFunctionBase extends FirebaseFunction<FineAddFunctionParameters, void> {
|
|
13
11
|
parametersBuilder: ObjectTypeBuilder<{
|
|
14
12
|
teamId: string;
|
|
15
13
|
personId: string;
|
|
@@ -28,10 +26,9 @@ export declare class FineAddFunction extends FirebaseFunction<FineAddFunction.Pa
|
|
|
28
26
|
};
|
|
29
27
|
};
|
|
30
28
|
configuration: {
|
|
31
|
-
currency:
|
|
32
|
-
locale:
|
|
29
|
+
currency: import("../../types").Currency;
|
|
30
|
+
locale: import("../../types").Locale;
|
|
33
31
|
};
|
|
34
|
-
},
|
|
32
|
+
}, FineAddFunctionParameters>;
|
|
35
33
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
36
|
-
execute(parameters: FineAddFunction.Parameters): Promise<void>;
|
|
37
34
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineAddFunctionBase = void 0;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
5
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
6
6
|
const types_1 = require("../../types");
|
|
7
|
-
|
|
8
|
-
const Firestore_1 = require("../../Firestore");
|
|
9
|
-
const pushNotification_1 = require("../../pushNotification");
|
|
10
|
-
class FineAddFunction extends firebase_function_1.FirebaseFunction {
|
|
7
|
+
class FineAddFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
11
8
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
12
9
|
teamId: types_1.Team.Id.builder,
|
|
13
10
|
personId: types_1.Person.Id.builder,
|
|
@@ -15,29 +12,5 @@ class FineAddFunction extends firebase_function_1.FirebaseFunction {
|
|
|
15
12
|
configuration: types_1.Configuration.builder
|
|
16
13
|
});
|
|
17
14
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
18
|
-
async execute(parameters) {
|
|
19
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, {
|
|
20
|
-
anyOf: ['fine-manager', 'fine-can-add']
|
|
21
|
-
});
|
|
22
|
-
const fineSnapshot = await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).snapshot();
|
|
23
|
-
if (fineSnapshot.exists)
|
|
24
|
-
throw new firebase_function_1.FunctionsError('already-exists', 'Fine already exists');
|
|
25
|
-
const personSnapshot = await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
|
|
26
|
-
if (!personSnapshot.exists)
|
|
27
|
-
throw new firebase_function_1.FunctionsError('not-found', 'Person not found');
|
|
28
|
-
const person = types_1.Person.builder.build(personSnapshot.data);
|
|
29
|
-
await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).set(parameters.fine);
|
|
30
|
-
person.fineIds.push(parameters.fine.id);
|
|
31
|
-
await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
|
|
32
|
-
types_1.Localization.locale = parameters.configuration.locale;
|
|
33
|
-
await (0, pushNotification_1.pushNotification)(parameters.teamId, parameters.personId, 'new-fine', {
|
|
34
|
-
title: types_1.Localization.shared.notification.fine.new.title.value({
|
|
35
|
-
reason: parameters.fine.reason
|
|
36
|
-
}),
|
|
37
|
-
body: types_1.Localization.shared.notification.fine.new.body.value({
|
|
38
|
-
amount: parameters.fine.amount.formatted(parameters.configuration)
|
|
39
|
-
})
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
15
|
}
|
|
43
|
-
exports.
|
|
16
|
+
exports.FineAddFunctionBase = FineAddFunctionBase;
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
2
|
import { Configuration, Fine, Person, Team } from '../../types';
|
|
3
3
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
export declare class FineDeleteFunction extends FirebaseFunction<FineDeleteFunction.Parameters, void> {
|
|
4
|
+
export type FineDeleteFunctionParameters = {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
personId: Person.Id;
|
|
7
|
+
id: Fine.Id;
|
|
8
|
+
configuration: Configuration;
|
|
9
|
+
};
|
|
10
|
+
export declare abstract class FineDeleteFunctionBase extends FirebaseFunction<FineDeleteFunctionParameters, void> {
|
|
13
11
|
parametersBuilder: ObjectTypeBuilder<{
|
|
14
12
|
teamId: string;
|
|
15
13
|
personId: string;
|
|
16
14
|
id: string;
|
|
17
15
|
configuration: {
|
|
18
|
-
currency:
|
|
19
|
-
locale:
|
|
16
|
+
currency: import("../../types").Currency;
|
|
17
|
+
locale: import("../../types").Locale;
|
|
20
18
|
};
|
|
21
|
-
},
|
|
19
|
+
}, FineDeleteFunctionParameters>;
|
|
22
20
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
23
|
-
execute(parameters: FineDeleteFunction.Parameters): Promise<void>;
|
|
24
21
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineDeleteFunctionBase = void 0;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
5
|
const types_1 = require("../../types");
|
|
6
6
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
7
|
-
|
|
8
|
-
const Firestore_1 = require("../../Firestore");
|
|
9
|
-
const pushNotification_1 = require("../../pushNotification");
|
|
10
|
-
class FineDeleteFunction extends firebase_function_1.FirebaseFunction {
|
|
7
|
+
class FineDeleteFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
11
8
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
12
9
|
teamId: types_1.Team.Id.builder,
|
|
13
10
|
personId: types_1.Person.Id.builder,
|
|
@@ -15,26 +12,5 @@ class FineDeleteFunction extends firebase_function_1.FirebaseFunction {
|
|
|
15
12
|
configuration: types_1.Configuration.builder
|
|
16
13
|
});
|
|
17
14
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
18
|
-
async execute(parameters) {
|
|
19
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fine-manager');
|
|
20
|
-
const fineSnapshot = await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.id).snapshot();
|
|
21
|
-
if (!fineSnapshot.exists)
|
|
22
|
-
throw new firebase_function_1.FunctionsError('not-found', 'Fine not found');
|
|
23
|
-
const personSnapshot = await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
|
|
24
|
-
if (!personSnapshot.exists)
|
|
25
|
-
throw new firebase_function_1.FunctionsError('not-found', 'Person not found');
|
|
26
|
-
const person = types_1.Person.builder.build(personSnapshot.data);
|
|
27
|
-
await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.id).remove();
|
|
28
|
-
person.fineIds = person.fineIds.filter(id => id.guidString !== parameters.id.guidString);
|
|
29
|
-
await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
|
|
30
|
-
types_1.Localization.locale = parameters.configuration.locale;
|
|
31
|
-
await (0, pushNotification_1.pushNotification)(parameters.teamId, parameters.personId, 'fine-state-change', {
|
|
32
|
-
title: types_1.Localization.shared.notification.fine.stateChange.title.value(),
|
|
33
|
-
body: types_1.Localization.shared.notification.fine.stateChange.bodyDeleted.value({
|
|
34
|
-
amount: types_1.FineAmount.builder.build(fineSnapshot.data.amount).formatted(parameters.configuration),
|
|
35
|
-
reason: fineSnapshot.data.reason
|
|
36
|
-
})
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
15
|
}
|
|
40
|
-
exports.
|
|
16
|
+
exports.FineDeleteFunctionBase = FineDeleteFunctionBase;
|
|
@@ -2,15 +2,13 @@ import { Configuration } from '../../types/Configuration';
|
|
|
2
2
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
3
3
|
import { Fine, Person, Team } from '../../types';
|
|
4
4
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
export declare class FineUpdateFunction extends FirebaseFunction<FineUpdateFunction.Parameters, void> {
|
|
5
|
+
export type FineUpdateFunctionParameters = {
|
|
6
|
+
teamId: Team.Id;
|
|
7
|
+
personId: Person.Id;
|
|
8
|
+
fine: Fine;
|
|
9
|
+
configuration: Configuration;
|
|
10
|
+
};
|
|
11
|
+
export declare abstract class FineUpdateFunctionBase extends FirebaseFunction<FineUpdateFunctionParameters, void> {
|
|
14
12
|
parametersBuilder: ObjectTypeBuilder<{
|
|
15
13
|
teamId: string;
|
|
16
14
|
personId: string;
|
|
@@ -29,10 +27,9 @@ export declare class FineUpdateFunction extends FirebaseFunction<FineUpdateFunct
|
|
|
29
27
|
};
|
|
30
28
|
};
|
|
31
29
|
configuration: {
|
|
32
|
-
currency:
|
|
33
|
-
locale:
|
|
30
|
+
currency: import("../../types").Currency;
|
|
31
|
+
locale: import("../../types").Locale;
|
|
34
32
|
};
|
|
35
|
-
},
|
|
33
|
+
}, FineUpdateFunctionParameters>;
|
|
36
34
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
37
|
-
execute(parameters: FineUpdateFunction.Parameters): Promise<void>;
|
|
38
35
|
}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineUpdateFunctionBase = void 0;
|
|
4
4
|
const Configuration_1 = require("../../types/Configuration");
|
|
5
5
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
6
|
-
const pushNotification_1 = require("../../pushNotification");
|
|
7
6
|
const types_1 = require("../../types");
|
|
8
7
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
9
|
-
|
|
10
|
-
const Firestore_1 = require("../../Firestore");
|
|
11
|
-
class FineUpdateFunction extends firebase_function_1.FirebaseFunction {
|
|
8
|
+
class FineUpdateFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
12
9
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
13
10
|
teamId: types_1.Team.Id.builder,
|
|
14
11
|
personId: types_1.Person.Id.builder,
|
|
@@ -16,27 +13,5 @@ class FineUpdateFunction extends firebase_function_1.FirebaseFunction {
|
|
|
16
13
|
configuration: Configuration_1.Configuration.builder
|
|
17
14
|
});
|
|
18
15
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
19
|
-
async execute(parameters) {
|
|
20
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fine-manager');
|
|
21
|
-
const fineSnapshot = await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).snapshot();
|
|
22
|
-
if (!fineSnapshot.exists)
|
|
23
|
-
throw new firebase_function_1.FunctionsError('not-found', 'Fine not found');
|
|
24
|
-
await Firestore_1.Firestore.shared.fine(parameters.teamId, parameters.fine.id).set(parameters.fine);
|
|
25
|
-
types_1.Localization.locale = parameters.configuration.locale;
|
|
26
|
-
if (parameters.fine.payedState !== fineSnapshot.data.payedState) {
|
|
27
|
-
let bodyLocalization;
|
|
28
|
-
if (parameters.fine.payedState === 'payed')
|
|
29
|
-
bodyLocalization = types_1.Localization.shared.notification.fine.stateChange.bodyPayed;
|
|
30
|
-
else
|
|
31
|
-
bodyLocalization = types_1.Localization.shared.notification.fine.stateChange.bodyUnpayed;
|
|
32
|
-
await (0, pushNotification_1.pushNotification)(parameters.teamId, parameters.personId, 'fine-state-change', {
|
|
33
|
-
title: types_1.Localization.shared.notification.fine.stateChange.title.value(),
|
|
34
|
-
body: bodyLocalization.value({
|
|
35
|
-
reason: parameters.fine.reason,
|
|
36
|
-
amount: parameters.fine.amount.formatted(parameters.configuration)
|
|
37
|
-
})
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
16
|
}
|
|
42
|
-
exports.
|
|
17
|
+
exports.FineUpdateFunctionBase = FineUpdateFunctionBase;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
2
|
import { FineTemplate, Team } from '../../types';
|
|
3
3
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export declare class FineTemplateAddFunction extends FirebaseFunction<FineTemplateAddFunction.Parameters, void> {
|
|
4
|
+
export type FineTemplateAddFunctionParameters = {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
fineTemplate: FineTemplate;
|
|
7
|
+
};
|
|
8
|
+
export declare abstract class FineTemplateAddFunctionBase extends FirebaseFunction<FineTemplateAddFunctionParameters, void> {
|
|
11
9
|
parametersBuilder: ObjectTypeBuilder<{
|
|
12
10
|
teamId: string;
|
|
13
11
|
fineTemplate: {
|
|
@@ -26,7 +24,6 @@ export declare class FineTemplateAddFunction extends FirebaseFunction<FineTempla
|
|
|
26
24
|
maxCount: number | null;
|
|
27
25
|
} | null;
|
|
28
26
|
};
|
|
29
|
-
},
|
|
27
|
+
}, FineTemplateAddFunctionParameters>;
|
|
30
28
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
31
|
-
execute(parameters: FineTemplateAddFunction.Parameters): Promise<void>;
|
|
32
29
|
}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineTemplateAddFunctionBase = void 0;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
5
|
const types_1 = require("../../types");
|
|
6
6
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
7
|
-
|
|
8
|
-
const Firestore_1 = require("../../Firestore");
|
|
9
|
-
class FineTemplateAddFunction extends firebase_function_1.FirebaseFunction {
|
|
7
|
+
class FineTemplateAddFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
10
8
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
11
9
|
teamId: types_1.Team.Id.builder,
|
|
12
10
|
fineTemplate: types_1.FineTemplate.builder
|
|
13
11
|
});
|
|
14
12
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
15
|
-
async execute(parameters) {
|
|
16
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fineTemplate-manager');
|
|
17
|
-
const fineTemplateSnapshot = await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.fineTemplate.id).snapshot();
|
|
18
|
-
if (fineTemplateSnapshot.exists)
|
|
19
|
-
throw new firebase_function_1.FunctionsError('already-exists', 'FineTemplate already exists');
|
|
20
|
-
await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.fineTemplate.id).set(parameters.fineTemplate);
|
|
21
|
-
}
|
|
22
13
|
}
|
|
23
|
-
exports.
|
|
14
|
+
exports.FineTemplateAddFunctionBase = FineTemplateAddFunctionBase;
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
2
|
import { FineTemplate, Team } from '../../types';
|
|
3
3
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export declare class FineTemplateDeleteFunction extends FirebaseFunction<FineTemplateDeleteFunction.Parameters, void> {
|
|
4
|
+
export type FineTemplateDeleteFunctionParameters = {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
id: FineTemplate.Id;
|
|
7
|
+
};
|
|
8
|
+
export declare abstract class FineTemplateDeleteFunctionBase extends FirebaseFunction<FineTemplateDeleteFunctionParameters, void> {
|
|
11
9
|
parametersBuilder: ObjectTypeBuilder<{
|
|
12
10
|
teamId: string;
|
|
13
11
|
id: string;
|
|
14
|
-
},
|
|
12
|
+
}, FineTemplateDeleteFunctionParameters>;
|
|
15
13
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
16
|
-
execute(parameters: FineTemplateDeleteFunction.Parameters): Promise<void>;
|
|
17
14
|
}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineTemplateDeleteFunctionBase = void 0;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
5
|
const types_1 = require("../../types");
|
|
6
6
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
7
|
-
|
|
8
|
-
const Firestore_1 = require("../../Firestore");
|
|
9
|
-
class FineTemplateDeleteFunction extends firebase_function_1.FirebaseFunction {
|
|
7
|
+
class FineTemplateDeleteFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
10
8
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
11
9
|
teamId: types_1.Team.Id.builder,
|
|
12
10
|
id: types_1.FineTemplate.Id.builder
|
|
13
11
|
});
|
|
14
12
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
15
|
-
async execute(parameters) {
|
|
16
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fineTemplate-manager');
|
|
17
|
-
const fineTemplateSnapshot = await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.id).snapshot();
|
|
18
|
-
if (!fineTemplateSnapshot.exists)
|
|
19
|
-
throw new firebase_function_1.FunctionsError('not-found', 'FineTemplate not found');
|
|
20
|
-
await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.id).remove();
|
|
21
|
-
}
|
|
22
13
|
}
|
|
23
|
-
exports.
|
|
14
|
+
exports.FineTemplateDeleteFunctionBase = FineTemplateDeleteFunctionBase;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
2
|
import { FineTemplate, Team } from '../../types';
|
|
3
3
|
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export declare class FineTemplateUpdateFunction extends FirebaseFunction<FineTemplateUpdateFunction.Parameters, void> {
|
|
4
|
+
export type FineTemplateUpdateFunctionParameters = {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
fineTemplate: FineTemplate;
|
|
7
|
+
};
|
|
8
|
+
export declare abstract class FineTemplateUpdateFunctionBase extends FirebaseFunction<FineTemplateUpdateFunctionParameters, void> {
|
|
11
9
|
parametersBuilder: ObjectTypeBuilder<{
|
|
12
10
|
teamId: string;
|
|
13
11
|
fineTemplate: {
|
|
@@ -26,7 +24,6 @@ export declare class FineTemplateUpdateFunction extends FirebaseFunction<FineTem
|
|
|
26
24
|
maxCount: number | null;
|
|
27
25
|
} | null;
|
|
28
26
|
};
|
|
29
|
-
},
|
|
27
|
+
}, FineTemplateUpdateFunctionParameters>;
|
|
30
28
|
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
31
|
-
execute(parameters: FineTemplateUpdateFunction.Parameters): Promise<void>;
|
|
32
29
|
}
|
|
@@ -1,23 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FineTemplateUpdateFunctionBase = void 0;
|
|
4
4
|
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
5
|
const types_1 = require("../../types");
|
|
6
6
|
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
7
|
-
|
|
8
|
-
const Firestore_1 = require("../../Firestore");
|
|
9
|
-
class FineTemplateUpdateFunction extends firebase_function_1.FirebaseFunction {
|
|
7
|
+
class FineTemplateUpdateFunctionBase extends firebase_function_1.FirebaseFunction {
|
|
10
8
|
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
11
9
|
teamId: types_1.Team.Id.builder,
|
|
12
10
|
fineTemplate: types_1.FineTemplate.builder
|
|
13
11
|
});
|
|
14
12
|
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
15
|
-
async execute(parameters) {
|
|
16
|
-
await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'fineTemplate-manager');
|
|
17
|
-
const fineTemplateSnapshot = await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.fineTemplate.id).snapshot();
|
|
18
|
-
if (!fineTemplateSnapshot.exists)
|
|
19
|
-
throw new firebase_function_1.FunctionsError('not-found', 'FineTemplate not found');
|
|
20
|
-
await Firestore_1.Firestore.shared.fineTemplate(parameters.teamId, parameters.fineTemplate.id).set(parameters.fineTemplate);
|
|
21
|
-
}
|
|
22
13
|
}
|
|
23
|
-
exports.
|
|
14
|
+
exports.FineTemplateUpdateFunctionBase = FineTemplateUpdateFunctionBase;
|