diff --git a/client/src/pages/FroshRetreat/FroshRetreat.jsx b/client/src/pages/FroshRetreat/FroshRetreat.jsx
index 8c68afa7..653665ed 100644
--- a/client/src/pages/FroshRetreat/FroshRetreat.jsx
+++ b/client/src/pages/FroshRetreat/FroshRetreat.jsx
@@ -131,12 +131,11 @@ const retreatFAQs = [
],
},
{
- title:
- 'What time does the bus leave?',
+ title: 'What time does the bus leave?',
description: [
'The bus leaves from campus at 11:00am on August 31st and returns to campus at 1:00pm on September 1st.',
],
- }
+ },
];
const FroshRetreatFAQ = () => {
@@ -155,9 +154,7 @@ const FroshRetreatFAQ = () => {
}}
>
-
- FAQS: PREPARE FOR A GOOD TIME DOWN ON THE FARM!
-
+ FAQS: PREPARE FOR A GOOD TIME DOWN ON THE FARM!
{retreatFAQs.map((item, index) => {
const [isOpen, setIsOpen] = useState(false);
return (
@@ -219,6 +216,7 @@ const RetreatRegistration = () => {
const { setSnackbar } = useContext(SnackbarContext);
const { axios } = useAxios();
const isRetreat = user?.isRetreat === true;
+ console.log(isRetreat);
const isWaiverUploaded = user?.waiver?.filename !== undefined;
const [file, setFile] = useState(null);
diff --git a/server/src/models/UserModel.js b/server/src/models/UserModel.js
index 55966371..3ef2853b 100644
--- a/server/src/models/UserModel.js
+++ b/server/src/models/UserModel.js
@@ -5,6 +5,36 @@ const validateName = function (name) {
return !(name === '' || name === null || name === undefined);
};
+const paymentSchema = new mongoose.Schema({
+ item: {
+ type: String,
+ required: true,
+ },
+ paymentIntent: {
+ type: String,
+ required: true,
+ },
+ amountDue: {
+ type: Number,
+ required: true,
+ },
+ bursaryRequested: {
+ type: Boolean,
+ required: true,
+ default: false,
+ },
+ bursaryApproved: {
+ type: Boolean,
+ required: true,
+ default: false,
+ },
+ expired: {
+ type: Boolean,
+ required: true,
+ default: false,
+ },
+});
+
const UserSchema = new mongoose.Schema(
{
firstName: {
@@ -104,6 +134,7 @@ const UserSchema = new mongoose.Schema(
required: true,
default: false,
},
+ payments: [paymentSchema],
phoneNumberCountryCode: {
type: String,
required: false,
@@ -154,9 +185,9 @@ const UserSchema = new mongoose.Schema(
data: Buffer,
},
isRetreat: {
- // used for F!rosh that paid for retreat
type: Boolean,
required: false,
+ // default: false,
},
},
{ discriminatorKey: 'userType' },
diff --git a/server/src/services/FroshServices.js b/server/src/services/FroshServices.js
index ce32c20b..178881bc 100644
--- a/server/src/services/FroshServices.js
+++ b/server/src/services/FroshServices.js
@@ -65,46 +65,46 @@ const FroshServices = {
* @returns {User} updated user
*/
async addRetreatPayment(user, paymentIntent) {
- try {
- const updatedUser = await UserModel.findByIdAndUpdate(user.id, {
- $push: {
- payments: [
- {
- item: 'Retreat Ticket',
- paymentIntent: paymentIntent.toString(),
- amountDue: 9500,
- },
- ],
- },
- }, { new: true});
+ // try {
+ // const updatedUser = await UserModel.findByIdAndUpdate(user.id, {
+ // $push: {
+ // payments: [
+ // {
+ // item: 'Retreat Ticket',
+ // paymentIntent: paymentIntent.toString(),
+ // amountDue: 10300,
+ // },
+ // ],
+ // },
+ // }, { new: true});
- if (!updatedUser){
- throw new Error('user not found');
- }
+ // if (!updatedUser){
+ // throw new Error('user not found');
+ // }
- return updatedUser;
+ // return updatedUser;
- } catch (error) {
- throw new Error('UNABLE_TO_ADD_PAYMENT', { cause: error });
- }
+ // } catch (error) {
+ // throw new Error('UNABLE_TO_ADD_PAYMENT', { cause: error });
+ // }
+ // },
+ return UserModel.findByIdAndUpdate(user.id, {
+ $push: {
+ payments: [
+ {
+ item: 'Retreat Ticket',
+ paymentIntent: paymentIntent.toString(),
+ amountDue: 10300,
+ },
+ ],
+ },
+ }).then(
+ (user) => user,
+ (error) => {
+ throw new Error('UNABLE_TO_ADD_PAYMENT', { cause: error });
+ },
+ );
},
- // return FroshModel.findByIdAndUpdate(user.id, {
- // $push: {
- // payments: [
- // {
- // item: 'Retreat Ticket',
- // paymentIntent: paymentIntent.toString(),
- // amountDue: 9500,
- // },
- // ],
- // },
- // }).then(
- // (frosh) => frosh,
- // (error) => {
- // throw new Error('UNABLE_TO_ADD_PAYMENT', { cause: error });
- // },
- // );
- // },
/**
* @description Gets the frosh info from ID.
diff --git a/server/src/services/PaymentServices.js b/server/src/services/PaymentServices.js
index e4f1d3e0..96fd9608 100644
--- a/server/src/services/PaymentServices.js
+++ b/server/src/services/PaymentServices.js
@@ -2,6 +2,7 @@ const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const FroshModel = require('../models/FroshModel');
const FroshGroupModel = require('../models/FroshGroupModel');
+const UserModel = require('../models/UserModel');
const PaymentServices = {
/**
@@ -27,52 +28,85 @@ const PaymentServices = {
* @return {Promise> & Omit & {_id: Omit["_id"]}, Document> & Omit & {_id: Omit["_id"]}, {}, Omit>>}
*/
async updatePayment(paymentId, amountReceived) {
- const frosh = await FroshModel.findOne({ 'payments.paymentIntent': paymentId }).then(
- (frosh) => {
- if (!frosh) throw new Error('FROSH_NOT_FOUND');
- return frosh;
- },
+ let user;
+
+ const frosh = await FroshModel.findOne({ 'payments.paymentIntent': paymentId }).catch(
(error) => {
throw new Error('UNABLE_TO_FIND_FROSH', { cause: error });
},
);
- frosh.set({ authScopes: { requested: [], approved: [] } });
- const idx = frosh.payments.findIndex((p) => p.paymentIntent === paymentId);
- frosh.payments[idx].amountDue = frosh.payments[idx].amountDue - amountReceived;
- if (frosh.payments[idx].item === 'Orientation Ticket') {
- frosh.set({ isRegistered: true });
- await frosh.save({ validateModifiedOnly: true }).then(
- (frosh) => frosh,
- (error) => {
+ console.log();
+
+ if (!frosh) {
+ console.log(`Cant not in frosh model`);
+ user = await UserModel.findOne({ 'payments.paymentIntent': paymentId }).catch((error) => {
+ throw new Error('UNABLE_TO_FIND_USER', { cause: error });
+ });
+
+ if (!user) {
+ throw new Error('PAYMENT_NOT_FOUND');
+ }
+ }
+
+ //if found in FroshModel
+ if (frosh) {
+ console.log(`found in frosh model`);
+ const idx = frosh.payments.findIndex((p) => p.paymentIntent === paymentId);
+ frosh.payments[idx].amountDue -= amountReceived;
+
+ if (frosh.payments[idx].item === 'Orientation Ticket') {
+ frosh.set({ isRegistered: true });
+ await frosh.save({ validateModifiedOnly: true }).catch((error) => {
throw new Error('UNABLE_TO_UPDATE_FROSH', { cause: error });
- },
- );
- console.log('Frosh payment completed! Frosh info: ', frosh);
- return FroshGroupModel.findOneAndUpdate(
- { name: frosh.froshGroup },
- { $inc: { totalNum: 1 } },
- { new: true },
- ).then(
- (doc) => {
- if (!doc) console.log(new Error('FROSH_GROUP_NOT_FOUND'));
- else console.log(`Group ${doc.name} total: ${doc.totalNum}`);
- return frosh;
- },
- (error) => {
- console.log(new Error('UNABLE_TO_UPDATE_FROSH_GROUP', { cause: error }));
- return frosh;
- },
- );
- } else if (frosh.payments[idx].item === 'Retreat Ticket') {
- frosh.set({ isRetreat: true });
- return frosh.save({ validateModifiedOnly: true }).then(
- (frosh) => frosh,
- (error) => {
+ });
+
+ console.log(`Frosh payment completed! Frosh info: `, frosh);
+ return FroshGroupModel.findOneAndUpdate(
+ { name: frosh.froshGroup },
+ { $inc: { totalNum: 1 } },
+ { new: true },
+ ).then(
+ (doc) => {
+ if (!doc) console.log(new Error('FROSH_GROUP_NOT_FOUND'));
+ else console.log(`Group ${doc.name} total: ${doc.totalNum}`);
+ return frosh;
+ },
+ (error) => {
+ console.log(new Error('UNABLE_TO_UPDATE_FROSH_GROUP', { cause: error }));
+ return frosh;
+ },
+ );
+ } else if (frosh.payments[idx].item === 'Retreat Ticket') {
+ console.log(`frosh payment type is retreat ticket`);
+ frosh.set({ isRetreat: true });
+ await frosh.save({ validateModifiedOnly: true }).catch((error) => {
throw new Error('UNABLE_TO_UPDATE_FROSH', { cause: error });
- },
- );
- } else {
- throw new Error('UNABLE_TO_UPDATE_FROSH', { cause: new Error('INVALID_PAYMENT_ITEM') });
+ });
+
+ console.log('Frosh retreat payment completed! Frosh info: ', frosh);
+ return frosh;
+ } else {
+ throw new Error('INVALID_PAYMENT_ITEM');
+ }
+ }
+
+ // If found in UserModel
+ if (user) {
+ const idx = user.payments.findIndex((p) => p.paymentIntent === paymentId);
+ user.payments[idx].amountDue -= amountReceived;
+
+ if (user.payments[idx].item === 'Retreat Ticket') {
+ console.log(`frosh payment type is retreat ticket`);
+ user.set({ isRetreat: true });
+ await user.save({ validateModifiedOnly: true }).catch((error) => {
+ throw new Error('UNABLE_TO_UPDATE_USER', { cause: error });
+ });
+
+ console.log(`User retreat payment completed! User info: `, user);
+ return user;
+ } else {
+ throw new Error('INVALID_PAYMENT_ITEM');
+ }
}
},
@@ -173,7 +207,7 @@ const PaymentServices = {
const frosh = await FroshModel.findOne({ 'payments.paymentIntent': paymentIntent }).then(
(frosh) => {
if (!frosh) {
- throw new Error('FROSH_NOT_FOUND');
+ throw new Error('PAYMENT_NOT_FOUND');
}
return frosh;
},
diff --git a/server/test/services/FroshServices.test.js b/server/test/services/FroshServices.test.js
index 8afcfb3d..f28cd331 100644
--- a/server/test/services/FroshServices.test.js
+++ b/server/test/services/FroshServices.test.js
@@ -151,7 +151,7 @@ describe('FroshServices', () => {
assert(frosh.firstName === 'TestButUpdated');
});
- it('.updateFroshInfo(userId, updateInfo)\t\t\t|\tUpdating Frosh Information (INVALID USER ID)', async () => {
+ it('.updateFroshInfo(userId, updateInfo)\t\t\t|\tUpdating Frosh Information (UNABLE_TO_UPDATE_FROSH)', async () => {
await assert.rejects(FroshServices.updateFroshInfo('999999', updateInfo), {
name: 'Error',
message: 'UNABLE_TO_UPDATE_FROSH',
diff --git a/server/test/services/PaymentServices.test.js b/server/test/services/PaymentServices.test.js
index 597bdefe..82e4bf92 100644
--- a/server/test/services/PaymentServices.test.js
+++ b/server/test/services/PaymentServices.test.js
@@ -103,10 +103,10 @@ describe('PaymentServices', () => {
assert.equal(updatedFrosh.isRetreat, true);
});
- it('.updatePayment(...)\t|\tUpdating a payment (FROSH_NOT_FOUND)', async () => {
+ it('.updatePayment(...)\t|\tUpdating a payment (PAYMENT_NOT_FOUND)', async () => {
await assert.rejects(PaymentServices.updatePayment('123452131326', 123), {
name: 'Error',
- message: 'FROSH_NOT_FOUND',
+ message: 'PAYMENT_NOT_FOUND',
});
});
@@ -148,7 +148,7 @@ describe('PaymentServices', () => {
assert.equal(updatedFrosh.isRegistered, true);
});
- it('.updatePayment(...)\t|\tUpdating a payment (UNABLE_TO_UPDATE_FROSH)', async () => {
+ it('.updatePayment(...)\t|\tUpdating a payment (INVALID_PAYMENT_ITEM)', async () => {
await FroshModel.create({
scuntPreferredMembers: [1, 2, 3],
hashedPassword: 'test',
@@ -184,7 +184,7 @@ describe('PaymentServices', () => {
});
await assert.rejects(PaymentServices.updatePayment('test2', 123), {
name: 'Error',
- message: 'UNABLE_TO_UPDATE_FROSH',
+ message: 'INVALID_PAYMENT_ITEM',
});
});
@@ -303,10 +303,10 @@ describe('PaymentServices', () => {
assert.equal(updatedFrosh.payments[0].expired, true);
});
- it('.expirePayment(...)\t|\tExpiring a payment (FROSH_NOT_FOUND)', async () => {
+ it('.expirePayment(...)\t|\tExpiring a payment (PAYMENT_NOT_FOUND)', async () => {
await assert.rejects(PaymentServices.expirePayment('none existent'), {
name: 'Error',
- message: 'FROSH_NOT_FOUND',
+ message: 'PAYMENT_NOT_FOUND',
});
});
});