@jobsearch-works/firestore-models 1.1.7 → 1.1.9
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/README.md +373 -16
- package/dist/index.d.mts +52 -38
- package/dist/index.d.ts +52 -38
- package/dist/index.js +51 -38
- package/dist/index.mjs +50 -37
- package/package.json +1 -1
package/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# firestore-models
|
2
2
|
|
3
|
+
[](https://www.npmjs.com/package/@jobsearch-works/firestore-models)
|
4
|
+
[](./LICENSE)
|
5
|
+
|
3
6
|
A shared library for standardizing Firestore document schemas and paths across multiple projects.
|
4
7
|
|
5
8
|
This library provides:
|
@@ -50,32 +53,392 @@ firestore-models/
|
|
50
53
|
|
51
54
|
---
|
52
55
|
|
56
|
+
## 🔗 Entity Relationships
|
57
|
+
|
58
|
+
The following diagram and table illustrate how the main Firestore models relate to each other, both by reference (IDs) and by Firestore subcollections/paths:
|
59
|
+
|
60
|
+
```
|
61
|
+
Client
|
62
|
+
├── applications (Application)
|
63
|
+
│ └── questions (ApplicationQuestion)
|
64
|
+
├── questions (ClientQuestion)
|
65
|
+
├── preferences/targetPreferences (TargetPreferences)
|
66
|
+
├── vacancySuggestions (VacancySuggestion)
|
67
|
+
└── clientEmails/{clientId}/messages (GmailMessage)
|
68
|
+
|
69
|
+
Vacancy
|
70
|
+
└── Referenced by Application and VacancySuggestion
|
71
|
+
|
72
|
+
Agent
|
73
|
+
└── Root collection
|
74
|
+
|
75
|
+
User
|
76
|
+
└── Root collection
|
77
|
+
|
78
|
+
ClientData
|
79
|
+
└── Root collection
|
80
|
+
|
81
|
+
ClientLogin
|
82
|
+
└── clientLogins/{userId}/logins/{domain}
|
83
|
+
```
|
84
|
+
|
85
|
+
| Entity | References / Path | Description |
|
86
|
+
| ------------------- | ---------------------------------------------------- | -------------------------------------------------------------------- |
|
87
|
+
| Client | Root collection | Main user entity |
|
88
|
+
| Application | clients/{clientId}/applications/{applicationId} | References `clientId`, `vacancyId` |
|
89
|
+
| ApplicationQuestion | .../applications/{applicationId}/questions/{qId} | Subcollection of Application |
|
90
|
+
| ClientQuestion | clients/{clientId}/questions/{questionId} | Subcollection of Client |
|
91
|
+
| Vacancy | Root collection | Referenced by Application, VacancySuggestion |
|
92
|
+
| VacancySuggestion | clients/{clientId}/vacancySuggestions/{suggestionId} | References `clientId`, `vacancyId` |
|
93
|
+
| TargetPreferences | clients/{clientId}/preferences/targetPreferences | References `clientId`, contains `TargetJob[]` and `TargetLocation[]` |
|
94
|
+
| TargetJob | Embedded in TargetPreferences | Contains `category` (VacancyCategory) |
|
95
|
+
| TargetLocation | Embedded in TargetPreferences | List of preferred locations |
|
96
|
+
| Agent | Root collection | Standalone entity |
|
97
|
+
| AuthUser | Root collection | Standalone entity |
|
98
|
+
| ClientData | Root collection | Standalone entity |
|
99
|
+
| ClientLogin | clientLogins/{userId}/logins/{domain} | References `userId` |
|
100
|
+
| GmailMessage | clientEmails/{clientId}/messages/{messageId} | References `clientId` |
|
101
|
+
|
102
|
+
**Notes:**
|
103
|
+
|
104
|
+
- Most subcollections are nested under `Client` (e.g., applications, questions, vacancySuggestions).
|
105
|
+
- `Application` and `VacancySuggestion` reference both `clientId` (parent) and `vacancyId` (target job).
|
106
|
+
- `TargetPreferences` embeds arrays of `TargetJob` and `TargetLocation`.
|
107
|
+
- All relationships are enforced by Firestore path structure and cross-referenced IDs.
|
108
|
+
|
109
|
+
---
|
110
|
+
|
53
111
|
## ✅ Usage
|
54
112
|
|
55
113
|
### Importing Models and Paths
|
56
114
|
|
57
115
|
```ts
|
58
116
|
import { Client } from "@jobsearch-works/firestore-models/types/Client";
|
59
|
-
import {
|
117
|
+
import { firestorePaths } from "@jobsearch-works/firestore-models/paths/firestorePaths";
|
60
118
|
|
61
|
-
const
|
119
|
+
const clientDocPath = firestorePaths.clients.doc("abc123"); // → "clients/abc123"
|
62
120
|
```
|
63
121
|
|
64
122
|
---
|
65
123
|
|
66
|
-
##
|
124
|
+
## 📄 Firestore Models (Types)
|
125
|
+
|
126
|
+
All Firestore document schemas are defined as TypeScript interfaces in `src/types`. These are pure data types (SDK-free) and can be reused across apps, functions, and tests.
|
127
|
+
|
128
|
+
> **Why does every model include `id?: string`?**
|
129
|
+
> Firestore's `.data()` does **not** include the document ID. This library's types include `id` as an optional property, which is added manually when fetching data. This makes it easier to use models in UI, caching, and linking between entities.
|
130
|
+
|
131
|
+
### Main Types (alphabetical)
|
132
|
+
|
133
|
+
- **Agent**
|
134
|
+
|
135
|
+
```ts
|
136
|
+
export interface Agent {
|
137
|
+
id?: string;
|
138
|
+
name: string;
|
139
|
+
email: string;
|
140
|
+
status: "active" | "inactive";
|
141
|
+
profilePicture?: string;
|
142
|
+
createdAt?: Date | string;
|
143
|
+
updatedAt?: Date | string;
|
144
|
+
}
|
145
|
+
```
|
146
|
+
|
147
|
+
- **Application**
|
148
|
+
|
149
|
+
```ts
|
150
|
+
export interface Application {
|
151
|
+
id?: string;
|
152
|
+
vacancyId: string;
|
153
|
+
clientId: string;
|
154
|
+
status: ApplicationStatus;
|
155
|
+
assignedTo?: string;
|
156
|
+
coverLetter?: string;
|
157
|
+
resume?: string;
|
158
|
+
// Status timestamps
|
159
|
+
submittedAt?: Date | string;
|
160
|
+
interviewingAt?: Date | string;
|
161
|
+
acceptedAt?: Date | string;
|
162
|
+
rejectedAt?: Date | string;
|
163
|
+
withdrawnAt?: Date | string;
|
164
|
+
applyingAt?: Date | string;
|
165
|
+
suggestedAt?: Date | string;
|
166
|
+
approvedAt?: Date | string;
|
167
|
+
// Denormalized/snapshot fields from Vacancy
|
168
|
+
company?: string;
|
169
|
+
position?: string;
|
170
|
+
location?: string;
|
171
|
+
jobId?: string;
|
172
|
+
advertisingUrl?: string;
|
173
|
+
applicationUrl?: string;
|
174
|
+
applicationDomain?: string;
|
175
|
+
advertisingDomain?: string;
|
176
|
+
description?: string;
|
177
|
+
fullPageText?: string;
|
178
|
+
createdAt?: Date | string;
|
179
|
+
updatedAt?: Date | string;
|
180
|
+
}
|
181
|
+
```
|
182
|
+
|
183
|
+
- `ApplicationStatus` values: new, submitted, interviewing, accepted, rejected, withdrawn, applying, suggested, approved
|
184
|
+
|
185
|
+
- **ApplicationQuestion**
|
186
|
+
|
187
|
+
```ts
|
188
|
+
export interface ApplicationQuestion {
|
189
|
+
id?: string;
|
190
|
+
questionText: string;
|
191
|
+
answerText?: string;
|
192
|
+
type: "text" | "select";
|
193
|
+
createdAt?: Date | string;
|
194
|
+
updatedAt?: Date | string;
|
195
|
+
}
|
196
|
+
```
|
197
|
+
|
198
|
+
- **AuthUser**
|
199
|
+
|
200
|
+
```ts
|
201
|
+
export interface AuthUser {
|
202
|
+
id?: string;
|
203
|
+
email: string;
|
204
|
+
displayName?: string;
|
205
|
+
photoURL?: string;
|
206
|
+
lastSignIn?: string; // ISO string
|
207
|
+
emailVerified?: boolean;
|
208
|
+
createdAt?: Date | string;
|
209
|
+
updatedAt?: Date | string;
|
210
|
+
}
|
211
|
+
```
|
212
|
+
|
213
|
+
- **Client**
|
214
|
+
|
215
|
+
```ts
|
216
|
+
export interface Client {
|
217
|
+
id?: string;
|
218
|
+
name: string;
|
219
|
+
email: string;
|
220
|
+
status: "active" | "inactive";
|
221
|
+
resume?: string;
|
222
|
+
createdAt?: Date | string;
|
223
|
+
}
|
224
|
+
```
|
225
|
+
|
226
|
+
- **ClientData**
|
227
|
+
|
228
|
+
```ts
|
229
|
+
export interface ClientData {
|
230
|
+
id?: string;
|
231
|
+
firstName: string;
|
232
|
+
lastName: string;
|
233
|
+
middleName?: string;
|
234
|
+
preferredName?: string;
|
235
|
+
email: string;
|
236
|
+
phone: string;
|
237
|
+
address: string;
|
238
|
+
city: string;
|
239
|
+
suburb: string;
|
240
|
+
state: string;
|
241
|
+
zip: string;
|
242
|
+
country: string;
|
243
|
+
linkedIn?: string;
|
244
|
+
countryPhoneCode: string;
|
245
|
+
nationality: string;
|
246
|
+
dateOfBirth?: Date | string;
|
247
|
+
createdAt?: Date | string;
|
248
|
+
updatedAt?: Date | string;
|
249
|
+
}
|
250
|
+
```
|
251
|
+
|
252
|
+
- **ClientLogin**
|
253
|
+
|
254
|
+
```ts
|
255
|
+
export interface ClientLogin {
|
256
|
+
id?: string;
|
257
|
+
userId: string;
|
258
|
+
url: string;
|
259
|
+
domain: string;
|
260
|
+
username?: string;
|
261
|
+
password: string;
|
262
|
+
email?: string;
|
263
|
+
createdAt?: Date | string;
|
264
|
+
updatedAt?: Date | string;
|
265
|
+
}
|
266
|
+
```
|
267
|
+
|
268
|
+
- **ClientQuestion**
|
269
|
+
|
270
|
+
```ts
|
271
|
+
export interface ClientQuestion {
|
272
|
+
id?: string;
|
273
|
+
questionText: string;
|
274
|
+
answerText?: string;
|
275
|
+
type: "text" | "select";
|
276
|
+
options?: string[];
|
277
|
+
createdAt?: Date | string;
|
278
|
+
updatedAt?: Date | string;
|
279
|
+
}
|
280
|
+
```
|
281
|
+
|
282
|
+
- **GmailMessage**
|
283
|
+
|
284
|
+
```ts
|
285
|
+
export interface GmailMessage {
|
286
|
+
id?: string;
|
287
|
+
messageId: string;
|
288
|
+
threadId?: string;
|
289
|
+
labelIds?: string[];
|
290
|
+
snippet?: string;
|
291
|
+
internalDate?: string;
|
292
|
+
payload?: object;
|
293
|
+
createdAt?: Date | string;
|
294
|
+
updatedAt?: Date | string;
|
295
|
+
}
|
296
|
+
```
|
297
|
+
|
298
|
+
- **TargetJob**
|
299
|
+
|
300
|
+
```ts
|
301
|
+
export interface TargetJob {
|
302
|
+
id?: string;
|
303
|
+
category: VacancyCategory;
|
304
|
+
position: string;
|
305
|
+
notes?: string;
|
306
|
+
}
|
307
|
+
```
|
308
|
+
|
309
|
+
- **TargetLocation**
|
310
|
+
|
311
|
+
```ts
|
312
|
+
export interface TargetLocation {
|
313
|
+
id?: string;
|
314
|
+
country: string;
|
315
|
+
cities: {
|
316
|
+
name: string;
|
317
|
+
areas: string[];
|
318
|
+
}[];
|
319
|
+
}
|
320
|
+
```
|
321
|
+
|
322
|
+
- **TargetPreferences**
|
323
|
+
|
324
|
+
```ts
|
325
|
+
export interface TargetPreferences {
|
326
|
+
id?: string;
|
327
|
+
clientId: string;
|
328
|
+
locations: TargetLocation[];
|
329
|
+
jobs: TargetJob[];
|
330
|
+
createdAt?: Date | string;
|
331
|
+
updatedAt?: Date | string;
|
332
|
+
}
|
333
|
+
```
|
334
|
+
|
335
|
+
- **Vacancy**
|
336
|
+
|
337
|
+
```ts
|
338
|
+
export interface Vacancy {
|
339
|
+
id?: string;
|
340
|
+
company: string;
|
341
|
+
position: string;
|
342
|
+
location: string;
|
343
|
+
description: string;
|
344
|
+
advertisingUrl: string;
|
345
|
+
applicationUrl: string;
|
346
|
+
applicationDomain: string;
|
347
|
+
advertisingDomain: string;
|
348
|
+
fullPageText: string;
|
349
|
+
jobId: string;
|
350
|
+
category: VacancyCategory;
|
351
|
+
suggestedTo?: string[];
|
352
|
+
createdAt?: Date | string;
|
353
|
+
updatedAt?: Date | string;
|
354
|
+
}
|
355
|
+
```
|
356
|
+
|
357
|
+
- `VacancyCategory` includes: Accounting, IT, Healthcare, Sales, etc.
|
358
|
+
|
359
|
+
- **VacancySuggestion**
|
360
|
+
```ts
|
361
|
+
export interface VacancySuggestion {
|
362
|
+
id?: string;
|
363
|
+
clientId: string;
|
364
|
+
vacancyId: string;
|
365
|
+
status: string;
|
366
|
+
createdAt?: Date | string;
|
367
|
+
}
|
368
|
+
```
|
369
|
+
|
370
|
+
---
|
371
|
+
|
372
|
+
## 🗂️ Firestore Path Utilities
|
373
|
+
|
374
|
+
All Firestore collection/document path builders are centralized in `src/paths/firestorePaths.ts` as pure string helpers. **Every helper returns a Firestore path string, not a Firestore SDK reference.** This keeps the library SDK-free and fully portable for use in any environment (Node.js, browser, SSR, CLI, etc). No Firestore SDK is required or included.
|
375
|
+
|
376
|
+
### Example Usage
|
67
377
|
|
68
378
|
```ts
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
379
|
+
import { firestorePaths } from "@jobsearch-works/firestore-models/paths/firestorePaths";
|
380
|
+
|
381
|
+
const clientDoc = firestorePaths.clients.doc("clientId"); // "clients/clientId"
|
382
|
+
const appDoc = firestorePaths.clients.applications.doc(
|
383
|
+
"clientId",
|
384
|
+
"applicationId"
|
385
|
+
); // "clients/clientId/applications/applicationId"
|
386
|
+
const vacancyDoc = firestorePaths.vacancies.doc("vacancyId"); // "vacancies/vacancyId"
|
387
|
+
```
|
388
|
+
|
389
|
+
#### Fetching a Firestore Document and Including Its ID
|
390
|
+
|
391
|
+
```ts
|
392
|
+
import { doc, getDoc } from "firebase/firestore";
|
393
|
+
import { firestore } from "../firebaseConfig";
|
394
|
+
import { firestorePaths } from "@jobsearch-works/firestore-models";
|
395
|
+
|
396
|
+
const ref = doc(firestore, firestorePaths.vacancies.doc("vac123"));
|
397
|
+
const snap = await getDoc(ref);
|
398
|
+
const vacancy = { id: snap.id, ...snap.data() };
|
399
|
+
```
|
400
|
+
|
401
|
+
**Reusable withId Utility:**
|
402
|
+
|
403
|
+
```ts
|
404
|
+
export function withId<T>(snap: DocumentSnapshot): T & { id: string } {
|
405
|
+
return { id: snap.id, ...snap.data() } as T & { id: string };
|
76
406
|
}
|
77
407
|
```
|
78
408
|
|
409
|
+
#### Main Path Helpers
|
410
|
+
|
411
|
+
- `firestorePaths.clients.collection()` → "clients"
|
412
|
+
- `firestorePaths.clients.doc(clientId)` → "clients/{clientId}"
|
413
|
+
- `firestorePaths.clients.applications.collection(clientId)` → "clients/{clientId}/applications"
|
414
|
+
- `firestorePaths.clients.applications.doc(clientId, applicationId)` → "clients/{clientId}/applications/{applicationId}"
|
415
|
+
- `firestorePaths.clients.questions.collection(clientId)` → "clients/{clientId}/questions"
|
416
|
+
- `firestorePaths.clients.questions.doc(clientId, questionId)` → "clients/{clientId}/questions/{questionId}"
|
417
|
+
- `firestorePaths.clients.preferences.target(clientId)` → "clients/{clientId}/preferences/targetPreferences"
|
418
|
+
- `firestorePaths.clients.vacancySuggestions.collection(clientId)` → "clients/{clientId}/vacancySuggestions"
|
419
|
+
- `firestorePaths.clients.vacancySuggestions.doc(clientId, suggestionId)` → "clients/{clientId}/vacancySuggestions/{suggestionId}"
|
420
|
+
- `firestorePaths.users.collection()` → "users"
|
421
|
+
- `firestorePaths.users.doc(userId)` → "users/{userId}"
|
422
|
+
- `firestorePaths.vacancies.collection()` → "vacancies"
|
423
|
+
- `firestorePaths.vacancies.doc(vacancyId)` → "vacancies/{vacancyId}"
|
424
|
+
- `firestorePaths.agents.collection()` → "agents"
|
425
|
+
- `firestorePaths.agents.doc(agentId)` → "agents/{agentId}"
|
426
|
+
- `firestorePaths.clientData.collection()` → "clientData"
|
427
|
+
- `firestorePaths.clientData.doc(clientDataId)` → "clientData/{clientDataId}"
|
428
|
+
- `firestorePaths.clientLogins.collection(userId)` → "clientLogins/{userId}"
|
429
|
+
- `firestorePaths.clientLogins.doc(userId, domain)` → "clientLogins/{userId}/logins/{domain}"
|
430
|
+
- `firestorePaths.gmailMessages.collection(clientId)` → "clientEmails/{clientId}/messages"
|
431
|
+
- `firestorePaths.gmailMessages.doc(clientId, messageId)` → "clientEmails/{clientId}/messages/{messageId}"
|
432
|
+
|
433
|
+
---
|
434
|
+
|
435
|
+
## 🛡️ Notes
|
436
|
+
|
437
|
+
- All types and paths are SDK-independent and safe to use in any TypeScript/Node/React project.
|
438
|
+
- This package does not include any Firestore SDK or database logic—just models and helpers.
|
439
|
+
- For Firestore access, use your own service layer or SDK wrapper.
|
440
|
+
- This library follows semantic versioning and is safe for production use.
|
441
|
+
|
79
442
|
---
|
80
443
|
|
81
444
|
## 🔗 Path Builder Example
|
@@ -98,9 +461,3 @@ When adding a new model:
|
|
98
461
|
2. Add its path builder in `src/paths/pathStrings.ts`
|
99
462
|
3. Update the documentation if needed
|
100
463
|
4. Maintain backward compatibility
|
101
|
-
|
102
|
-
---
|
103
|
-
|
104
|
-
## 📄 License
|
105
|
-
|
106
|
-
MIT
|
package/dist/index.d.mts
CHANGED
@@ -183,19 +183,7 @@ interface VacancySuggestion {
|
|
183
183
|
clientId: string;
|
184
184
|
vacancyId: string;
|
185
185
|
status: string;
|
186
|
-
company: string;
|
187
|
-
position: string;
|
188
|
-
location: string;
|
189
|
-
description: string;
|
190
|
-
advertisingUrl: string;
|
191
|
-
applicationUrl: string;
|
192
|
-
applicationDomain: string;
|
193
|
-
advertisingDomain: string;
|
194
|
-
fullPageText: string;
|
195
|
-
jobId: string;
|
196
|
-
category: VacancyCategory;
|
197
186
|
createdAt?: Date | string;
|
198
|
-
updatedAt?: Date | string;
|
199
187
|
}
|
200
188
|
|
201
189
|
interface GmailMessage {
|
@@ -225,6 +213,7 @@ interface GmailMessage {
|
|
225
213
|
}
|
226
214
|
|
227
215
|
interface TargetLocation {
|
216
|
+
id?: string;
|
228
217
|
country: string;
|
229
218
|
cities: {
|
230
219
|
name: string;
|
@@ -233,13 +222,14 @@ interface TargetLocation {
|
|
233
222
|
}
|
234
223
|
|
235
224
|
interface TargetJob {
|
225
|
+
id?: string;
|
236
226
|
category: VacancyCategory;
|
237
227
|
position: string;
|
238
228
|
notes?: string;
|
239
229
|
}
|
240
230
|
|
241
231
|
interface TargetPreferences {
|
242
|
-
id
|
232
|
+
id?: string;
|
243
233
|
clientId: string;
|
244
234
|
locations: TargetLocation[];
|
245
235
|
jobs: TargetJob[];
|
@@ -247,30 +237,54 @@ interface TargetPreferences {
|
|
247
237
|
updatedAt: Date;
|
248
238
|
}
|
249
239
|
|
250
|
-
declare const
|
251
|
-
readonly clients:
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
240
|
+
declare const firestorePaths: {
|
241
|
+
readonly clients: {
|
242
|
+
readonly collection: () => string;
|
243
|
+
readonly doc: (clientId: string) => string;
|
244
|
+
readonly applications: {
|
245
|
+
readonly collection: (clientId: string) => string;
|
246
|
+
readonly doc: (clientId: string, applicationId: string) => string;
|
247
|
+
readonly questions: {
|
248
|
+
readonly collection: (clientId: string, applicationId: string) => string;
|
249
|
+
readonly doc: (clientId: string, applicationId: string, questionId: string) => string;
|
250
|
+
};
|
251
|
+
};
|
252
|
+
readonly questions: {
|
253
|
+
readonly collection: (clientId: string) => string;
|
254
|
+
readonly doc: (clientId: string, questionId: string) => string;
|
255
|
+
};
|
256
|
+
readonly preferences: {
|
257
|
+
readonly target: (clientId: string) => string;
|
258
|
+
};
|
259
|
+
readonly vacancySuggestions: {
|
260
|
+
readonly collection: (clientId: string) => string;
|
261
|
+
readonly doc: (clientId: string, suggestionId: string) => string;
|
262
|
+
};
|
263
|
+
};
|
264
|
+
readonly users: {
|
265
|
+
readonly collection: () => string;
|
266
|
+
readonly doc: (userId: string) => string;
|
267
|
+
};
|
268
|
+
readonly vacancies: {
|
269
|
+
readonly collection: () => string;
|
270
|
+
readonly doc: (vacancyId: string) => string;
|
271
|
+
};
|
272
|
+
readonly agents: {
|
273
|
+
readonly collection: () => string;
|
274
|
+
readonly doc: (agentId: string) => string;
|
275
|
+
};
|
276
|
+
readonly clientData: {
|
277
|
+
readonly collection: () => string;
|
278
|
+
readonly doc: (clientDataId: string) => string;
|
279
|
+
};
|
280
|
+
readonly clientLogins: {
|
281
|
+
readonly collection: (userId: string) => string;
|
282
|
+
readonly doc: (userId: string, domain: string) => string;
|
283
|
+
};
|
284
|
+
readonly gmailMessages: {
|
285
|
+
readonly collection: (clientId: string) => string;
|
286
|
+
readonly doc: (clientId: string, messageId: string) => string;
|
287
|
+
};
|
274
288
|
};
|
275
289
|
|
276
|
-
export { Agent, Application, ApplicationQuestion, ApplicationQuestionType, ApplicationQuestionTypeOptions, ApplicationStatus, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, ClientQuestionType, ClientQuestionTypeOptions, GmailMessage, TargetJob, TargetLocation, TargetPreferences, Vacancy, VacancyCategory, VacancySuggestion,
|
290
|
+
export { Agent, Application, ApplicationQuestion, ApplicationQuestionType, ApplicationQuestionTypeOptions, ApplicationStatus, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, ClientQuestionType, ClientQuestionTypeOptions, GmailMessage, TargetJob, TargetLocation, TargetPreferences, Vacancy, VacancyCategory, VacancySuggestion, firestorePaths };
|
package/dist/index.d.ts
CHANGED
@@ -183,19 +183,7 @@ interface VacancySuggestion {
|
|
183
183
|
clientId: string;
|
184
184
|
vacancyId: string;
|
185
185
|
status: string;
|
186
|
-
company: string;
|
187
|
-
position: string;
|
188
|
-
location: string;
|
189
|
-
description: string;
|
190
|
-
advertisingUrl: string;
|
191
|
-
applicationUrl: string;
|
192
|
-
applicationDomain: string;
|
193
|
-
advertisingDomain: string;
|
194
|
-
fullPageText: string;
|
195
|
-
jobId: string;
|
196
|
-
category: VacancyCategory;
|
197
186
|
createdAt?: Date | string;
|
198
|
-
updatedAt?: Date | string;
|
199
187
|
}
|
200
188
|
|
201
189
|
interface GmailMessage {
|
@@ -225,6 +213,7 @@ interface GmailMessage {
|
|
225
213
|
}
|
226
214
|
|
227
215
|
interface TargetLocation {
|
216
|
+
id?: string;
|
228
217
|
country: string;
|
229
218
|
cities: {
|
230
219
|
name: string;
|
@@ -233,13 +222,14 @@ interface TargetLocation {
|
|
233
222
|
}
|
234
223
|
|
235
224
|
interface TargetJob {
|
225
|
+
id?: string;
|
236
226
|
category: VacancyCategory;
|
237
227
|
position: string;
|
238
228
|
notes?: string;
|
239
229
|
}
|
240
230
|
|
241
231
|
interface TargetPreferences {
|
242
|
-
id
|
232
|
+
id?: string;
|
243
233
|
clientId: string;
|
244
234
|
locations: TargetLocation[];
|
245
235
|
jobs: TargetJob[];
|
@@ -247,30 +237,54 @@ interface TargetPreferences {
|
|
247
237
|
updatedAt: Date;
|
248
238
|
}
|
249
239
|
|
250
|
-
declare const
|
251
|
-
readonly clients:
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
240
|
+
declare const firestorePaths: {
|
241
|
+
readonly clients: {
|
242
|
+
readonly collection: () => string;
|
243
|
+
readonly doc: (clientId: string) => string;
|
244
|
+
readonly applications: {
|
245
|
+
readonly collection: (clientId: string) => string;
|
246
|
+
readonly doc: (clientId: string, applicationId: string) => string;
|
247
|
+
readonly questions: {
|
248
|
+
readonly collection: (clientId: string, applicationId: string) => string;
|
249
|
+
readonly doc: (clientId: string, applicationId: string, questionId: string) => string;
|
250
|
+
};
|
251
|
+
};
|
252
|
+
readonly questions: {
|
253
|
+
readonly collection: (clientId: string) => string;
|
254
|
+
readonly doc: (clientId: string, questionId: string) => string;
|
255
|
+
};
|
256
|
+
readonly preferences: {
|
257
|
+
readonly target: (clientId: string) => string;
|
258
|
+
};
|
259
|
+
readonly vacancySuggestions: {
|
260
|
+
readonly collection: (clientId: string) => string;
|
261
|
+
readonly doc: (clientId: string, suggestionId: string) => string;
|
262
|
+
};
|
263
|
+
};
|
264
|
+
readonly users: {
|
265
|
+
readonly collection: () => string;
|
266
|
+
readonly doc: (userId: string) => string;
|
267
|
+
};
|
268
|
+
readonly vacancies: {
|
269
|
+
readonly collection: () => string;
|
270
|
+
readonly doc: (vacancyId: string) => string;
|
271
|
+
};
|
272
|
+
readonly agents: {
|
273
|
+
readonly collection: () => string;
|
274
|
+
readonly doc: (agentId: string) => string;
|
275
|
+
};
|
276
|
+
readonly clientData: {
|
277
|
+
readonly collection: () => string;
|
278
|
+
readonly doc: (clientDataId: string) => string;
|
279
|
+
};
|
280
|
+
readonly clientLogins: {
|
281
|
+
readonly collection: (userId: string) => string;
|
282
|
+
readonly doc: (userId: string, domain: string) => string;
|
283
|
+
};
|
284
|
+
readonly gmailMessages: {
|
285
|
+
readonly collection: (clientId: string) => string;
|
286
|
+
readonly doc: (clientId: string, messageId: string) => string;
|
287
|
+
};
|
274
288
|
};
|
275
289
|
|
276
|
-
export { Agent, Application, ApplicationQuestion, ApplicationQuestionType, ApplicationQuestionTypeOptions, ApplicationStatus, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, ClientQuestionType, ClientQuestionTypeOptions, GmailMessage, TargetJob, TargetLocation, TargetPreferences, Vacancy, VacancyCategory, VacancySuggestion,
|
290
|
+
export { Agent, Application, ApplicationQuestion, ApplicationQuestionType, ApplicationQuestionTypeOptions, ApplicationStatus, AuthUser, Client, ClientData, ClientLogin, ClientQuestion, ClientQuestionType, ClientQuestionTypeOptions, GmailMessage, TargetJob, TargetLocation, TargetPreferences, Vacancy, VacancyCategory, VacancySuggestion, firestorePaths };
|
package/dist/index.js
CHANGED
@@ -24,7 +24,7 @@ __export(src_exports, {
|
|
24
24
|
ApplicationStatus: () => ApplicationStatus,
|
25
25
|
ClientQuestionTypeOptions: () => ClientQuestionTypeOptions,
|
26
26
|
VacancyCategory: () => VacancyCategory,
|
27
|
-
|
27
|
+
firestorePaths: () => firestorePaths
|
28
28
|
});
|
29
29
|
module.exports = __toCommonJS(src_exports);
|
30
30
|
|
@@ -84,42 +84,55 @@ var ClientQuestionTypeOptions = [
|
|
84
84
|
// src/types/ApplicationQuestion.ts
|
85
85
|
var ApplicationQuestionTypeOptions = ["text", "select"];
|
86
86
|
|
87
|
-
// src/paths/
|
88
|
-
var
|
89
|
-
clients:
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
87
|
+
// src/paths/firestorePaths.ts
|
88
|
+
var firestorePaths = {
|
89
|
+
clients: {
|
90
|
+
collection: () => "clients",
|
91
|
+
doc: (clientId) => `clients/${clientId}`,
|
92
|
+
applications: {
|
93
|
+
collection: (clientId) => `clients/${clientId}/applications`,
|
94
|
+
doc: (clientId, applicationId) => `clients/${clientId}/applications/${applicationId}`,
|
95
|
+
questions: {
|
96
|
+
collection: (clientId, applicationId) => `clients/${clientId}/applications/${applicationId}/questions`,
|
97
|
+
doc: (clientId, applicationId, questionId) => `clients/${clientId}/applications/${applicationId}/questions/${questionId}`
|
98
|
+
}
|
99
|
+
},
|
100
|
+
questions: {
|
101
|
+
collection: (clientId) => `clients/${clientId}/questions`,
|
102
|
+
doc: (clientId, questionId) => `clients/${clientId}/questions/${questionId}`
|
103
|
+
},
|
104
|
+
preferences: {
|
105
|
+
target: (clientId) => `clients/${clientId}/preferences/targetPreferences`
|
106
|
+
},
|
107
|
+
vacancySuggestions: {
|
108
|
+
collection: (clientId) => `clients/${clientId}/vacancySuggestions`,
|
109
|
+
doc: (clientId, suggestionId) => `clients/${clientId}/vacancySuggestions/${suggestionId}`
|
110
|
+
}
|
111
|
+
},
|
112
|
+
users: {
|
113
|
+
collection: () => "users",
|
114
|
+
doc: (userId) => `users/${userId}`
|
115
|
+
},
|
116
|
+
vacancies: {
|
117
|
+
collection: () => "vacancies",
|
118
|
+
doc: (vacancyId) => `vacancies/${vacancyId}`
|
119
|
+
},
|
120
|
+
agents: {
|
121
|
+
collection: () => "agents",
|
122
|
+
doc: (agentId) => `agents/${agentId}`
|
123
|
+
},
|
124
|
+
clientData: {
|
125
|
+
collection: () => "clientData",
|
126
|
+
doc: (clientDataId) => `clientData/${clientDataId}`
|
127
|
+
},
|
128
|
+
clientLogins: {
|
129
|
+
collection: (userId) => `clientLogins/${userId}`,
|
130
|
+
doc: (userId, domain) => `clientLogins/${userId}/logins/${domain}`
|
131
|
+
},
|
132
|
+
gmailMessages: {
|
133
|
+
collection: (clientId) => `clientEmails/${clientId}/messages`,
|
134
|
+
doc: (clientId, messageId) => `clientEmails/${clientId}/messages/${messageId}`
|
135
|
+
}
|
123
136
|
};
|
124
137
|
// Annotate the CommonJS export names for ESM import in node:
|
125
138
|
0 && (module.exports = {
|
@@ -127,5 +140,5 @@ var pathStrings = {
|
|
127
140
|
ApplicationStatus,
|
128
141
|
ClientQuestionTypeOptions,
|
129
142
|
VacancyCategory,
|
130
|
-
|
143
|
+
firestorePaths
|
131
144
|
});
|
package/dist/index.mjs
CHANGED
@@ -54,47 +54,60 @@ var ClientQuestionTypeOptions = [
|
|
54
54
|
// src/types/ApplicationQuestion.ts
|
55
55
|
var ApplicationQuestionTypeOptions = ["text", "select"];
|
56
56
|
|
57
|
-
// src/paths/
|
58
|
-
var
|
59
|
-
clients:
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
57
|
+
// src/paths/firestorePaths.ts
|
58
|
+
var firestorePaths = {
|
59
|
+
clients: {
|
60
|
+
collection: () => "clients",
|
61
|
+
doc: (clientId) => `clients/${clientId}`,
|
62
|
+
applications: {
|
63
|
+
collection: (clientId) => `clients/${clientId}/applications`,
|
64
|
+
doc: (clientId, applicationId) => `clients/${clientId}/applications/${applicationId}`,
|
65
|
+
questions: {
|
66
|
+
collection: (clientId, applicationId) => `clients/${clientId}/applications/${applicationId}/questions`,
|
67
|
+
doc: (clientId, applicationId, questionId) => `clients/${clientId}/applications/${applicationId}/questions/${questionId}`
|
68
|
+
}
|
69
|
+
},
|
70
|
+
questions: {
|
71
|
+
collection: (clientId) => `clients/${clientId}/questions`,
|
72
|
+
doc: (clientId, questionId) => `clients/${clientId}/questions/${questionId}`
|
73
|
+
},
|
74
|
+
preferences: {
|
75
|
+
target: (clientId) => `clients/${clientId}/preferences/targetPreferences`
|
76
|
+
},
|
77
|
+
vacancySuggestions: {
|
78
|
+
collection: (clientId) => `clients/${clientId}/vacancySuggestions`,
|
79
|
+
doc: (clientId, suggestionId) => `clients/${clientId}/vacancySuggestions/${suggestionId}`
|
80
|
+
}
|
81
|
+
},
|
82
|
+
users: {
|
83
|
+
collection: () => "users",
|
84
|
+
doc: (userId) => `users/${userId}`
|
85
|
+
},
|
86
|
+
vacancies: {
|
87
|
+
collection: () => "vacancies",
|
88
|
+
doc: (vacancyId) => `vacancies/${vacancyId}`
|
89
|
+
},
|
90
|
+
agents: {
|
91
|
+
collection: () => "agents",
|
92
|
+
doc: (agentId) => `agents/${agentId}`
|
93
|
+
},
|
94
|
+
clientData: {
|
95
|
+
collection: () => "clientData",
|
96
|
+
doc: (clientDataId) => `clientData/${clientDataId}`
|
97
|
+
},
|
98
|
+
clientLogins: {
|
99
|
+
collection: (userId) => `clientLogins/${userId}`,
|
100
|
+
doc: (userId, domain) => `clientLogins/${userId}/logins/${domain}`
|
101
|
+
},
|
102
|
+
gmailMessages: {
|
103
|
+
collection: (clientId) => `clientEmails/${clientId}/messages`,
|
104
|
+
doc: (clientId, messageId) => `clientEmails/${clientId}/messages/${messageId}`
|
105
|
+
}
|
93
106
|
};
|
94
107
|
export {
|
95
108
|
ApplicationQuestionTypeOptions,
|
96
109
|
ApplicationStatus,
|
97
110
|
ClientQuestionTypeOptions,
|
98
111
|
VacancyCategory,
|
99
|
-
|
112
|
+
firestorePaths
|
100
113
|
};
|
package/package.json
CHANGED