@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.
Files changed (218) hide show
  1. package/lib/src/firebase/FirebaseConfiguration.d.ts +45 -1
  2. package/lib/src/firebase/FirebaseConfiguration.js +44 -0
  3. package/lib/src/firebase/Firestore.d.ts +196 -0
  4. package/lib/src/firebase/Firestore.js +235 -0
  5. package/lib/src/{FirestoreScheme.d.ts → firebase/FirestoreScheme.d.ts} +15 -1
  6. package/lib/src/firebase/Messaging.d.ts +64 -0
  7. package/lib/src/firebase/checkAuthentication.d.ts +37 -0
  8. package/lib/src/{checkAuthentication.js → firebase/checkAuthentication.js} +26 -1
  9. package/lib/src/firebase/index.d.ts +4 -0
  10. package/lib/src/firebase/index.js +4 -0
  11. package/lib/src/firebase/pushNotification.d.ts +39 -0
  12. package/lib/src/firebase/pushNotification.js +88 -0
  13. package/lib/src/functions/fine/add.d.ts +10 -13
  14. package/lib/src/functions/fine/add.js +3 -30
  15. package/lib/src/functions/fine/delete.d.ts +10 -13
  16. package/lib/src/functions/fine/delete.js +3 -27
  17. package/lib/src/functions/fine/update.d.ts +10 -13
  18. package/lib/src/functions/fine/update.js +3 -28
  19. package/lib/src/functions/fineTemplate/add.d.ts +6 -9
  20. package/lib/src/functions/fineTemplate/add.js +3 -12
  21. package/lib/src/functions/fineTemplate/delete.d.ts +6 -9
  22. package/lib/src/functions/fineTemplate/delete.js +3 -12
  23. package/lib/src/functions/fineTemplate/update.d.ts +6 -9
  24. package/lib/src/functions/fineTemplate/update.js +3 -12
  25. package/lib/src/functions/invitation/getInvitation.d.ts +40 -43
  26. package/lib/src/functions/invitation/getInvitation.js +57 -88
  27. package/lib/src/functions/invitation/invite.d.ts +1 -2
  28. package/lib/src/functions/invitation/invite.js +3 -18
  29. package/lib/src/functions/invitation/register.d.ts +6 -11
  30. package/lib/src/functions/invitation/register.js +3 -39
  31. package/lib/src/functions/invitation/withdraw.d.ts +1 -2
  32. package/lib/src/functions/invitation/withdraw.js +3 -13
  33. package/lib/src/functions/notification/register.d.ts +7 -10
  34. package/lib/src/functions/notification/register.js +3 -15
  35. package/lib/src/functions/notification/subscribe.d.ts +8 -11
  36. package/lib/src/functions/notification/subscribe.js +3 -14
  37. package/lib/src/functions/paypalMe/edit.d.ts +6 -9
  38. package/lib/src/functions/paypalMe/edit.js +3 -14
  39. package/lib/src/functions/person/add.d.ts +7 -10
  40. package/lib/src/functions/person/add.js +3 -12
  41. package/lib/src/functions/person/delete.d.ts +6 -9
  42. package/lib/src/functions/person/delete.js +3 -14
  43. package/lib/src/functions/person/update.d.ts +7 -10
  44. package/lib/src/functions/person/update.js +3 -13
  45. package/lib/src/functions/team/new.d.ts +9 -12
  46. package/lib/src/functions/team/new.js +3 -22
  47. package/lib/src/functions/user/kickout.d.ts +6 -9
  48. package/lib/src/functions/user/kickout.js +3 -25
  49. package/lib/src/functions/user/login.d.ts +1 -2
  50. package/lib/src/functions/user/login.js +3 -13
  51. package/lib/src/functions/user/roleEdit.d.ts +8 -11
  52. package/lib/src/functions/user/roleEdit.js +3 -18
  53. package/lib/src/index.d.ts +0 -5
  54. package/lib/src/index.js +0 -5
  55. package/lib/src/locales/de.d.ts +10 -67
  56. package/lib/src/locales/de.js +8 -0
  57. package/lib/src/locales/en.d.ts +10 -0
  58. package/lib/src/locales/en.js +19 -2
  59. package/lib/src/types/Configuration.d.ts +33 -15
  60. package/lib/src/types/Configuration.js +24 -12
  61. package/lib/src/types/Currency.d.ts +20 -0
  62. package/lib/src/types/Currency.js +19 -0
  63. package/lib/src/types/Fine.d.ts +41 -0
  64. package/lib/src/types/Fine.js +32 -0
  65. package/lib/src/types/FineAmount.d.ts +160 -9
  66. package/lib/src/types/FineAmount.js +128 -7
  67. package/lib/src/types/FineTemplate.d.ts +41 -0
  68. package/lib/src/types/FineTemplate.js +32 -0
  69. package/lib/src/types/FineTemplateRepetition.d.ts +72 -10
  70. package/lib/src/types/FineTemplateRepetition.js +66 -12
  71. package/lib/src/types/Invitation.d.ts +48 -0
  72. package/lib/src/types/Invitation.js +39 -0
  73. package/lib/src/types/Locale.d.ts +16 -0
  74. package/lib/src/types/Locale.js +16 -0
  75. package/lib/src/types/Localization.d.ts +74 -74
  76. package/lib/src/types/Localization.js +80 -41
  77. package/lib/src/types/MoneyAmount.d.ts +67 -1
  78. package/lib/src/types/MoneyAmount.js +62 -0
  79. package/lib/src/types/NotificationProperties.d.ts +70 -9
  80. package/lib/src/types/NotificationProperties.js +49 -5
  81. package/lib/src/types/PayedState.d.ts +25 -9
  82. package/lib/src/types/PayedState.js +17 -27
  83. package/lib/src/types/Person.d.ts +45 -0
  84. package/lib/src/types/Person.js +36 -0
  85. package/lib/src/types/PersonPrivateProperties.d.ts +28 -0
  86. package/lib/src/types/PersonPrivateProperties.js +25 -0
  87. package/lib/src/types/PersonSignInProperties.d.ts +30 -0
  88. package/lib/src/types/PersonSignInProperties.js +27 -0
  89. package/lib/src/types/Pluralization.d.ts +46 -0
  90. package/lib/src/types/Pluralization.js +46 -0
  91. package/lib/src/types/Team.d.ts +38 -0
  92. package/lib/src/types/Team.js +29 -0
  93. package/lib/src/types/User.d.ts +68 -3
  94. package/lib/src/types/User.js +59 -5
  95. package/lib/src/types/UserRole.d.ts +26 -4
  96. package/lib/src/types/UserRole.js +25 -9
  97. package/lib/src/types/index.d.ts +2 -0
  98. package/lib/src/types/index.js +2 -0
  99. package/lib/test/firebase/FirebaseConfiguration.test.js +155 -0
  100. package/lib/test/firebase/Firestore.test.js +46 -0
  101. package/lib/test/firebase/checkAuthentication.test.d.ts +1 -0
  102. package/lib/test/firebase/checkAuthentication.test.js +305 -0
  103. package/lib/test/firebase/firebase-utils.d.ts +32 -0
  104. package/lib/test/firebase/firebase-utils.js +131 -0
  105. package/lib/test/firebase/pushNotification.test.d.ts +1 -0
  106. package/lib/test/firebase/pushNotification.test.js +300 -0
  107. package/lib/test/locales/localization.de.test.d.ts +1 -0
  108. package/lib/test/locales/localization.de.test.js +144 -0
  109. package/lib/test/locales/localization.en.test.d.ts +1 -0
  110. package/lib/test/locales/localization.en.test.js +144 -0
  111. package/lib/test/types/Configuration.test.d.ts +1 -0
  112. package/lib/test/types/Configuration.test.js +84 -0
  113. package/lib/test/types/Currency.test.d.ts +1 -0
  114. package/lib/test/types/Currency.test.js +41 -0
  115. package/lib/test/types/Fine.test.d.ts +1 -0
  116. package/lib/test/types/Fine.test.js +265 -0
  117. package/lib/test/types/FineAmount.test.d.ts +1 -0
  118. package/lib/test/types/FineAmount.test.js +445 -0
  119. package/lib/test/types/FineTemplate.test.d.ts +1 -0
  120. package/lib/test/types/FineTemplate.test.js +271 -0
  121. package/lib/test/types/FineTemplateRepetition.test.d.ts +1 -0
  122. package/lib/test/types/FineTemplateRepetition.test.js +361 -0
  123. package/lib/test/types/Invitation.test.d.ts +1 -0
  124. package/lib/test/types/Invitation.test.js +269 -0
  125. package/lib/test/types/Locale.test.d.ts +1 -0
  126. package/lib/test/types/Locale.test.js +46 -0
  127. package/lib/test/types/Localization.test.d.ts +1 -0
  128. package/lib/test/types/Localization.test.js +241 -0
  129. package/lib/test/types/MoneyAmount.test.d.ts +1 -0
  130. package/lib/test/types/MoneyAmount.test.js +276 -0
  131. package/lib/test/types/NotificationProperties.test.d.ts +1 -0
  132. package/lib/test/types/NotificationProperties.test.js +258 -0
  133. package/lib/test/types/PayedState.test.d.ts +1 -0
  134. package/lib/test/types/PayedState.test.js +105 -0
  135. package/lib/test/types/Person.test.d.ts +1 -0
  136. package/lib/test/types/Person.test.js +266 -0
  137. package/lib/test/types/PersonPrivateProperties.test.d.ts +1 -0
  138. package/lib/test/types/PersonPrivateProperties.test.js +155 -0
  139. package/lib/test/types/PersonSignInProperties.test.d.ts +1 -0
  140. package/lib/test/types/PersonSignInProperties.test.js +208 -0
  141. package/lib/test/types/Pluralization.test.d.ts +1 -0
  142. package/lib/test/types/Pluralization.test.js +206 -0
  143. package/lib/test/types/Team.test.d.ts +1 -0
  144. package/lib/test/types/Team.test.js +145 -0
  145. package/lib/test/types/User.test.d.ts +1 -0
  146. package/lib/test/types/User.test.js +232 -0
  147. package/lib/test/types/UserRole.test.d.ts +1 -0
  148. package/lib/test/types/UserRole.test.js +140 -0
  149. package/lib/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +10 -9
  151. package/src/firebase/FirebaseConfiguration.ts +49 -1
  152. package/src/firebase/Firestore.ts +248 -0
  153. package/src/{FirestoreScheme.ts → firebase/FirestoreScheme.ts} +15 -1
  154. package/src/firebase/Messaging.ts +64 -0
  155. package/src/{checkAuthentication.ts → firebase/checkAuthentication.ts} +39 -1
  156. package/src/firebase/index.ts +5 -0
  157. package/src/firebase/pushNotification.ts +90 -0
  158. package/src/functions/fine/add.ts +10 -48
  159. package/src/functions/fine/delete.ts +9 -43
  160. package/src/functions/fine/update.ts +10 -44
  161. package/src/functions/fineTemplate/add.ts +7 -23
  162. package/src/functions/fineTemplate/delete.ts +7 -23
  163. package/src/functions/fineTemplate/update.ts +7 -24
  164. package/src/functions/index.ts +0 -1
  165. package/src/functions/invitation/getInvitation.ts +81 -118
  166. package/src/functions/invitation/invite.ts +2 -25
  167. package/src/functions/invitation/register.ts +9 -60
  168. package/src/functions/invitation/withdraw.ts +2 -16
  169. package/src/functions/notification/register.ts +7 -26
  170. package/src/functions/notification/subscribe.ts +8 -26
  171. package/src/functions/paypalMe/edit.ts +7 -25
  172. package/src/functions/person/add.ts +8 -24
  173. package/src/functions/person/delete.ts +6 -25
  174. package/src/functions/person/update.ts +8 -25
  175. package/src/functions/team/new.ts +12 -42
  176. package/src/functions/user/kickout.ts +8 -41
  177. package/src/functions/user/login.ts +2 -16
  178. package/src/functions/user/roleEdit.ts +8 -32
  179. package/src/index.ts +0 -5
  180. package/src/locales/de.ts +10 -1
  181. package/src/locales/en.ts +21 -2
  182. package/src/types/Configuration.ts +33 -23
  183. package/src/types/Currency.ts +24 -0
  184. package/src/types/Fine.ts +41 -0
  185. package/src/types/FineAmount.ts +162 -11
  186. package/src/types/FineTemplate.ts +41 -0
  187. package/src/types/FineTemplateRepetition.ts +75 -17
  188. package/src/types/Invitation.ts +48 -0
  189. package/src/types/Locale.ts +20 -0
  190. package/src/types/Localization.ts +96 -41
  191. package/src/types/MoneyAmount.ts +67 -1
  192. package/src/types/NotificationProperties.ts +67 -9
  193. package/src/types/PayedState.ts +25 -30
  194. package/src/types/Person.ts +45 -0
  195. package/src/types/PersonPrivateProperties.ts +28 -1
  196. package/src/types/PersonSignInProperties.ts +30 -0
  197. package/src/types/Pluralization.ts +46 -0
  198. package/src/types/Team.ts +38 -0
  199. package/src/types/User.ts +70 -4
  200. package/src/types/UserRole.ts +32 -16
  201. package/src/types/index.ts +2 -0
  202. package/lib/src/Firestore.d.ts +0 -24
  203. package/lib/src/Firestore.js +0 -62
  204. package/lib/src/checkAuthentication.d.ts +0 -6
  205. package/lib/src/firebaseFunctionsContext.d.ts +0 -39
  206. package/lib/src/firebaseFunctionsContext.js +0 -43
  207. package/lib/src/pushNotification.d.ts +0 -3
  208. package/lib/src/pushNotification.js +0 -35
  209. package/lib/test/localization-utils.d.ts +0 -1
  210. package/lib/test/localization-utils.js +0 -24
  211. package/lib/test/localization.de.test.js +0 -151
  212. package/lib/test/localization.en.test.js +0 -145
  213. package/src/Firestore.ts +0 -75
  214. package/src/firebaseFunctionsContext.ts +0 -48
  215. package/src/pushNotification.ts +0 -37
  216. /package/lib/src/{FirestoreScheme.js → firebase/FirestoreScheme.js} +0 -0
  217. /package/lib/test/{localization.de.test.d.ts → firebase/FirebaseConfiguration.test.d.ts} +0 -0
  218. /package/lib/test/{localization.en.test.d.ts → firebase/Firestore.test.d.ts} +0 -0
