Adding and displaying family members

This commit is contained in:
Milan Paunovic
2024-09-28 19:08:09 +02:00
parent 594e54b11b
commit 92f335543f
7 changed files with 189 additions and 149 deletions

View File

@ -4,31 +4,72 @@ const {getFirestore} = require("firebase-admin/firestore");
const admin = require("firebase-admin");
const logger = require("firebase-functions/logger");
admin.initializeApp();
try {
admin.initializeApp();
} catch (error) {
console.error(error)
}
exports.createSubUser = onRequest(async (request, response) => {
const authHeader = request.get('Authorization');
if (!authHeader || !authHeader.startsWith('Bearer ')) {
logger.warn("Missing or incorrect Authorization header", {authHeader});
response.status(401).json({error: 'Unauthorized'});
return;
}
try {
logger.info("Processing user creation", {requestBody: request.body.data});
const token = authHeader.split('Bearer ')[1];
logger.info("Verifying ID token", {token});
const {userType, name, email, password} = request.body.data;
if (!email || !password || !name || !userType) {
throw new Error("Missing required fields");
let decodedToken;
try {
decodedToken = await getAuth().verifyIdToken(token);
logger.info("ID token verified successfully", {uid: decodedToken.uid});
} catch (verifyError) {
logger.error("ID token verification failed", {error: verifyError.message});
response.status(401).json({error: 'Unauthorized: Invalid token'});
return;
}
const userRecord = await getAuth().createUser({
email, password, displayName: name,
});
logger.info("Processing user creation", {requestBody: request.body.data});
const {userType, firstName, lastName, email, password} = request.body.data;
if (!email || !password || !firstName || !lastName || !userType) {
logger.warn("Missing required fields in request body", {requestBody: request.body.data});
response.status(400).json({error: "Missing required fields"});
return;
}
let userRecord;
try {
userRecord = await getAuth().createUser({
email, password, displayName: `${firstName} ${lastName}`,
});
logger.info("User record created", {userId: userRecord.uid});
} catch (createUserError) {
logger.error("User creation failed", {error: createUserError.message});
response.status(500).json({error: "Failed to create user"});
return;
}
const userProfile = {
userType, name, email, uid: userRecord.uid,
userType, name: `${firstName} ${lastName}`, email, uid: userRecord.uid,
};
await getFirestore().collection("Profiles").doc(userRecord.uid).set(userProfile);
try {
await getFirestore().collection("Profiles").doc(userRecord.uid).set(userProfile);
logger.info("User profile saved to Firestore", {userId: userRecord.uid});
} catch (firestoreError) {
logger.error("Failed to save user profile to Firestore", {error: firestoreError.message});
response.status(500).json({error: "Failed to save user profile"});
return;
}
response.status(200).json({
data: {
message: "User created successfully", userId: userRecord.uid,
}
});