feat: fixes and formatter
This commit is contained in:
+64
-78
@@ -1,137 +1,123 @@
|
||||
const admin = require("firebase-admin");
|
||||
const { FieldValue } = require("firebase-admin/firestore");
|
||||
const {
|
||||
onDocumentDeleted,
|
||||
onDocumentCreated,
|
||||
} = require("firebase-functions/firestore");
|
||||
const { refList } = require("../index");
|
||||
const { ORDER_TYPES, createOrderDocument } = require("./helpers/orders");
|
||||
const { deleteFolder } = require("../helpers/firebase");
|
||||
const { Resend } = require("resend");
|
||||
const { welcomeTemplate } = require("../helpers/email");
|
||||
const { RESEND_API_KEY } = require("../config/keys");
|
||||
const { onRequest } = require("firebase-functions/https");
|
||||
const admin = require('firebase-admin')
|
||||
const { FieldValue } = require('firebase-admin/firestore')
|
||||
const { onDocumentDeleted, onDocumentCreated } = require('firebase-functions/firestore')
|
||||
const { refList } = require('../index')
|
||||
const { ORDER_TYPES, createOrderDocument } = require('./helpers/orders')
|
||||
const { deleteFolder } = require('../helpers/firebase')
|
||||
const { Resend } = require('resend')
|
||||
const { welcomeTemplate } = require('../helpers/email')
|
||||
const { RESEND_API_KEY } = require('../config/keys')
|
||||
const { onRequest } = require('firebase-functions/https')
|
||||
|
||||
const resendClient = new Resend(RESEND_API_KEY);
|
||||
const WELCOME_EMAIL_FROM =
|
||||
process.env.RESEND_FROM_EMAIL || "MusicLand <musicland@musicland.ai>";
|
||||
const WELCOME_EMAIL_SUBJECT = "Bienvenue sur MusicLand";
|
||||
const resendClient = new Resend(RESEND_API_KEY)
|
||||
const WELCOME_EMAIL_FROM = process.env.RESEND_FROM_EMAIL || 'MusicLand <musicland@musicland.ai>'
|
||||
const WELCOME_EMAIL_SUBJECT = 'Bienvenue sur MusicLand'
|
||||
|
||||
exports.testWelcomMail = onRequest(async (req, res) => {
|
||||
if (req.method !== "GET") {
|
||||
res.set("Allow", "GET");
|
||||
return res
|
||||
.status(405)
|
||||
.json({ success: false, error: "Method not allowed" });
|
||||
if (req.method !== 'GET') {
|
||||
res.set('Allow', 'GET')
|
||||
return res.status(405).json({ success: false, error: 'Method not allowed' })
|
||||
}
|
||||
try {
|
||||
const targetEmail = req.query.email || "tdtomthomas@gmail.com";
|
||||
const firstName = req.query.firstName || "Toto";
|
||||
const lastName = req.query.lastName || "Test";
|
||||
const targetEmail = req.query.email || 'tdtomthomas@gmail.com'
|
||||
const firstName = req.query.firstName || 'Toto'
|
||||
const lastName = req.query.lastName || 'Test'
|
||||
const { data, error } = await resendClient.emails.send({
|
||||
from: WELCOME_EMAIL_FROM,
|
||||
to: [targetEmail],
|
||||
subject: WELCOME_EMAIL_SUBJECT,
|
||||
html: welcomeTemplate({ firstName, lastName }),
|
||||
});
|
||||
})
|
||||
if (error) {
|
||||
console.log("Failed to send welcome email:", error);
|
||||
return res
|
||||
.status(500)
|
||||
.json({ success: false, error: error.message || error.toString() });
|
||||
console.log('Failed to send welcome email:', error)
|
||||
return res.status(500).json({ success: false, error: error.message || error.toString() })
|
||||
}
|
||||
console.log("Welcome email sent:", data);
|
||||
return res.status(200).json({ success: true, data });
|
||||
console.log('Welcome email sent:', data)
|
||||
return res.status(200).json({ success: true, data })
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
return res
|
||||
.status(500)
|
||||
.json({ success: false, error: e.message || e.toString() });
|
||||
console.log(e)
|
||||
return res.status(500).json({ success: false, error: e.message || e.toString() })
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
exports.onUserCreated = onDocumentCreated("users/{userID}", async (event) => {
|
||||
exports.onUserCreated = onDocumentCreated('users/{userID}', async (event) => {
|
||||
try {
|
||||
const {
|
||||
email = "",
|
||||
firstName = "",
|
||||
lastName = "",
|
||||
} = event?.data?.data() || {};
|
||||
const { email = '', firstName = '', lastName = '' } = event?.data?.data() || {}
|
||||
|
||||
const userId = event?.params?.userID;
|
||||
const userId = event?.params?.userID
|
||||
|
||||
try {
|
||||
await createOrderDocument({
|
||||
userId,
|
||||
type: ORDER_TYPES.GIFT,
|
||||
amount: 10,
|
||||
metadata: { reason: "WELCOME_BONUS" },
|
||||
metadata: { reason: 'WELCOME_BONUS' },
|
||||
orderId: `welcome_${userId}`,
|
||||
});
|
||||
})
|
||||
} catch (coinError) {
|
||||
console.warn(
|
||||
"[users-onUserCreated] Unable to grant welcome coins",
|
||||
'[users-onUserCreated] Unable to grant welcome coins',
|
||||
event?.params?.userID,
|
||||
coinError?.message || coinError,
|
||||
);
|
||||
coinError?.message || coinError
|
||||
)
|
||||
}
|
||||
if (email) {
|
||||
if (!resendClient) {
|
||||
console.warn("Resend API key not configured; skipping welcome email.");
|
||||
return;
|
||||
console.warn('Resend API key not configured; skipping welcome email.')
|
||||
return
|
||||
}
|
||||
try {
|
||||
console.log(`Sending welcome email to ${email}`);
|
||||
console.log(`Sending welcome email to ${email}`)
|
||||
const { data, error } = await resendClient.emails.send({
|
||||
from: WELCOME_EMAIL_FROM,
|
||||
to: [email],
|
||||
subject: WELCOME_EMAIL_SUBJECT,
|
||||
html: welcomeTemplate({ firstName, lastName }),
|
||||
});
|
||||
})
|
||||
if (error) {
|
||||
console.log("Failed to send welcome email:", error);
|
||||
return;
|
||||
console.log('Failed to send welcome email:', error)
|
||||
return
|
||||
}
|
||||
console.log("Welcome email sent:", data);
|
||||
console.log('Welcome email sent:', data)
|
||||
} catch (error) {
|
||||
console.log("Failed to send welcome email:", error);
|
||||
console.log('Failed to send welcome email:', error)
|
||||
}
|
||||
} else {
|
||||
throw new Error("User created with empty email");
|
||||
throw new Error('User created with empty email')
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.log(e)
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
exports.onUserDelete = onDocumentDeleted("users/{userID}", async (event) => {
|
||||
exports.onUserDelete = onDocumentDeleted('users/{userID}', async (event) => {
|
||||
try {
|
||||
const userID = event?.params?.userID;
|
||||
await clearAllUserData(userID);
|
||||
const userID = event?.params?.userID
|
||||
await clearAllUserData(userID)
|
||||
|
||||
await deleteFolder(`users/${userID}/`);
|
||||
await deleteFolder(`users/${userID}/`)
|
||||
|
||||
await admin.auth().deleteUser(userID);
|
||||
console.log(`User ${userID} deleted successfully`);
|
||||
await admin.auth().deleteUser(userID)
|
||||
console.log(`User ${userID} deleted successfully`)
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.log(e)
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
async function clearAllUserData(userID) {
|
||||
const deleteAll = async (ref, key, operator = "==") => {
|
||||
const snapshot = await ref.where(key, operator, userID).get();
|
||||
snapshot.forEach((item) => item.ref.delete());
|
||||
};
|
||||
const deleteAll = async (ref, key, operator = '==') => {
|
||||
const snapshot = await ref.where(key, operator, userID).get()
|
||||
snapshot.forEach((item) => item.ref.delete())
|
||||
}
|
||||
const removeFromArray = async (ref, arrayName) => {
|
||||
const snapshot = await ref.where(arrayName, "array-contains", userID).get();
|
||||
const snapshot = await ref.where(arrayName, 'array-contains', userID).get()
|
||||
snapshot.forEach((item) =>
|
||||
item.ref.update({
|
||||
[arrayName]: FieldValue.arrayRemove(userID),
|
||||
}),
|
||||
);
|
||||
};
|
||||
})
|
||||
)
|
||||
}
|
||||
|
||||
await deleteAll(refList.projects, "userId");
|
||||
await deleteAll(refList.playlists, "createdBy");
|
||||
await deleteAll(refList.projects, 'userId')
|
||||
await deleteAll(refList.playlists, 'createdBy')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user