Skip to content

Commit 5e1e4e9

Browse files
committed
[Easy Dev] Add a script to upload a partner from partners.json to firestore.
1 parent 5ecf841 commit 5e1e4e9

5 files changed

+58
-3
lines changed

docker-compose.override.yml

+3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ services:
4646
- ./server/tsconfig.json:/usr/app/tsconfig.json
4747
- ./server/public:/usr/app/public
4848
- ./server/src:/usr/app/src
49+
- ./server/upload_partner.ts:/usr/app/upload_partner.ts
50+
- ./credentials:/usr/app/credentials:ro
51+
- ./src/store/partners.json:/usr/app/partners.json
4952
server-test:
5053
volumes:
5154
- ./server/package.json:/usr/app/package.json

server/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ FROM base AS test
1313
RUN apt-get update -qqy && apt-get install -qqy jq openjdk-8-jdk-headless && \
1414
node_modules/.bin/firebase emulators:exec --only firestore 'echo "Emulator preloaded"'
1515

16-
COPY .eslintrc.json .eslintignore server/.firebaserc server/clean_dependencies.sh server/entrypoint.sh server/firebase.json server/firestore.indexes.json server/firestore.rules server/tsconfig.json ./
16+
COPY .eslintrc.json .eslintignore server/.firebaserc server/clean_dependencies.sh server/entrypoint.sh server/firebase.json server/firestore.indexes.json server/firestore.rules server/tsconfig.json server/upload_partner.ts src/store/partners.json ./
1717
COPY server/src src/
1818
COPY server/test test/
1919

server/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"deploy": "firebase deploy",
1111
"logs": "firebase functions:log",
1212
"predeploy": "npm run apidoc",
13-
"test": "firebase emulators:exec --only firestore 'mocha test/*.ts --require ts-node/register'"
13+
"test": "firebase emulators:exec --only firestore 'mocha test/*.ts --require ts-node/register'",
14+
"upload": "GOOGLE_APPLICATION_CREDENTIALS='./credentials/serviceAccountKey.json' ts-node upload_partner.ts"
1415
},
1516
"main": "lib/index.js",
1617
"dependencies": {

server/tsconfig.json

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
{
22
"compilerOptions": {
3+
"esModuleInterop": true,
34
"lib": ["es2019"],
45
"module": "commonjs",
56
"noImplicitReturns": true,
67
"noUnusedLocals": true,
78
"outDir": "lib",
9+
"resolveJsonModule": true,
810
"sourceMap": true,
911
"strict": true,
1012
"target": "es2017"
1113
},
1214
"compileOnSave": true,
1315
"include": [
14-
"src"
16+
"src",
17+
"upload_partner.ts"
1518
]
1619
}

server/upload_partner.ts

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/* A script to upload a partner info to firestore.
2+
*
3+
* First, get a service account key in https://console.firebase.google.com/u/0/project/ma-voie/settings/serviceaccounts/adminsdk
4+
* and save it as credentials/serviceAccountKey.json
5+
*
6+
* Then run `npm run upload -- partner-id`
7+
*
8+
* This will upload the partner with the given ID as a document in firestore in production.
9+
* The newly created document has its partnerId as ID.
10+
*
11+
* To upload to demo or dev, simply use a relevant serviceAccountKey.json.
12+
*/
13+
/* eslint-disable no-console */
14+
import admin from 'firebase-admin'
15+
16+
import partners from './partners.json'
17+
18+
const partnerId = process.argv[2]
19+
console.log(`Starting to upload ${partnerId}...`)
20+
if (!partnerId) {
21+
console.error('You must specify a partner to upload')
22+
// eslint-disable-next-line unicorn/no-process-exit
23+
process.exit(1)
24+
}
25+
26+
admin.initializeApp({
27+
credential: admin.credential.applicationDefault(),
28+
})
29+
30+
console.log('App initialized');
31+
32+
(async (): Promise<void> => {
33+
const partner = partners.find(({partnerId: pId}: {partnerId: string}) => pId === partnerId)
34+
if (!partner) {
35+
console.error(
36+
`Could not find a partner with ID ${partnerId}. Choose one from`,
37+
partners.map(({partnerId}) => partnerId),
38+
)
39+
return
40+
}
41+
const db = admin.firestore()
42+
try {
43+
await db.collection('staticPartners').doc(partnerId).set(partner)
44+
console.log(`Partner ${partnerId} has been uploaded to firestore.`)
45+
} catch (error) {
46+
console.error(`An error occurred while uploading partner ${partnerId}`, error)
47+
}
48+
})()

0 commit comments

Comments
 (0)