@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.
- package/lib/src/Firestore.d.ts +15 -0
- package/lib/src/Firestore.js +53 -0
- package/{src/FirestoreScheme.ts → lib/src/FirestoreScheme.d.ts} +12 -13
- package/lib/src/FirestoreScheme.js +2 -0
- package/lib/src/checkAuthentication.d.ts +2 -0
- package/lib/src/checkAuthentication.js +31 -0
- package/lib/src/firebase/FirebaseConfiguration.d.ts +15 -0
- package/lib/src/firebase/FirebaseConfiguration.js +28 -0
- package/{src/firebase/Messaging.ts → lib/src/firebase/Messaging.d.ts} +0 -3
- package/lib/src/firebase/Messaging.js +2 -0
- package/lib/src/firebase/index.js +18 -0
- package/lib/src/firebaseFunctionCreators.d.ts +50 -0
- package/lib/src/firebaseFunctionCreators.js +58 -0
- package/lib/src/functions/fine/add.d.ts +37 -0
- package/lib/src/functions/fine/add.js +71 -0
- package/lib/src/functions/fine/delete.d.ts +24 -0
- package/lib/src/functions/fine/delete.js +71 -0
- package/lib/src/functions/fine/update.d.ts +38 -0
- package/lib/src/functions/fine/update.js +73 -0
- package/lib/src/functions/fineTemplate/add.d.ts +32 -0
- package/lib/src/functions/fineTemplate/add.js +23 -0
- package/lib/src/functions/fineTemplate/delete.d.ts +17 -0
- package/lib/src/functions/fineTemplate/delete.js +23 -0
- package/lib/src/functions/fineTemplate/update.d.ts +32 -0
- package/lib/src/functions/fineTemplate/update.js +23 -0
- package/lib/src/functions/invitation/invite.d.ts +7 -0
- package/lib/src/functions/invitation/invite.js +23 -0
- package/lib/src/functions/invitation/register.d.ts +7 -0
- package/lib/src/functions/invitation/register.js +43 -0
- package/lib/src/functions/invitation/withdraw.d.ts +8 -0
- package/lib/src/functions/invitation/withdraw.js +21 -0
- package/lib/src/functions/notification/register.d.ts +19 -0
- package/lib/src/functions/notification/register.js +27 -0
- package/lib/src/functions/notification/subscribe.d.ts +19 -0
- package/lib/src/functions/notification/subscribe.js +26 -0
- package/lib/src/functions/paypalMe/edit.d.ts +17 -0
- package/lib/src/functions/paypalMe/edit.js +25 -0
- package/lib/src/functions/person/add.d.ts +22 -0
- package/lib/src/functions/person/add.js +24 -0
- package/lib/src/functions/person/delete.d.ts +17 -0
- package/lib/src/functions/person/delete.js +25 -0
- package/lib/src/functions/person/update.d.ts +22 -0
- package/lib/src/functions/person/update.js +25 -0
- package/lib/src/functions/team/new.d.ts +26 -0
- package/lib/src/functions/team/new.js +36 -0
- package/lib/src/functions/user/login.d.ts +8 -0
- package/lib/src/functions/user/login.js +21 -0
- package/lib/src/functions/user/roleEdit.d.ts +19 -0
- package/lib/src/functions/user/roleEdit.js +30 -0
- package/lib/src/pushNotification.d.ts +3 -0
- package/lib/src/pushNotification.js +35 -0
- package/lib/src/types/Configuration.d.ts +27 -0
- package/lib/src/types/Configuration.js +38 -0
- package/lib/src/types/Fine.d.ts +30 -0
- package/lib/src/types/Fine.js +42 -0
- package/lib/src/types/FineAmount.d.ts +51 -0
- package/lib/src/types/FineAmount.js +124 -0
- package/lib/src/types/FineTemplate.d.ts +28 -0
- package/lib/src/types/FineTemplate.js +40 -0
- package/lib/src/types/FineTemplateRepetition.d.ts +22 -0
- package/lib/src/types/FineTemplateRepetition.js +38 -0
- package/lib/src/types/Invitation.d.ts +25 -0
- package/lib/src/types/Invitation.js +42 -0
- package/lib/src/types/MoneyAmount.d.ts +17 -0
- package/lib/src/types/MoneyAmount.js +68 -0
- package/lib/src/types/NotificationProperties.d.ts +28 -0
- package/lib/src/types/NotificationProperties.js +50 -0
- package/lib/src/types/PayedState.d.ts +6 -0
- package/lib/src/types/PayedState.js +9 -0
- package/lib/src/types/Person.d.ts +29 -0
- package/lib/src/types/Person.js +41 -0
- package/lib/src/types/PersonPrivateProperties.d.ts +17 -0
- package/lib/src/types/PersonPrivateProperties.js +27 -0
- package/lib/src/types/PersonSignInProperties.d.ts +24 -0
- package/lib/src/types/PersonSignInProperties.js +36 -0
- package/lib/src/types/Team.d.ts +24 -0
- package/lib/src/types/Team.js +35 -0
- package/lib/src/types/User.d.ts +40 -0
- package/lib/src/types/User.js +58 -0
- package/lib/src/types/UserRole.d.ts +6 -0
- package/lib/src/types/UserRole.js +14 -0
- package/lib/src/types/index.js +31 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +4 -1
- package/eslint.config.js +0 -72
- package/src/Firestore.ts +0 -63
- package/src/checkAuthentication.ts +0 -36
- package/src/firebase/FirebaseConfiguration.ts +0 -39
- package/src/firebaseFunctionCreators.ts +0 -56
- package/src/functions/fine/add.ts +0 -54
- package/src/functions/fine/delete.ts +0 -54
- package/src/functions/fine/update.ts +0 -55
- package/src/functions/fineTemplate/add.ts +0 -34
- package/src/functions/fineTemplate/delete.ts +0 -34
- package/src/functions/fineTemplate/update.ts +0 -34
- package/src/functions/invitation/invite.ts +0 -28
- package/src/functions/invitation/register.ts +0 -54
- package/src/functions/invitation/withdraw.ts +0 -24
- package/src/functions/notification/register.ts +0 -39
- package/src/functions/notification/subscribe.ts +0 -38
- package/src/functions/paypalMe/edit.ts +0 -36
- package/src/functions/person/add.ts +0 -36
- package/src/functions/person/delete.ts +0 -37
- package/src/functions/person/update.ts +0 -37
- package/src/functions/team/new.ts +0 -54
- package/src/functions/user/login.ts +0 -25
- package/src/functions/user/roleEdit.ts +0 -44
- package/src/locales/de.json +0 -30
- package/src/locales/en.json +0 -30
- package/src/pushNotification.ts +0 -37
- package/src/types/Configuration.ts +0 -54
- package/src/types/Fine.ts +0 -59
- package/src/types/FineAmount.ts +0 -123
- package/src/types/FineTemplate.ts +0 -55
- package/src/types/FineTemplateRepetition.ts +0 -54
- package/src/types/Invitation.ts +0 -56
- package/src/types/MoneyAmount.ts +0 -41
- package/src/types/NotificationProperties.ts +0 -67
- package/src/types/PayedState.ts +0 -12
- package/src/types/Person.ts +0 -56
- package/src/types/PersonPrivateProperties.ts +0 -37
- package/src/types/PersonSignInProperties.ts +0 -42
- package/src/types/Team.ts +0 -49
- package/src/types/User.ts +0 -76
- package/src/types/UserRole.ts +0 -19
- package/tsconfig.json +0 -117
- /package/{index.ts → lib/index.d.ts} +0 -0
- /package/{src/firebase/index.ts → lib/src/firebase/index.d.ts} +0 -0
- /package/{src/types/index.ts → lib/src/types/index.d.ts} +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ObjectTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
3
|
+
import { Person, PersonPrivateProperties, User, Team } from '../../types';
|
|
4
|
+
export declare namespace TeamNewFunction {
|
|
5
|
+
type Parameters = {
|
|
6
|
+
id: Team.Id;
|
|
7
|
+
name: string;
|
|
8
|
+
paypalMeLink: string | null;
|
|
9
|
+
personId: Person.Id;
|
|
10
|
+
personProperties: PersonPrivateProperties;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export declare class TeamNewFunction extends FirebaseFunction<TeamNewFunction.Parameters, User> {
|
|
14
|
+
parametersBuilder: ObjectTypeBuilder<{
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
paypalMeLink: string | null;
|
|
18
|
+
personId: string;
|
|
19
|
+
personProperties: {
|
|
20
|
+
firstName: string;
|
|
21
|
+
lastName: string | null;
|
|
22
|
+
};
|
|
23
|
+
}, TeamNewFunction.Parameters>;
|
|
24
|
+
returnTypeBuilder: User.TypeBuilder;
|
|
25
|
+
execute(parameters: TeamNewFunction.Parameters): Promise<User>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TeamNewFunction = void 0;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
6
|
+
const types_1 = require("../../types");
|
|
7
|
+
const Firestore_1 = require("../../Firestore");
|
|
8
|
+
class TeamNewFunction extends firebase_function_1.FirebaseFunction {
|
|
9
|
+
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
10
|
+
id: types_1.Team.Id.builder,
|
|
11
|
+
name: new typescript_common_functionality_1.ValueTypeBuilder(),
|
|
12
|
+
paypalMeLink: new typescript_common_functionality_1.ValueTypeBuilder(),
|
|
13
|
+
personId: types_1.Person.Id.builder,
|
|
14
|
+
personProperties: types_1.PersonPrivateProperties.builder
|
|
15
|
+
});
|
|
16
|
+
returnTypeBuilder = types_1.User.builder;
|
|
17
|
+
async execute(parameters) {
|
|
18
|
+
if (this.userId === null)
|
|
19
|
+
throw new firebase_function_1.FunctionsError('permission-denied', 'User is not authenticated');
|
|
20
|
+
const userId = types_1.User.Id.builder.build(this.userId);
|
|
21
|
+
const teamSnapshot = await Firestore_1.Firestore.shared.team(parameters.id).snapshot();
|
|
22
|
+
if (teamSnapshot.exists)
|
|
23
|
+
throw new firebase_function_1.FunctionsError('already-exists', 'Team already exists');
|
|
24
|
+
const userSnapshot = await Firestore_1.Firestore.shared.user(userId).snapshot();
|
|
25
|
+
let user = new types_1.User(userId);
|
|
26
|
+
if (userSnapshot.exists)
|
|
27
|
+
user = types_1.User.builder.build(userSnapshot.data);
|
|
28
|
+
user.teams.set(parameters.id, new types_1.User.TeamProperties(parameters.name, parameters.personId));
|
|
29
|
+
await Firestore_1.Firestore.shared.user(userId).set(user);
|
|
30
|
+
await Firestore_1.Firestore.shared.team(parameters.id).set(new types_1.Team(parameters.id, parameters.name, parameters.paypalMeLink));
|
|
31
|
+
const signInProperties = new types_1.PersonSignInProperties(userId, typescript_common_functionality_1.UtcDate.now, new types_1.NotificationProperties(), types_1.UserRole.all);
|
|
32
|
+
await Firestore_1.Firestore.shared.person(parameters.id, parameters.personId).set(new types_1.Person(parameters.personId, parameters.personProperties, [], signInProperties));
|
|
33
|
+
return user;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.TeamNewFunction = TeamNewFunction;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
|
+
import { User } from '../../types';
|
|
3
|
+
import { ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
+
export declare class UserLoginFunction extends FirebaseFunction<null, User> {
|
|
5
|
+
parametersBuilder: ValueTypeBuilder<null>;
|
|
6
|
+
returnTypeBuilder: User.TypeBuilder;
|
|
7
|
+
execute(): Promise<User>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserLoginFunction = void 0;
|
|
4
|
+
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
|
+
const types_1 = require("../../types");
|
|
6
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
7
|
+
const Firestore_1 = require("../../Firestore");
|
|
8
|
+
class UserLoginFunction extends firebase_function_1.FirebaseFunction {
|
|
9
|
+
parametersBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
10
|
+
returnTypeBuilder = types_1.User.builder;
|
|
11
|
+
async execute() {
|
|
12
|
+
if (this.userId === null)
|
|
13
|
+
throw new firebase_function_1.FunctionsError('unauthenticated', 'User is not authenticated.');
|
|
14
|
+
const userId = types_1.User.Id.builder.build(this.userId);
|
|
15
|
+
const userSnapshot = await Firestore_1.Firestore.shared.user(userId).snapshot();
|
|
16
|
+
if (!userSnapshot.exists)
|
|
17
|
+
throw new firebase_function_1.FunctionsError('not-found', 'User not found.');
|
|
18
|
+
return types_1.User.builder.build(userSnapshot.data);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.UserLoginFunction = UserLoginFunction;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FirebaseFunction } from '@stevenkellner/firebase-function';
|
|
2
|
+
import { Person, Team, UserRole } from '../../types';
|
|
3
|
+
import { ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
4
|
+
export declare namespace UserRoleEditFunction {
|
|
5
|
+
type Parameters = {
|
|
6
|
+
teamId: Team.Id;
|
|
7
|
+
personId: Person.Id;
|
|
8
|
+
roles: UserRole[];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export declare class UserRoleEditFunction extends FirebaseFunction<UserRoleEditFunction.Parameters, void> {
|
|
12
|
+
parametersBuilder: ObjectTypeBuilder<{
|
|
13
|
+
teamId: string;
|
|
14
|
+
personId: string;
|
|
15
|
+
roles: UserRole[];
|
|
16
|
+
}, UserRoleEditFunction.Parameters>;
|
|
17
|
+
returnTypeBuilder: ValueTypeBuilder<void>;
|
|
18
|
+
execute(parameters: UserRoleEditFunction.Parameters): Promise<void>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserRoleEditFunction = void 0;
|
|
4
|
+
const firebase_function_1 = require("@stevenkellner/firebase-function");
|
|
5
|
+
const checkAuthentication_1 = require("../../checkAuthentication");
|
|
6
|
+
const types_1 = require("../../types");
|
|
7
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
8
|
+
const Firestore_1 = require("../../Firestore");
|
|
9
|
+
class UserRoleEditFunction extends firebase_function_1.FirebaseFunction {
|
|
10
|
+
parametersBuilder = new typescript_common_functionality_1.ObjectTypeBuilder({
|
|
11
|
+
teamId: types_1.Team.Id.builder,
|
|
12
|
+
personId: types_1.Person.Id.builder,
|
|
13
|
+
roles: new typescript_common_functionality_1.ArrayTypeBuilder(new typescript_common_functionality_1.ValueTypeBuilder())
|
|
14
|
+
});
|
|
15
|
+
returnTypeBuilder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
16
|
+
async execute(parameters) {
|
|
17
|
+
const userId = await (0, checkAuthentication_1.checkAuthentication)(this.userId, parameters.teamId, 'team-manager');
|
|
18
|
+
const personSnapshot = await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
|
|
19
|
+
if (!personSnapshot.exists)
|
|
20
|
+
throw new firebase_function_1.FunctionsError('not-found', 'User does not exist');
|
|
21
|
+
const person = types_1.Person.builder.build(personSnapshot.data);
|
|
22
|
+
if (person.signInProperties === null)
|
|
23
|
+
throw new firebase_function_1.FunctionsError('permission-denied', 'User is not signed in');
|
|
24
|
+
if (person.signInProperties.userId.value === userId.value && !parameters.roles.includes('team-manager'))
|
|
25
|
+
throw new firebase_function_1.FunctionsError('unavailable', 'User cannot remove their own team-manager role');
|
|
26
|
+
person.signInProperties.roles = parameters.roles;
|
|
27
|
+
await Firestore_1.Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.UserRoleEditFunction = UserRoleEditFunction;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { NotificationProperties, Person, Team } from './types';
|
|
2
|
+
import { Notification } from './firebase';
|
|
3
|
+
export declare function pushNotification(teamId: Team.Id, personId: Person.Id, topic: NotificationProperties.Subscription, notification: Notification): Promise<void>;
|
|
@@ -0,0 +1,35 @@
|
|
|
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 firebase_1 = require("./firebase");
|
|
8
|
+
function successfulTokens(response, tokens) {
|
|
9
|
+
const successfulTokens = response.responses
|
|
10
|
+
.map((response, index) => ({
|
|
11
|
+
failed: response.error?.code === 'messaging/invalid-registration-token' || response.error?.code === 'messaging/registration-token-not-registered',
|
|
12
|
+
token: tokens[index]
|
|
13
|
+
}))
|
|
14
|
+
.filter(response => !response.failed)
|
|
15
|
+
.map(response => response.token);
|
|
16
|
+
const tokenDict = new typescript_common_functionality_1.Dictionary(types_1.NotificationProperties.TokenId.builder);
|
|
17
|
+
for (const token of successfulTokens)
|
|
18
|
+
tokenDict.set(types_1.NotificationProperties.TokenId.create(token), token);
|
|
19
|
+
return tokenDict;
|
|
20
|
+
}
|
|
21
|
+
async function pushNotification(teamId, personId, topic, notification) {
|
|
22
|
+
const personSnapshot = await Firestore_1.Firestore.shared.person(teamId, personId).snapshot();
|
|
23
|
+
if (!personSnapshot.exists)
|
|
24
|
+
return;
|
|
25
|
+
const person = types_1.Person.builder.build(personSnapshot.data);
|
|
26
|
+
if (person.signInProperties === null || !person.signInProperties.notificationProperties.subscriptions.includes(topic))
|
|
27
|
+
return;
|
|
28
|
+
const tokens = person.signInProperties.notificationProperties.tokens.values;
|
|
29
|
+
const response = await firebase_1.FirebaseConfiguration.shared.messaging.sendEachForMulticast({
|
|
30
|
+
tokens: tokens,
|
|
31
|
+
notification: notification
|
|
32
|
+
});
|
|
33
|
+
person.signInProperties.notificationProperties.tokens = successfulTokens(response, tokens);
|
|
34
|
+
await Firestore_1.Firestore.shared.person(teamId, personId).set(person);
|
|
35
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Flattable, ITypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
export declare class Configuration implements Flattable<Configuration.Flatten> {
|
|
3
|
+
currency: Configuration.Currency;
|
|
4
|
+
locale: Configuration.Locale;
|
|
5
|
+
constructor(currency: Configuration.Currency, locale: Configuration.Locale);
|
|
6
|
+
get flatten(): Configuration.Flatten;
|
|
7
|
+
}
|
|
8
|
+
export declare namespace Configuration {
|
|
9
|
+
type Currency = 'EUR' | 'USD';
|
|
10
|
+
namespace Currency {
|
|
11
|
+
const all: Currency[];
|
|
12
|
+
const builder: ValueTypeBuilder<Currency>;
|
|
13
|
+
}
|
|
14
|
+
type Locale = 'de' | 'en';
|
|
15
|
+
namespace Locale {
|
|
16
|
+
const all: Locale[];
|
|
17
|
+
const builder: ValueTypeBuilder<Locale>;
|
|
18
|
+
}
|
|
19
|
+
type Flatten = {
|
|
20
|
+
currency: Currency;
|
|
21
|
+
locale: Locale;
|
|
22
|
+
};
|
|
23
|
+
class TypeBuilder implements ITypeBuilder<Flatten, Configuration> {
|
|
24
|
+
build(flatten: Flatten): Configuration;
|
|
25
|
+
}
|
|
26
|
+
const builder: TypeBuilder;
|
|
27
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Configuration = void 0;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
class Configuration {
|
|
6
|
+
currency;
|
|
7
|
+
locale;
|
|
8
|
+
constructor(currency, locale) {
|
|
9
|
+
this.currency = currency;
|
|
10
|
+
this.locale = locale;
|
|
11
|
+
}
|
|
12
|
+
get flatten() {
|
|
13
|
+
return {
|
|
14
|
+
currency: this.currency,
|
|
15
|
+
locale: this.locale
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.Configuration = Configuration;
|
|
20
|
+
(function (Configuration) {
|
|
21
|
+
let Currency;
|
|
22
|
+
(function (Currency) {
|
|
23
|
+
Currency.all = ['EUR', 'USD'];
|
|
24
|
+
Currency.builder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
25
|
+
})(Currency = Configuration.Currency || (Configuration.Currency = {}));
|
|
26
|
+
let Locale;
|
|
27
|
+
(function (Locale) {
|
|
28
|
+
Locale.all = ['de', 'en'];
|
|
29
|
+
Locale.builder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
30
|
+
})(Locale = Configuration.Locale || (Configuration.Locale = {}));
|
|
31
|
+
class TypeBuilder {
|
|
32
|
+
build(flatten) {
|
|
33
|
+
return new Configuration(flatten.currency, flatten.locale);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
Configuration.TypeBuilder = TypeBuilder;
|
|
37
|
+
Configuration.builder = new TypeBuilder();
|
|
38
|
+
})(Configuration || (exports.Configuration = Configuration = {}));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Flattable, Guid, ITypeBuilder, Tagged, UtcDate } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
import { FineAmount } from './FineAmount';
|
|
3
|
+
import { PayedState } from './PayedState';
|
|
4
|
+
export declare class Fine implements Flattable<Fine.Flatten> {
|
|
5
|
+
id: Fine.Id;
|
|
6
|
+
payedState: PayedState;
|
|
7
|
+
date: UtcDate;
|
|
8
|
+
reason: string;
|
|
9
|
+
amount: FineAmount;
|
|
10
|
+
constructor(id: Fine.Id, payedState: PayedState, date: UtcDate, reason: string, amount: FineAmount);
|
|
11
|
+
get flatten(): Fine.Flatten;
|
|
12
|
+
}
|
|
13
|
+
export declare namespace Fine {
|
|
14
|
+
type Id = Tagged<Guid, 'fine'>;
|
|
15
|
+
namespace Id {
|
|
16
|
+
type Flatten = string;
|
|
17
|
+
const builder: Tagged.TypeBuilder<Guid, "fine">;
|
|
18
|
+
}
|
|
19
|
+
type Flatten = {
|
|
20
|
+
id: Id.Flatten;
|
|
21
|
+
payedState: PayedState;
|
|
22
|
+
date: UtcDate.Flatten;
|
|
23
|
+
reason: string;
|
|
24
|
+
amount: FineAmount.Flatten;
|
|
25
|
+
};
|
|
26
|
+
class TypeBuilder implements ITypeBuilder<Flatten, Fine> {
|
|
27
|
+
build(value: Flatten): Fine;
|
|
28
|
+
}
|
|
29
|
+
const builder: TypeBuilder;
|
|
30
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Fine = void 0;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
const FineAmount_1 = require("./FineAmount");
|
|
6
|
+
class Fine {
|
|
7
|
+
id;
|
|
8
|
+
payedState;
|
|
9
|
+
date;
|
|
10
|
+
reason;
|
|
11
|
+
amount;
|
|
12
|
+
constructor(id, payedState, date, reason, amount) {
|
|
13
|
+
this.id = id;
|
|
14
|
+
this.payedState = payedState;
|
|
15
|
+
this.date = date;
|
|
16
|
+
this.reason = reason;
|
|
17
|
+
this.amount = amount;
|
|
18
|
+
}
|
|
19
|
+
get flatten() {
|
|
20
|
+
return {
|
|
21
|
+
id: this.id.flatten,
|
|
22
|
+
payedState: this.payedState,
|
|
23
|
+
date: this.date.flatten,
|
|
24
|
+
reason: this.reason,
|
|
25
|
+
amount: this.amount.flatten
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.Fine = Fine;
|
|
30
|
+
(function (Fine) {
|
|
31
|
+
let Id;
|
|
32
|
+
(function (Id) {
|
|
33
|
+
Id.builder = typescript_common_functionality_1.Tagged.builder('fine', typescript_common_functionality_1.Guid.builder);
|
|
34
|
+
})(Id = Fine.Id || (Fine.Id = {}));
|
|
35
|
+
class TypeBuilder {
|
|
36
|
+
build(value) {
|
|
37
|
+
return new Fine(Id.builder.build(value.id), value.payedState, typescript_common_functionality_1.UtcDate.builder.build(value.date), value.reason, FineAmount_1.FineAmount.builder.build(value.amount));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
Fine.TypeBuilder = TypeBuilder;
|
|
41
|
+
Fine.builder = new TypeBuilder();
|
|
42
|
+
})(Fine || (exports.Fine = Fine = {}));
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Flattable, ITypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
import { MoneyAmount } from './MoneyAmount';
|
|
3
|
+
import { Configuration } from './Configuration';
|
|
4
|
+
export type FineAmount = FineAmount.Money | FineAmount.Item;
|
|
5
|
+
export declare namespace FineAmount {
|
|
6
|
+
class Money implements Flattable<Money.Flatten> {
|
|
7
|
+
amount: MoneyAmount;
|
|
8
|
+
constructor(amount: MoneyAmount);
|
|
9
|
+
formatted(configuration: Configuration): string;
|
|
10
|
+
get flatten(): Money.Flatten;
|
|
11
|
+
}
|
|
12
|
+
namespace Money {
|
|
13
|
+
type Flatten = {
|
|
14
|
+
type: 'money';
|
|
15
|
+
amount: MoneyAmount.Flatten;
|
|
16
|
+
};
|
|
17
|
+
class TypeBuilder implements ITypeBuilder<Flatten, Money> {
|
|
18
|
+
build(value: Flatten): Money;
|
|
19
|
+
}
|
|
20
|
+
const builder: TypeBuilder;
|
|
21
|
+
}
|
|
22
|
+
class Item implements Flattable<Item.Flatten> {
|
|
23
|
+
item: Item.Type;
|
|
24
|
+
count: number;
|
|
25
|
+
constructor(item: Item.Type, count: number);
|
|
26
|
+
formatted(configuration: Configuration): string;
|
|
27
|
+
get flatten(): Item.Flatten;
|
|
28
|
+
}
|
|
29
|
+
namespace Item {
|
|
30
|
+
type Type = 'crateOfBeer';
|
|
31
|
+
namespace Type {
|
|
32
|
+
const all: Type[];
|
|
33
|
+
}
|
|
34
|
+
type Flatten = {
|
|
35
|
+
type: 'item';
|
|
36
|
+
item: Item.Type;
|
|
37
|
+
count: number;
|
|
38
|
+
};
|
|
39
|
+
class TypeBuilder implements ITypeBuilder<Flatten, Item> {
|
|
40
|
+
build(value: Flatten): Item;
|
|
41
|
+
}
|
|
42
|
+
const builder: TypeBuilder;
|
|
43
|
+
}
|
|
44
|
+
function money(MoneyAmount: MoneyAmount): Money;
|
|
45
|
+
function item(item: Item.Type, count: number): Item;
|
|
46
|
+
type Flatten = Money.Flatten | Item.Flatten;
|
|
47
|
+
class TypeBuilder implements ITypeBuilder<Flatten, FineAmount> {
|
|
48
|
+
build(value: Flatten): FineAmount;
|
|
49
|
+
}
|
|
50
|
+
const builder: TypeBuilder;
|
|
51
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
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.FineAmount = void 0;
|
|
37
|
+
const MoneyAmount_1 = require("./MoneyAmount");
|
|
38
|
+
const i18n = __importStar(require("i18n"));
|
|
39
|
+
var FineAmount;
|
|
40
|
+
(function (FineAmount) {
|
|
41
|
+
class Money {
|
|
42
|
+
amount;
|
|
43
|
+
constructor(amount) {
|
|
44
|
+
this.amount = amount;
|
|
45
|
+
}
|
|
46
|
+
formatted(configuration) {
|
|
47
|
+
return this.amount.formatted(configuration.currency);
|
|
48
|
+
}
|
|
49
|
+
get flatten() {
|
|
50
|
+
return {
|
|
51
|
+
type: 'money',
|
|
52
|
+
amount: this.amount.flatten
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
FineAmount.Money = Money;
|
|
57
|
+
(function (Money) {
|
|
58
|
+
class TypeBuilder {
|
|
59
|
+
build(value) {
|
|
60
|
+
return new Money(MoneyAmount_1.MoneyAmount.builder.build(value.amount));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
Money.TypeBuilder = TypeBuilder;
|
|
64
|
+
Money.builder = new TypeBuilder();
|
|
65
|
+
})(Money = FineAmount.Money || (FineAmount.Money = {}));
|
|
66
|
+
class Item {
|
|
67
|
+
item;
|
|
68
|
+
count;
|
|
69
|
+
constructor(item, count) {
|
|
70
|
+
this.item = item;
|
|
71
|
+
this.count = count;
|
|
72
|
+
}
|
|
73
|
+
formatted(configuration) {
|
|
74
|
+
const numberFormat = Intl.NumberFormat(configuration.locale, {
|
|
75
|
+
minimumFractionDigits: 0,
|
|
76
|
+
maximumFractionDigits: 0
|
|
77
|
+
});
|
|
78
|
+
if (this.count === 1)
|
|
79
|
+
return i18n.__(`FineAmount.Item.Type.${this.item}.singular`, numberFormat.format(this.count));
|
|
80
|
+
return i18n.__(`FineAmount.Item.Type.${this.item}.plural`, numberFormat.format(this.count));
|
|
81
|
+
}
|
|
82
|
+
get flatten() {
|
|
83
|
+
return {
|
|
84
|
+
type: 'item',
|
|
85
|
+
item: this.item,
|
|
86
|
+
count: this.count
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
FineAmount.Item = Item;
|
|
91
|
+
(function (Item) {
|
|
92
|
+
let Type;
|
|
93
|
+
(function (Type) {
|
|
94
|
+
Type.all = ['crateOfBeer'];
|
|
95
|
+
})(Type = Item.Type || (Item.Type = {}));
|
|
96
|
+
class TypeBuilder {
|
|
97
|
+
build(value) {
|
|
98
|
+
return new Item(value.item, value.count);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
Item.TypeBuilder = TypeBuilder;
|
|
102
|
+
Item.builder = new TypeBuilder();
|
|
103
|
+
})(Item = FineAmount.Item || (FineAmount.Item = {}));
|
|
104
|
+
function money(MoneyAmount) {
|
|
105
|
+
return new Money(MoneyAmount);
|
|
106
|
+
}
|
|
107
|
+
FineAmount.money = money;
|
|
108
|
+
function item(item, count) {
|
|
109
|
+
return new Item(item, count);
|
|
110
|
+
}
|
|
111
|
+
FineAmount.item = item;
|
|
112
|
+
class TypeBuilder {
|
|
113
|
+
build(value) {
|
|
114
|
+
switch (value.type) {
|
|
115
|
+
case 'money':
|
|
116
|
+
return Money.builder.build(value);
|
|
117
|
+
case 'item':
|
|
118
|
+
return Item.builder.build(value);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
FineAmount.TypeBuilder = TypeBuilder;
|
|
123
|
+
FineAmount.builder = new TypeBuilder();
|
|
124
|
+
})(FineAmount || (exports.FineAmount = FineAmount = {}));
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Flattable, Guid, ITypeBuilder, Tagged } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
import { FineAmount } from './FineAmount';
|
|
3
|
+
import { FineTemplateRepetition } from './FineTemplateRepetition';
|
|
4
|
+
export declare class FineTemplate implements Flattable<FineTemplate.Flatten> {
|
|
5
|
+
id: FineTemplate.Id;
|
|
6
|
+
reason: string;
|
|
7
|
+
amount: FineAmount;
|
|
8
|
+
repetition: FineTemplateRepetition | null;
|
|
9
|
+
constructor(id: FineTemplate.Id, reason: string, amount: FineAmount, repetition: FineTemplateRepetition | null);
|
|
10
|
+
get flatten(): FineTemplate.Flatten;
|
|
11
|
+
}
|
|
12
|
+
export declare namespace FineTemplate {
|
|
13
|
+
type Id = Tagged<Guid, 'fineTemplate'>;
|
|
14
|
+
namespace Id {
|
|
15
|
+
type Flatten = string;
|
|
16
|
+
const builder: Tagged.TypeBuilder<Guid, "fineTemplate">;
|
|
17
|
+
}
|
|
18
|
+
type Flatten = {
|
|
19
|
+
id: Id.Flatten;
|
|
20
|
+
reason: string;
|
|
21
|
+
amount: FineAmount.Flatten;
|
|
22
|
+
repetition: FineTemplateRepetition.Flatten | null;
|
|
23
|
+
};
|
|
24
|
+
class TypeBuilder implements ITypeBuilder<Flatten, FineTemplate> {
|
|
25
|
+
build(value: Flatten): FineTemplate;
|
|
26
|
+
}
|
|
27
|
+
const builder: TypeBuilder;
|
|
28
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FineTemplate = void 0;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
const FineAmount_1 = require("./FineAmount");
|
|
6
|
+
const FineTemplateRepetition_1 = require("./FineTemplateRepetition");
|
|
7
|
+
class FineTemplate {
|
|
8
|
+
id;
|
|
9
|
+
reason;
|
|
10
|
+
amount;
|
|
11
|
+
repetition;
|
|
12
|
+
constructor(id, reason, amount, repetition) {
|
|
13
|
+
this.id = id;
|
|
14
|
+
this.reason = reason;
|
|
15
|
+
this.amount = amount;
|
|
16
|
+
this.repetition = repetition;
|
|
17
|
+
}
|
|
18
|
+
get flatten() {
|
|
19
|
+
return {
|
|
20
|
+
id: this.id.flatten,
|
|
21
|
+
reason: this.reason,
|
|
22
|
+
amount: this.amount.flatten,
|
|
23
|
+
repetition: this.repetition === null ? null : this.repetition.flatten
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FineTemplate = FineTemplate;
|
|
28
|
+
(function (FineTemplate) {
|
|
29
|
+
let Id;
|
|
30
|
+
(function (Id) {
|
|
31
|
+
Id.builder = typescript_common_functionality_1.Tagged.builder('fineTemplate', typescript_common_functionality_1.Guid.builder);
|
|
32
|
+
})(Id = FineTemplate.Id || (FineTemplate.Id = {}));
|
|
33
|
+
class TypeBuilder {
|
|
34
|
+
build(value) {
|
|
35
|
+
return new FineTemplate(Id.builder.build(value.id), value.reason, FineAmount_1.FineAmount.builder.build(value.amount), value.repetition === null ? null : FineTemplateRepetition_1.FineTemplateRepetition.builder.build(value.repetition));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
FineTemplate.TypeBuilder = TypeBuilder;
|
|
39
|
+
FineTemplate.builder = new TypeBuilder();
|
|
40
|
+
})(FineTemplate || (exports.FineTemplate = FineTemplate = {}));
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Flattable, ITypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
export declare class FineTemplateRepetition implements Flattable<FineTemplateRepetition.Flatten> {
|
|
3
|
+
item: FineTemplateRepetition.Item;
|
|
4
|
+
maxCount: number | null;
|
|
5
|
+
constructor(item: FineTemplateRepetition.Item, maxCount: number | null);
|
|
6
|
+
get flatten(): FineTemplateRepetition.Flatten;
|
|
7
|
+
}
|
|
8
|
+
export declare namespace FineTemplateRepetition {
|
|
9
|
+
type Item = 'minute' | 'day' | 'item' | 'count';
|
|
10
|
+
namespace Item {
|
|
11
|
+
const all: Item[];
|
|
12
|
+
const builder: ValueTypeBuilder<Item>;
|
|
13
|
+
}
|
|
14
|
+
type Flatten = {
|
|
15
|
+
item: Item;
|
|
16
|
+
maxCount: number | null;
|
|
17
|
+
};
|
|
18
|
+
class TypeBuilder implements ITypeBuilder<Flatten, FineTemplateRepetition> {
|
|
19
|
+
build(flatten: Flatten): FineTemplateRepetition;
|
|
20
|
+
}
|
|
21
|
+
const builder: TypeBuilder;
|
|
22
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FineTemplateRepetition = void 0;
|
|
4
|
+
const typescript_common_functionality_1 = require("@stevenkellner/typescript-common-functionality");
|
|
5
|
+
class FineTemplateRepetition {
|
|
6
|
+
item;
|
|
7
|
+
maxCount;
|
|
8
|
+
constructor(item, maxCount) {
|
|
9
|
+
this.item = item;
|
|
10
|
+
this.maxCount = maxCount;
|
|
11
|
+
}
|
|
12
|
+
get flatten() {
|
|
13
|
+
return {
|
|
14
|
+
item: this.item,
|
|
15
|
+
maxCount: this.maxCount
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.FineTemplateRepetition = FineTemplateRepetition;
|
|
20
|
+
(function (FineTemplateRepetition) {
|
|
21
|
+
let Item;
|
|
22
|
+
(function (Item) {
|
|
23
|
+
Item.all = [
|
|
24
|
+
'minute',
|
|
25
|
+
'day',
|
|
26
|
+
'item',
|
|
27
|
+
'count'
|
|
28
|
+
];
|
|
29
|
+
Item.builder = new typescript_common_functionality_1.ValueTypeBuilder();
|
|
30
|
+
})(Item = FineTemplateRepetition.Item || (FineTemplateRepetition.Item = {}));
|
|
31
|
+
class TypeBuilder {
|
|
32
|
+
build(flatten) {
|
|
33
|
+
return new FineTemplateRepetition(flatten.item, flatten.maxCount);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
FineTemplateRepetition.TypeBuilder = TypeBuilder;
|
|
37
|
+
FineTemplateRepetition.builder = new TypeBuilder();
|
|
38
|
+
})(FineTemplateRepetition || (exports.FineTemplateRepetition = FineTemplateRepetition = {}));
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Flattable, ITypeBuilder, Tagged } from '@stevenkellner/typescript-common-functionality';
|
|
2
|
+
import { Team } from './Team';
|
|
3
|
+
import { Person } from './Person';
|
|
4
|
+
export declare class Invitation implements Flattable<Invitation.Flatten> {
|
|
5
|
+
teamId: Team.Id;
|
|
6
|
+
personId: Person.Id;
|
|
7
|
+
constructor(teamId: Team.Id, personId: Person.Id);
|
|
8
|
+
createId(): Invitation.Id;
|
|
9
|
+
get flatten(): Invitation.Flatten;
|
|
10
|
+
}
|
|
11
|
+
export declare namespace Invitation {
|
|
12
|
+
type Id = Tagged<string, 'invitation'>;
|
|
13
|
+
namespace Id {
|
|
14
|
+
type Flatten = string;
|
|
15
|
+
const builder: Tagged.TypeBuilder<string, "invitation">;
|
|
16
|
+
}
|
|
17
|
+
type Flatten = {
|
|
18
|
+
teamId: Team.Id.Flatten;
|
|
19
|
+
personId: Person.Id.Flatten;
|
|
20
|
+
};
|
|
21
|
+
class TypeBuilder implements ITypeBuilder<Flatten, Invitation> {
|
|
22
|
+
build(value: Flatten): Invitation;
|
|
23
|
+
}
|
|
24
|
+
const builder: TypeBuilder;
|
|
25
|
+
}
|