From 4768d2a744d8a5f32b251d4a2b0374be80e067df Mon Sep 17 00:00:00 2001 From: Jeffrey Ramos Date: Sat, 14 Nov 2020 18:20:18 -0500 Subject: [PATCH 1/5] added deletePosition --- functions/src/Controller/Elections.ts | 11 ++++++++++- functions/src/Models/Elections.ts | 2 +- functions/src/Services/Elections.ts | 15 +++++++++++++++ functions/src/index.ts | 1 + 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/functions/src/Controller/Elections.ts b/functions/src/Controller/Elections.ts index 4e98704..8e45749 100644 --- a/functions/src/Controller/Elections.ts +++ b/functions/src/Controller/Elections.ts @@ -1,7 +1,8 @@ import { electionsConverter } from '../Models/Elections'; import * as functions from 'firebase-functions'; import { db } from '../index'; -import { openElections } from '../Services/Elections'; +import { openElections, deletePosition } from '../Services/Elections'; +import { Position } from '../Models/Position'; export function getElectionsCollection() { return db.collection('elections').withConverter(electionsConverter); @@ -9,5 +10,13 @@ export function getElectionsCollection() { export const openElectionsController = functions.https.onRequest((request, response) => { openElections(); + response.status(200).send('Good Job'); +}); + +export const deletePositionController = functions.https.onRequest((request, response) => { + const position : Position = new Position(request.body); + + deletePosition(position); + response.status(200).send('Good Job'); }); \ No newline at end of file diff --git a/functions/src/Models/Elections.ts b/functions/src/Models/Elections.ts index 8477b55..d72f5c0 100644 --- a/functions/src/Models/Elections.ts +++ b/functions/src/Models/Elections.ts @@ -3,7 +3,7 @@ import firebase from 'firebase-admin'; export class Elections { votingOpen: boolean = false; applicationsOpen: boolean = false; - positions: Position[] = []; + positions: Object[] = []; constructor(elections: Partial = {}) { Object.assign(this, elections); diff --git a/functions/src/Services/Elections.ts b/functions/src/Services/Elections.ts index d131067..3c8e9e0 100644 --- a/functions/src/Services/Elections.ts +++ b/functions/src/Services/Elections.ts @@ -1,4 +1,6 @@ import { getElectionsCollection } from '../Controller/Elections'; +import { Position, positionConverter } from '../Models/Position'; +import { firestore } from 'firebase-admin'; export const openElections = () => { const electionsCollection = getElectionsCollection(); @@ -11,4 +13,17 @@ export const openElections = () => { }) .then(() => Promise.resolve()) .catch(error => Promise.reject(error)); +}; + +export const deletePosition = (position : Position) => { + const electionsCollection = getElectionsCollection(); + const convertedPosition = positionConverter.toFirestore(position); + + electionsCollection.get().then((QuerySnapshot) => { + (QuerySnapshot.docs[0]).ref.update({ positions: firestore.FieldValue.arrayRemove(convertedPosition) }) + .then(() => Promise.resolve()) + .catch(error => Promise.reject(error)); + }) + .then(() => Promise.resolve()) + .catch(error => Promise.reject(error)); }; \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index 8f24d74..15a12ec 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -44,3 +44,4 @@ export const editCommittee = committeeService.editCommitteeController; export const deleteCommittee = committeeService.deleteCommitteeController; export const changeDisplayOrder = committeeService.changeDisplayOrderController; export const openElections = electionsService.openElectionsController; +export const deletePosition = electionsService.deletePositionController; \ No newline at end of file From 65d57a720c6d2b66c05b6de716d06e849c16f6f9 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramos Date: Sat, 14 Nov 2020 19:01:44 -0500 Subject: [PATCH 2/5] moved Position functions to Position files --- functions/src/Controller/Elections.ts | 11 +--------- functions/src/Controller/Position.ts | 11 ++++++++++ functions/src/Models/Position.ts | 30 +++++++++++++-------------- functions/src/Services/Elections.ts | 15 -------------- functions/src/Services/Position.ts | 16 ++++++++++++++ functions/src/index.ts | 3 ++- 6 files changed, 45 insertions(+), 41 deletions(-) create mode 100644 functions/src/Controller/Position.ts create mode 100644 functions/src/Services/Position.ts diff --git a/functions/src/Controller/Elections.ts b/functions/src/Controller/Elections.ts index d661d1d..bee2799 100644 --- a/functions/src/Controller/Elections.ts +++ b/functions/src/Controller/Elections.ts @@ -1,8 +1,7 @@ import { electionsConverter } from '../Models/Elections'; import * as functions from 'firebase-functions'; import { db } from '../index'; -import { Position } from '../Models/Position'; -import { openElections, deletePosition } from '../Services/Elections'; +import { openElections } from '../Services/Elections'; import { closeElections } from '../Services/Elections'; export function getElectionsCollection() { @@ -16,13 +15,5 @@ export const closeElectionsController = functions.https.onRequest((request, resp export const openElectionsController = functions.https.onRequest((request, response) => { openElections(); - response.status(200).send('Good Job'); -}); - -export const deletePositionController = functions.https.onRequest((request, response) => { - const position : Position = new Position(request.body); - - deletePosition(position); - response.status(200).send('Good Job'); }); \ No newline at end of file diff --git a/functions/src/Controller/Position.ts b/functions/src/Controller/Position.ts new file mode 100644 index 0000000..3fbc242 --- /dev/null +++ b/functions/src/Controller/Position.ts @@ -0,0 +1,11 @@ +import * as functions from 'firebase-functions'; +import { Position } from '../Models/Position'; +import { deletePosition } from '../Services/Position'; + +export const deletePositionController = functions.https.onRequest((request, response) => { + const position : Position = new Position(request.body); + + deletePosition(position); + + response.status(200).send('Good Job'); +}); \ No newline at end of file diff --git a/functions/src/Models/Position.ts b/functions/src/Models/Position.ts index 9fb5892..023b37b 100644 --- a/functions/src/Models/Position.ts +++ b/functions/src/Models/Position.ts @@ -1,26 +1,26 @@ import firebase from 'firebase-admin'; export class Position { - title: string = ""; - level: number = 0; - description: string = ""; - candidates: object = {}; + title: string = ''; + level: number = 0; + description: string = ''; + candidates: object = {}; - constructor(position: Partial = {}) { - Object.assign(this, position); - } + constructor(position: Partial = {}) { + Object.assign(this, position); + } } export const positionConverter = { - toFirestore: function (position: Position): firebase.firestore.DocumentData { - const { title, level, description, candidates } = position; + toFirestore: function (position: Position): firebase.firestore.DocumentData { + const { title, level, description, candidates } = position; - return { title, level, description, candidates }; - }, + return { title, level, description, candidates }; + }, - fromFirestore: function (snapshot: firebase.firestore.DocumentData): Position { - const data = snapshot; + fromFirestore: function (snapshot: firebase.firestore.DocumentData): Position { + const data = snapshot; - return new Position(data); - } + return new Position(data); + } }; \ No newline at end of file diff --git a/functions/src/Services/Elections.ts b/functions/src/Services/Elections.ts index 24eac7c..e091d85 100644 --- a/functions/src/Services/Elections.ts +++ b/functions/src/Services/Elections.ts @@ -1,6 +1,4 @@ import { getElectionsCollection } from '../Controller/Elections'; -import { Position, positionConverter } from '../Models/Position'; -import { firestore } from 'firebase-admin'; export const closeElections = () => { const electionsCollection = getElectionsCollection(); @@ -26,17 +24,4 @@ export const openElections = () => { }) .then(() => Promise.resolve()) .catch(error => Promise.reject(error)); -}; - -export const deletePosition = (position : Position) => { - const electionsCollection = getElectionsCollection(); - const convertedPosition = positionConverter.toFirestore(position); - - electionsCollection.get().then((QuerySnapshot) => { - (QuerySnapshot.docs[0]).ref.update({ positions: firestore.FieldValue.arrayRemove(convertedPosition) }) - .then(() => Promise.resolve()) - .catch(error => Promise.reject(error)); - }) - .then(() => Promise.resolve()) - .catch(error => Promise.reject(error)); }; \ No newline at end of file diff --git a/functions/src/Services/Position.ts b/functions/src/Services/Position.ts new file mode 100644 index 0000000..19f97f6 --- /dev/null +++ b/functions/src/Services/Position.ts @@ -0,0 +1,16 @@ +import { getElectionsCollection } from '../Controller/Elections'; +import { Position, positionConverter } from '../Models/Position'; +import { firestore } from 'firebase-admin'; + +export const deletePosition = (position : Position) => { + const electionsCollection = getElectionsCollection(); + const convertedPosition = positionConverter.toFirestore(position); + + electionsCollection.get().then((QuerySnapshot) => { + (QuerySnapshot.docs[0]).ref.update({ positions: firestore.FieldValue.arrayRemove(convertedPosition) }) + .then(() => Promise.resolve()) + .catch(error => Promise.reject(error)); + }) + .then(() => Promise.resolve()) + .catch(error => Promise.reject(error)); +}; \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index 3d9b5d0..cf567d8 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -4,6 +4,7 @@ import * as eventService from './Controller/Event'; import * as memberService from './Controller/Member'; import * as committeeService from './Controller/Committee'; import * as electionsService from './Controller/Elections'; +import * as positionService from './Controller/Position'; const config = { apiKey: process.env.apiKey, @@ -45,4 +46,4 @@ export const deleteCommittee = committeeService.deleteCommitteeController; export const closeElections = electionsService.closeElectionsController; export const changeDisplayOrder = committeeService.changeDisplayOrderController; export const openElections = electionsService.openElectionsController; -export const deletePosition = electionsService.deletePositionController; \ No newline at end of file +export const deletePosition = positionService.deletePositionController; \ No newline at end of file From 248a7d639b1f1d3d526a925711f94c8bdcddaf99 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramos Date: Sat, 14 Nov 2020 21:10:38 -0500 Subject: [PATCH 3/5] removed positionConverter code --- functions/src/Services/Position.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/functions/src/Services/Position.ts b/functions/src/Services/Position.ts index 19f97f6..fba6ffb 100644 --- a/functions/src/Services/Position.ts +++ b/functions/src/Services/Position.ts @@ -1,13 +1,13 @@ import { getElectionsCollection } from '../Controller/Elections'; -import { Position, positionConverter } from '../Models/Position'; +import { Position } from '../Models/Position'; import { firestore } from 'firebase-admin'; export const deletePosition = (position : Position) => { const electionsCollection = getElectionsCollection(); - const convertedPosition = positionConverter.toFirestore(position); + const positionToRemove = firestore.FieldValue.arrayRemove({ ...position }); electionsCollection.get().then((QuerySnapshot) => { - (QuerySnapshot.docs[0]).ref.update({ positions: firestore.FieldValue.arrayRemove(convertedPosition) }) + (QuerySnapshot.docs[0]).ref.update({ positions: positionToRemove }) .then(() => Promise.resolve()) .catch(error => Promise.reject(error)); }) From 4882a98e3106c75a6428135194eefaac0b0a7a73 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramos Date: Sat, 14 Nov 2020 21:25:06 -0500 Subject: [PATCH 4/5] added applicationsOpen check --- firebase.json | 4 ++-- functions/src/Services/Position.ts | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/firebase.json b/firebase.json index 2064227..45cfcb1 100644 --- a/firebase.json +++ b/firebase.json @@ -14,10 +14,10 @@ "port": 5001 }, "firestore": { - "port": 8080 + "port": 8083 }, "database": { - "port": 9000 + "port": 9005 }, "ui": { "enabled": true diff --git a/functions/src/Services/Position.ts b/functions/src/Services/Position.ts index fba6ffb..10e28e6 100644 --- a/functions/src/Services/Position.ts +++ b/functions/src/Services/Position.ts @@ -7,9 +7,11 @@ export const deletePosition = (position : Position) => { const positionToRemove = firestore.FieldValue.arrayRemove({ ...position }); electionsCollection.get().then((QuerySnapshot) => { - (QuerySnapshot.docs[0]).ref.update({ positions: positionToRemove }) - .then(() => Promise.resolve()) - .catch(error => Promise.reject(error)); + if (QuerySnapshot.docs[0].data().applicationsOpen == true) { + (QuerySnapshot.docs[0]).ref.update({ positions: positionToRemove }) + .then(() => Promise.resolve()) + .catch(error => Promise.reject(error)); + } }) .then(() => Promise.resolve()) .catch(error => Promise.reject(error)); From 465661e97468a1a5f4beb600e1f9397c9d6ba317 Mon Sep 17 00:00:00 2001 From: Jeffrey Ramos Date: Sun, 15 Nov 2020 00:36:51 -0500 Subject: [PATCH 5/5] reverted firebase.json --- firebase.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firebase.json b/firebase.json index 45cfcb1..2064227 100644 --- a/firebase.json +++ b/firebase.json @@ -14,10 +14,10 @@ "port": 5001 }, "firestore": { - "port": 8083 + "port": 8080 }, "database": { - "port": 9005 + "port": 9000 }, "ui": { "enabled": true