@@ -1,154 +1,117 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Invitation, Person, PersonPrivateProperties, Team } from '../../types';
3
- import { Firestore } from '../../Firestore';
4
- import { compactMap, Flattable, ITypeBuilder } from '@stevenkellner/typescript-common-functionality';
3
+ import { Flattable, ITypeBuilder } from '@stevenkellner/typescript-common-functionality';
5
4
 
6
- export class InvitationGetInvitationFunction extends FirebaseFunction<Invitation.Id, InvitationGetInvitationFunction.ReturnType> {
5
+ export abstract class InvitationGetInvitationFunctionBase extends FirebaseFunction<Invitation.Id, InvitationGetInvitationFunctionReturnType> {
7
6
 
8
7
  public parametersBuilder = Invitation.Id.builder;
9
8
 
10
- public returnTypeBuilder = InvitationGetInvitationFunction.ReturnType.builder;
11
-
12
- public async execute(invitationId: Invitation.Id): Promise<InvitationGetInvitationFunction.ReturnType> {
13
-
14
- if (this.userId === null)
15
- throw new FunctionsError('unauthenticated', 'User not authenticated');
16
-
17
- const invitationSnapshot = await Firestore.shared.invitation(invitationId).snapshot();
18
- if (!invitationSnapshot.exists)
19
- throw new FunctionsError('not-found', 'Invitation not found');
20
- const invitation = Invitation.builder.build(invitationSnapshot.data);
21
-
22
- const teamSnapshot = await Firestore.shared.team(invitation.teamId).snapshot();
23
- if (!teamSnapshot.exists)
24
- throw new FunctionsError('not-found', 'Team not found');
25
- const team = Team.builder.build(teamSnapshot.data);
26
-
27
- if (invitation.personId !== null)
28
- return InvitationGetInvitationFunction.ReturnType.from(invitation.teamId, team.name, invitation.personId);
29
-
30
- const personSnapshots = await Firestore.shared.persons(invitation.teamId).documentSnapshots();
31
- const persons = compactMap(personSnapshots, personSnapshot => {
32
- if (!personSnapshot.exists)
33
- return null;
34
- const person = Person.builder.build(personSnapshot.data);
35
- if (person.signInProperties !== null)
36
- return null;
37
- return {
38
- id: person.id,
39
- properties: person.properties
40
- };
41
- });
42
- return InvitationGetInvitationFunction.ReturnType.from(invitation.teamId, team.name, persons);
43
- }
9
+ public returnTypeBuilder = InvitationGetInvitationFunctionReturnType.builder;
44
10
  }
45
11
 
46
- export namespace InvitationGetInvitationFunction {
12
+ export type PersonIdOrPersons = {
13
+ personId: Person.Id;
14
+ } | {
15
+ persons: {
16
+ id: Person.Id,
17
+ properties: PersonPrivateProperties,
18
+ }[];
19
+ };
20
+
21
+ export namespace PersonIdOrPersons {
47
22
 
48
- export type PersonIdOrPersons = {
49
- personId: Person.Id;
23
+ export type Flatten = {
24
+ personId: Person.Id.Flatten,
50
25
  } | {
51
26
  persons: {
52
- id: Person.Id,
53
- properties: PersonPrivateProperties,
27
+ id: Person.Id.Flatten,
28
+ properties: PersonPrivateProperties.Flatten,
54
29
  }[];
55
30
  };
31
+ }
56
32
 
57
- export namespace PersonIdOrPersons {
33
+ export class InvitationGetInvitationFunctionReturnType implements Flattable<InvitationGetInvitationFunctionReturnType.Flatten> {
58
34
 
59
- export type Flatten = {
60
- personId: Person.Id.Flatten,
61
- } | {
62
- persons: {
63
- id: Person.Id.Flatten,
64
- properties: PersonPrivateProperties.Flatten,
65
- }[];
66
- };
67
- }
35
+ private constructor(
36
+ public teamId: Team.Id,
37
+ public teamName: string,
38
+ private personIdOrPersons: PersonIdOrPersons
39
+ ) {}
68
40
 
69
- export class ReturnType implements Flattable<ReturnType.Flatten> {
70
-
71
- private constructor(
72
- public teamId: Team.Id,
73
- public teamName: string,
74
- private personIdOrPersons: PersonIdOrPersons
75
- ) {}
76
-
77
- public static from(teamId: Team.Id, teamName: string, personId: Person.Id): ReturnType;
78
- public static from(teamId: Team.Id, teamName: string, persons: { id: Person.Id, properties: PersonPrivateProperties }[]): ReturnType;
79
- public static from(teamId: Team.Id, teamName: string, personIdOrPersons: Person.Id | { id: Person.Id, properties: PersonPrivateProperties }[]): ReturnType {
80
- if (Array.isArray(personIdOrPersons)) {
81
- return new ReturnType(teamId, teamName, {
82
- persons: personIdOrPersons
83
- });
84
- }
85
- return new ReturnType(teamId, teamName, {
86
- personId: personIdOrPersons
41
+ public static from(teamId: Team.Id, teamName: string, personId: Person.Id): InvitationGetInvitationFunctionReturnType;
42
+ public static from(teamId: Team.Id, teamName: string, persons: { id: Person.Id, properties: PersonPrivateProperties }[]): InvitationGetInvitationFunctionReturnType;
43
+ public static from(teamId: Team.Id, teamName: string, personIdOrPersons: Person.Id | { id: Person.Id, properties: PersonPrivateProperties }[]): InvitationGetInvitationFunctionReturnType {
44
+ if (Array.isArray(personIdOrPersons)) {
45
+ return new InvitationGetInvitationFunctionReturnType(teamId, teamName, {
46
+ persons: personIdOrPersons
87
47
  });
88
48
  }
49
+ return new InvitationGetInvitationFunctionReturnType(teamId, teamName, {
50
+ personId: personIdOrPersons
51
+ });
52
+ }
89
53
 
90
- public get personId(): Person.Id | null {
91
- if (!('personId' in this.personIdOrPersons))
92
- return null;
93
- return this.personIdOrPersons.personId;
94
- }
54
+ public get personId(): Person.Id | null {
55
+ if (!('personId' in this.personIdOrPersons))
56
+ return null;
57
+ return this.personIdOrPersons.personId;
58
+ }
95
59
 
96
- public get persons(): {
97
- id: Person.Id,
98
- properties: PersonPrivateProperties,
99
- }[] | null {
100
- if (!('persons' in this.personIdOrPersons))
101
- return null;
102
- return this.personIdOrPersons.persons;
103
- }
60
+ public get persons(): {
61
+ id: Person.Id,
62
+ properties: PersonPrivateProperties,
63
+ }[] | null {
64
+ if (!('persons' in this.personIdOrPersons))
65
+ return null;
66
+ return this.personIdOrPersons.persons;
67
+ }
104
68
 
105
- public get flatten(): ReturnType.Flatten {
106
- if ('personId' in this.personIdOrPersons) {
107
- return {
108
- teamId: this.teamId.flatten,
109
- teamName: this.teamName,
110
- personId: this.personIdOrPersons.personId.flatten
111
- };
112
- }
69
+ public get flatten(): InvitationGetInvitationFunctionReturnType.Flatten {
70
+ if ('personId' in this.personIdOrPersons) {
113
71
  return {
114
72
  teamId: this.teamId.flatten,
115
73
  teamName: this.teamName,
116
- persons: this.personIdOrPersons.persons.map(person => ({
117
- id: person.id.flatten,
118
- properties: person.properties.flatten
119
- }))
120
- }
74
+ personId: this.personIdOrPersons.personId.flatten
75
+ };
76
+ }
77
+ return {
78
+ teamId: this.teamId.flatten,
79
+ teamName: this.teamName,
80
+ persons: this.personIdOrPersons.persons.map(person => ({
81
+ id: person.id.flatten,
82
+ properties: person.properties.flatten
83
+ }))
121
84
  }
122
85
  }
86
+ }
123
87
 
124
- export namespace ReturnType {
88
+ export namespace InvitationGetInvitationFunctionReturnType {
125
89
 
126
- export type Flatten = {
127
- teamId: Team.Id.Flatten,
128
- teamName: string
129
- } & InvitationGetInvitationFunction.PersonIdOrPersons.Flatten;
90
+ export type Flatten = {
91
+ teamId: Team.Id.Flatten,
92
+ teamName: string
93
+ } & PersonIdOrPersons.Flatten;
130
94
 
131
- export class TypeBuilder implements ITypeBuilder<Flatten, ReturnType> {
95
+ export class TypeBuilder implements ITypeBuilder<Flatten, InvitationGetInvitationFunctionReturnType> {
132
96
 
133
- public build(value: Flatten): ReturnType {
134
- if ('personId' in value) {
135
- return ReturnType.from(
136
- Team.Id.builder.build(value.teamId),
137
- value.teamName,
138
- Person.Id.builder.build(value.personId)
139
- );
140
- }
141
- return ReturnType.from(
97
+ public build(value: Flatten): InvitationGetInvitationFunctionReturnType {
98
+ if ('personId' in value) {
99
+ return InvitationGetInvitationFunctionReturnType.from(
142
100
  Team.Id.builder.build(value.teamId),
143
101
  value.teamName,
144
- value.persons.map(person => ({
145
- id: Person.Id.builder.build(person.id),
146
- properties: PersonPrivateProperties.builder.build(person.properties)
147
- }))
102
+ Person.Id.builder.build(value.personId)
148
103
  );
149
104
  }
105
+ return InvitationGetInvitationFunctionReturnType.from(
106
+ Team.Id.builder.build(value.teamId),
107
+ value.teamName,
108
+ value.persons.map(person => ({
109
+ id: Person.Id.builder.build(person.id),
110
+ properties: PersonPrivateProperties.builder.build(person.properties)
111
+ }))
112
+ );
150
113
  }
151
-
152
- export const builder = new TypeBuilder();
153
114
  }
115
+
116
+ export const builder = new TypeBuilder();
154
117
  }
@@ -1,32 +1,9 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Invitation } from '../../types';
3
- import { checkAuthentication } from '../../checkAuthentication';
4
- import { Firestore } from '../../Firestore';
5
3
 
6
- export class InvitationInviteFunction extends FirebaseFunction<Invitation, Invitation.Id> {
4
+ export abstract class InvitationInviteFunctionBase extends FirebaseFunction<Invitation, Invitation.Id> {
7
5
 
8
6
  public parametersBuilder = Invitation.builder;
9
7
 
10
8
  public returnTypeBuilder = Invitation.Id.builder;
11
-
12
- public async execute(invitation: Invitation): Promise<Invitation.Id> {
13
-
14
- await checkAuthentication(this.userId, invitation.teamId, 'team-manager');
15
-
16
- if (invitation.personId !== null) {
17
-
18
- const personSnapshot = await Firestore.shared.person(invitation.teamId, invitation.personId).snapshot();
19
- if (!personSnapshot.exists)
20
- throw new FunctionsError('not-found', 'Person not found');
21
-
22
- if (personSnapshot.data.signInProperties !== null)
23
- throw new FunctionsError('already-exists', 'Person already has an account');
24
-
25
- }
26
-
27
- const invitationId = invitation.createId();
28
- await Firestore.shared.invitation(invitationId).set(invitation);
29
-
30
- return invitationId;
31
- }
32
9
  }
@@ -1,69 +1,18 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
2
- import { Person, PersonSignInProperties, Team, User, Invitation } from '../../types';
3
- import { Firestore } from '../../Firestore';
4
- import { Flattable, ObjectTypeBuilder, UtcDate } from '@stevenkellner/typescript-common-functionality';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
+ import { Person, Team, User } from '../../types';
3
+ import { Flattable, ObjectTypeBuilder } from '@stevenkellner/typescript-common-functionality';
5
4
 
6
- export namespace InvitationRegisterFunction {
5
+ export type InvitationRegisterFunctionParameters = {
6
+ teamId: Team.Id
7
+ personId: Person.Id
8
+ };
7
9
 
8
- export type Parameters = {
9
- teamId: Team.Id
10
- personId: Person.Id
11
- };
12
- }
13
-
14
- export class InvitationRegisterFunction extends FirebaseFunction<InvitationRegisterFunction.Parameters, User> {
10
+ export abstract class InvitationRegisterFunctionBase extends FirebaseFunction<InvitationRegisterFunctionParameters, User> {
15
11
 
16
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<InvitationRegisterFunction.Parameters>, InvitationRegisterFunction.Parameters>({
12
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<InvitationRegisterFunctionParameters>, InvitationRegisterFunctionParameters>({
17
13
  teamId: Team.Id.builder,
18
14
  personId: Person.Id.builder
19
15
  });
20
16
 
21
17
  public returnTypeBuilder = User.builder;
22
-
23
- public async execute(parameters: InvitationRegisterFunction.Parameters): Promise<User> {
24
-
25
- if (this.userId === null)
26
- throw new FunctionsError('unauthenticated', 'User not authenticated');
27
- const userId = User.Id.builder.build(this.userId);
28
- const user = await this.getUser(userId);
29
-
30
- if (user.teams.has(parameters.teamId))
31
- throw new FunctionsError('already-exists', 'User already in team');
32
-
33
- const teamSnapshot = await Firestore.shared.team(parameters.teamId).snapshot();
34
- if (!teamSnapshot.exists)
35
- throw new FunctionsError('not-found', 'Team not found');
36
- const team = Team.builder.build(teamSnapshot.data);
37
-
38
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
39
- if (!personSnapshot.exists)
40
- throw new FunctionsError('not-found', 'Person not found');
41
- const person = Person.builder.build(personSnapshot.data);
42
-
43
- if (person.signInProperties !== null)
44
- throw new FunctionsError('already-exists', 'Person already registered');
45
-
46
- await this.removeUserInvitation(parameters.teamId, parameters.personId);
47
-
48
- user.teams.set(parameters.teamId, new User.TeamProperties(team.name, parameters.personId));
49
- await Firestore.shared.user(userId).set(user);
50
-
51
- person.signInProperties = new PersonSignInProperties(userId, UtcDate.now);
52
- await Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
53
-
54
- return user;
55
- }
56
-
57
- private async getUser(userId: User.Id): Promise<User> {
58
- const userSnapshot = await Firestore.shared.user(userId).snapshot();
59
- if (userSnapshot.exists)
60
- return User.builder.build(userSnapshot.data);
61
- return new User(userId);
62
- }
63
-
64
- private async removeUserInvitation(teamId: Team.Id, personId: Person.Id) {
65
- const invitation = new Invitation(teamId, personId);
66
- const invitationId = invitation.createId();
67
- await Firestore.shared.invitation(invitationId).remove();
68
- }
69
18
  }
@@ -1,24 +1,10 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Invitation } from '../../types';
3
- import { checkAuthentication } from '../../checkAuthentication';
4
- import { Firestore } from '../../Firestore';
5
3
  import { ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
6
4
 
7
- export class InvitationWithdrawFunction extends FirebaseFunction<Invitation, void> {
5
+ export abstract class InvitationWithdrawFunctionBase extends FirebaseFunction<Invitation, void> {
8
6
 
9
7
  public parametersBuilder = Invitation.builder;
10
8
 
11
9
  public returnTypeBuilder = new ValueTypeBuilder<void>();
12
-
13
- public async execute(invitation: Invitation): Promise<void> {
14
-
15
- await checkAuthentication(this.userId, invitation.teamId, 'team-manager');
16
-
17
- const invitationId = invitation.createId();
18
- const invitationSnapshot = await Firestore.shared.invitation(invitationId).snapshot();
19
- if (!invitationSnapshot.exists)
20
- throw new FunctionsError('not-found', 'Invitation not found');
21
-
22
- await Firestore.shared.invitation(invitationId).remove();
23
- }
24
10
  }
@@ -1,39 +1,20 @@
1
- import { NotificationProperties } from '../../types/NotificationProperties';
2
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
3
2
  import { Person, Team } from '../../types';
4
3
  import { Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
5
- import { Firestore } from '../../Firestore';
6
4
 
7
- export namespace NotificationRegisterFunction {
8
-
9
- export type Parameters = {
10
- teamId: Team.Id,
11
- personId: Person.Id,
12
- token: string
13
- }
5
+ export type NotificationRegisterFunctionParameters = {
6
+ teamId: Team.Id,
7
+ personId: Person.Id,
8
+ token: string
14
9
  }
15
10
 
16
- export class NotificationRegisterFunction extends FirebaseFunction<NotificationRegisterFunction.Parameters, void> {
11
+ export abstract class NotificationRegisterFunctionBase extends FirebaseFunction<NotificationRegisterFunctionParameters, void> {
17
12
 
18
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<NotificationRegisterFunction.Parameters>, NotificationRegisterFunction.Parameters>({
13
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<NotificationRegisterFunctionParameters>, NotificationRegisterFunctionParameters>({
19
14
  teamId: Team.Id.builder,
20
15
  personId: Person.Id.builder,
21
16
  token: new ValueTypeBuilder()
22
17
  });
23
18
 
24
19
  public returnTypeBuilder = new ValueTypeBuilder<void>();
25
-
26
- public async execute(parameters: NotificationRegisterFunction.Parameters): Promise<void> {
27
-
28
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
29
- if (!personSnapshot.exists)
30
- throw new FunctionsError('not-found', 'Person not found');
31
- const person = Person.builder.build(personSnapshot.data);
32
-
33
- if (person.signInProperties === null)
34
- throw new FunctionsError('unauthenticated', 'Person not signed in');
35
-
36
- person.signInProperties.notificationProperties.tokens.set(NotificationProperties.TokenId.create(parameters.token), parameters.token);
37
- await Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
38
- }
39
20
  }
@@ -1,38 +1,20 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { NotificationProperties, Person, Team } from '../../types';
3
3
  import { ArrayTypeBuilder, Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
4
- import { Firestore } from '../../Firestore';
5
4
 
6
- export namespace NotificationSubscribeFunction {
5
+ export type NotificationSubscribeFunctionParameters = {
6
+ teamId: Team.Id,
7
+ personId: Person.Id,
8
+ subscriptions: NotificationProperties.Subscription[]
9
+ };
7
10
 
8
- export type Parameters = {
9
- teamId: Team.Id,
10
- personId: Person.Id,
11
- subscriptions: NotificationProperties.Subscription[]
12
- }
13
- }
14
-
15
- export class NotificationSubscribeFunction extends FirebaseFunction<NotificationSubscribeFunction.Parameters, void> {
11
+ export abstract class NotificationSubscribeFunctionBase extends FirebaseFunction<NotificationSubscribeFunctionParameters, void> {
16
12
 
17
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<NotificationSubscribeFunction.Parameters>, NotificationSubscribeFunction.Parameters>({
13
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<NotificationSubscribeFunctionParameters>, NotificationSubscribeFunctionParameters>({
18
14
  teamId: Team.Id.builder,
19
15
  personId: Person.Id.builder,
20
16
  subscriptions: new ArrayTypeBuilder(new ValueTypeBuilder())
21
17
  });
22
18
 
23
19
  public returnTypeBuilder = new ValueTypeBuilder<void>();
24
-
25
- public async execute(parameters: NotificationSubscribeFunction.Parameters): Promise<void> {
26
-
27
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.personId).snapshot();
28
- if (!personSnapshot.exists)
29
- throw new FunctionsError('not-found', 'Person not found');
30
- const person = Person.builder.build(personSnapshot.data);
31
-
32
- if (person.signInProperties === null)
33
- throw new FunctionsError('unauthenticated', 'Person not signed in');
34
-
35
- person.signInProperties.notificationProperties.subscriptions = parameters.subscriptions;
36
- await Firestore.shared.person(parameters.teamId, parameters.personId).set(person);
37
- }
38
20
  }
@@ -1,36 +1,18 @@
1
1
  import { Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
2
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
2
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
3
3
  import { Team } from '../../types';
4
- import { checkAuthentication } from '../../checkAuthentication';
5
- import { Firestore } from '../../Firestore';
6
4
 
7
- export namespace PaypalMeEditFunction {
5
+ export type PaypalMeEditFunctionParameters = {
6
+ teamId: Team.Id;
7
+ paypalMeLink: string | null;
8
+ };
8
9
 
9
- export type Parameters = {
10
- teamId: Team.Id;
11
- paypalMeLink: string | null;
12
- };
13
- }
14
-
15
- export class PaypalMeEditFunction extends FirebaseFunction<PaypalMeEditFunction.Parameters, void> {
10
+ export abstract class PaypalMeEditFunctionBase extends FirebaseFunction<PaypalMeEditFunctionParameters, void> {
16
11
 
17
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PaypalMeEditFunction.Parameters>, PaypalMeEditFunction.Parameters>({
12
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PaypalMeEditFunctionParameters>, PaypalMeEditFunctionParameters>({
18
13
  teamId: Team.Id.builder,
19
14
  paypalMeLink: new ValueTypeBuilder()
20
15
  });
21
16
 
22
17
  public returnTypeBuilder = new ValueTypeBuilder<void>();
23
-
24
- public async execute(parameters: PaypalMeEditFunction.Parameters): Promise<void> {
25
-
26
- await checkAuthentication(this.userId, parameters.teamId, 'team-manager');
27
-
28
- const teamSnapshot = await Firestore.shared.team(parameters.teamId).snapshot();
29
- if (!teamSnapshot.exists)
30
- throw new FunctionsError('not-found', 'Team not found');
31
- const team = Team.builder.build(teamSnapshot.data);
32
-
33
- team.paypalMeLink = parameters.paypalMeLink;
34
- await Firestore.shared.team(parameters.teamId).set(team);
35
- }
36
18
  }
@@ -1,36 +1,20 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Person, PersonPrivateProperties, Team } from '../../types';
3
3
  import { Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
4
- import { checkAuthentication } from '../../checkAuthentication';
5
- import { Firestore } from '../../Firestore';
6
4
 
7
- export namespace PersonAddFunction {
5
+ export type PersonAddFunctionParameters = {
6
+ teamId: Team.Id
7
+ id: Person.Id,
8
+ properties: PersonPrivateProperties
9
+ };
8
10
 
9
- export type Parameters = {
10
- teamId: Team.Id
11
- id: Person.Id,
12
- properties: PersonPrivateProperties
13
- };
14
- }
15
-
16
- export class PersonAddFunction extends FirebaseFunction<PersonAddFunction.Parameters, void> {
11
+ export abstract class PersonAddFunctionBase extends FirebaseFunction<PersonAddFunctionParameters, void> {
17
12
 
18
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonAddFunction.Parameters>, PersonAddFunction.Parameters>({
13
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonAddFunctionParameters>, PersonAddFunctionParameters>({
19
14
  teamId: Team.Id.builder,
20
15
  id: Person.Id.builder,
21
16
  properties: PersonPrivateProperties.builder
22
17
  });
23
18
 
24
19
  public returnTypeBuilder = new ValueTypeBuilder<void>();
25
-
26
- public async execute(parameters: PersonAddFunction.Parameters): Promise<void> {
27
-
28
- await checkAuthentication(this.userId, parameters.teamId, 'person-manager');
29
-
30
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.id).snapshot();
31
- if (personSnapshot.exists)
32
- throw new FunctionsError('already-exists', 'Person already exists');
33
-
34
- await Firestore.shared.person(parameters.teamId, parameters.id).set(new Person(parameters.id, parameters.properties));
35
- }
36
20
  }
@@ -1,37 +1,18 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Person, Team } from '../../types';
3
3
  import { Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
4
- import { checkAuthentication } from '../../checkAuthentication';
5
- import { Firestore } from '../../Firestore';
6
4
 
7
- export namespace PersonDeleteFunction {
8
-
9
- export type Parameters = {
10
- teamId: Team.Id,
11
- id: Person.Id
12
- }
5
+ export type PersonDeleteFunctionParameters = {
6
+ teamId: Team.Id,
7
+ id: Person.Id
13
8
  }
14
9
 
15
- export class PersonDeleteFunction extends FirebaseFunction<PersonDeleteFunction.Parameters, void> {
10
+ export abstract class PersonDeleteFunctionBase extends FirebaseFunction<PersonDeleteFunctionParameters, void> {
16
11
 
17
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonDeleteFunction.Parameters>, PersonDeleteFunction.Parameters>({
12
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonDeleteFunctionParameters>, PersonDeleteFunctionParameters>({
18
13
  teamId: Team.Id.builder,
19
14
  id: Person.Id.builder
20
15
  });
21
16
 
22
17
  public returnTypeBuilder = new ValueTypeBuilder<void>();
23
-
24
- public async execute(parameters: PersonDeleteFunction.Parameters): Promise<void> {
25
-
26
- await checkAuthentication(this.userId, parameters.teamId, 'person-manager');
27
-
28
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.id).snapshot();
29
- if (!personSnapshot.exists)
30
- throw new FunctionsError('not-found', 'Person not found');
31
-
32
- if (personSnapshot.data.signInProperties !== null)
33
- throw new FunctionsError('failed-precondition', 'Person is signed in');
34
-
35
- await Firestore.shared.person(parameters.teamId, parameters.id).remove();
36
- }
37
18
  }
@@ -1,37 +1,20 @@
1
- import { FirebaseFunction, FunctionsError } from '@stevenkellner/firebase-function';
1
+ import { FirebaseFunction } from '@stevenkellner/firebase-function';
2
2
  import { Person, PersonPrivateProperties, Team } from '../../types';
3
3
  import { Flattable, ObjectTypeBuilder, ValueTypeBuilder } from '@stevenkellner/typescript-common-functionality';
4
- import { checkAuthentication } from '../../checkAuthentication';
5
- import { Firestore } from '../../Firestore';
6
4
 
7
- export namespace PersonUpdateFunction {
5
+ export type PersonUpdateFunctionParameters = {
6
+ teamId: Team.Id,
7
+ id: Person.Id,
8
+ properties: PersonPrivateProperties
9
+ };
8
10
 
9
- export type Parameters = {
10
- teamId: Team.Id,
11
- id: Person.Id,
12
- properties: PersonPrivateProperties
13
- };
14
- }
15
-
16
- export class PersonUpdateFunction extends FirebaseFunction<PersonUpdateFunction.Parameters, void> {
11
+ export abstract class PersonUpdateFunctionBase extends FirebaseFunction<PersonUpdateFunctionParameters, void> {
17
12
 
18
- public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonUpdateFunction.Parameters>, PersonUpdateFunction.Parameters>({
13
+ public parametersBuilder = new ObjectTypeBuilder<Flattable.Flatten<PersonUpdateFunctionParameters>, PersonUpdateFunctionParameters>({
19
14
  teamId: Team.Id.builder,
20
15
  id: Person.Id.builder,
21
16
  properties: PersonPrivateProperties.builder
22
17
  });
23
18
 
24
19
  public returnTypeBuilder = new ValueTypeBuilder<void>();
25
-
26
- public async execute(parameters: PersonUpdateFunction.Parameters): Promise<void> {
27
-
28
- await checkAuthentication(this.userId, parameters.teamId, 'person-manager');
29
-
30
- const personSnapshot = await Firestore.shared.person(parameters.teamId, parameters.id).snapshot();
31
- if (!personSnapshot.exists)
32
- throw new FunctionsError('not-found', 'Person not found');
33
- const person = Person.builder.build(personSnapshot.data);
34
-
35
- await Firestore.shared.person(parameters.teamId, parameters.id).set(new Person(parameters.id, parameters.properties, person.fineIds, person.signInProperties));
36
- }
37
20
  }