feature/IO-3255-simplified-parts-management -Cleanup / Docblocks

This commit is contained in:
Dave Richer
2025-07-07 13:19:19 -04:00
parent c71026f22a
commit 91cc12873e
3 changed files with 88 additions and 6 deletions

View File

@@ -10,6 +10,11 @@ const {
CREATE_USER
} = require("../partsManagement.queries");
/**
* Checks if the required fields are present in the payload.
* @param payload
* @param fields
*/
const requireFields = (payload, fields) => {
for (const field of fields) {
if (!payload[field]) {
@@ -18,6 +23,11 @@ const requireFields = (payload, fields) => {
}
};
/**
* Ensures that the provided email is not already registered in Firebase.
* @param email
* @returns {Promise<void>}
*/
const ensureEmailNotRegistered = async (email) => {
try {
await admin.auth().getUserByEmail(email);
@@ -29,20 +39,41 @@ const ensureEmailNotRegistered = async (email) => {
}
};
/**
* Creates a new Firebase user with the given email and optional password.
* @param email
* @param password
* @returns {Promise<UserRecord>}
*/
const createFirebaseUser = async (email, password = null) => {
const userData = { email };
if (password) userData.password = password;
return admin.auth().createUser(userData);
};
/**
* Deletes a Firebase user by UID.
* @param uid
* @returns {Promise<void>}
*/
const deleteFirebaseUser = async (uid) => {
return admin.auth().deleteUser(uid);
};
/**
* Generates a password reset link for the given email.
* @param email
* @returns {Promise<string>}
*/
const generateResetLink = async (email) => {
return admin.auth().generatePasswordResetLink(email);
};
/**
* Ensures that the provided external shop ID is unique.
* @param externalId
* @returns {Promise<void>}
*/
const ensureExternalIdUnique = async (externalId) => {
const resp = await client.request(CHECK_EXTERNAL_SHOP_ID, { key: externalId });
if (resp.bodyshops.length) {
@@ -50,19 +81,41 @@ const ensureExternalIdUnique = async (externalId) => {
}
};
/**
* Inserts a new bodyshop into the database.
* @param input
* @returns {Promise<*>}
*/
const insertBodyshop = async (input) => {
const resp = await client.request(CREATE_SHOP, { bs: input });
return resp.insert_bodyshops_one.id;
};
/**
* Deletes all vendors associated with a shop.
* @param shopId
* @returns {Promise<void>}
*/
const deleteVendorsByShop = async (shopId) => {
await client.request(DELETE_VENDORS_BY_SHOP, { shopId });
};
/**
* Deletes a bodyshop from the database.
* @param shopId
* @returns {Promise<void>}
*/
const deleteBodyshop = async (shopId) => {
await client.request(DELETE_SHOP, { id: shopId });
};
/**
* Inserts a new user association into the database.
* @param uid
* @param email
* @param shopId
* @returns {Promise<*>}
*/
const insertUserAssociation = async (uid, email, shopId) => {
const vars = {
u: {
@@ -78,6 +131,12 @@ const insertUserAssociation = async (uid, email, shopId) => {
return resp.insert_users_one;
};
/**
* Handles provisioning a new shop for parts management.
* @param req
* @param res
* @returns {Promise<*>}
*/
const partsManagementProvisioning = async (req, res) => {
const { logger } = req;
const p = { ...req.body, userEmail: req.body.userEmail?.toLowerCase() };