installation team member upload profile

master^2
Bhaskar 3 weeks ago
parent 1936c42c71
commit 9295367025

@ -7,7 +7,7 @@ const createConnectionController = require("./controllers/createConnectionContro
const storeController = require("./controllers/storeController.js")
const boom = require("boom");
const bcrypt = require('bcrypt');
const { ProfilePictureStore,generateinstallationId,Store, Survey, PlumbingWorkPictures, ElectrictyWorkPictures, MaterialRecievedPictures, Support, ManualTestVideo} = require("./models/store");
const { ProfilePictureStore,generateinstallationId,Store, Survey, PlumbingWorkPictures, ElectrictyWorkPictures, MaterialRecievedPictures, Support, ManualTestVideo, ProfilePictureInstallTeamMember} = require("./models/store");
const cors = require('fastify-cors');
@ -1232,6 +1232,102 @@ fastify.post('/api/uploads_company_profile/:customerId', async (request, reply)
}
});
fastify.post("/api/uploads_installation_TeamMember_profile/:installationId/:teamMemberId", {
preHandler: upload.single("file"),
}, async (request, reply) => {
try {
const { installationId ,teamMemberId} = request.params;
//const teamMemberId = request.body?.teamMemberId; // OPTIONAL
const file = request.file;
if (!file) {
return reply.code(400).send({ error: "No file uploaded (field name 'file')." });
}
// Validate image type
const allowed = ["image/jpeg", "image/jpg", "image/png"];
if (!allowed.includes(file.mimetype)) {
return reply.code(400).send({ error: "Only JPEG/PNG images are allowed." });
}
// Build GCS path
const ext = (mime.extension(file.mimetype) || path.extname(file.originalname).slice(1) || "png").toLowerCase();
const safeBase = path.parse(file.originalname).name.replace(/[^\w.-]/g, "_");
const filePath = `arminta_team_profiles/${safeBase}-${Date.now()}.${ext}`;
const bucketName = "arminta_profile_pictures";
// Upload
const buffer = await fs.promises.readFile(file.path);
const bucket = storage.bucket(bucketName);
const gcsFile = bucket.file(filePath);
await gcsFile.save(buffer, {
resumable: false,
public: true,
contentType: file.mimetype,
metadata: { cacheControl: "public, max-age=31536000" },
});
await gcsFile.makePublic();
const publicUrl = `https://storage.googleapis.com/${bucketName}/${filePath}`;
// Always upsert the installation-level picture doc
await ProfilePictureInstall.findOneAndUpdate(
{ installationId },
{ picture: publicUrl },
{ new: true, upsert: true }
);
// Update department picture where departmentId === installationId
const deptUpdate = await Deparments.findOneAndUpdate(
{ departmentId: installationId },
{ picture: publicUrl },
{ new: true }
);
let teamMemberUpdated = false;
if (teamMemberId) {
// 1) Upsert team-member picture collection
await ProfilePictureInstallTeamMember.findOneAndUpdate(
{ teamMemberId },
{ picture: publicUrl },
{ new: true, upsert: true }
);
// 2) Update nested item inside Installations.team_member.team_member[]
// Using arrayFilters to match the correct team member element
const res = await Install.updateOne(
{ installationId },
{
$set: {
"team_member.team_member.$[tm].picture": publicUrl
}
},
{
arrayFilters: [{ "tm.teamMemberId": teamMemberId }]
}
);
teamMemberUpdated = res.modifiedCount > 0;
}
return reply.send({
installationId,
teamMemberId: teamMemberId || null,
picture: publicUrl,
departmentUpdated: Boolean(deptUpdate),
teamMemberUpdated,
message: teamMemberId
? (teamMemberUpdated
? "Upload successful. Installation + team member picture updated."
: "Upload successful. Team member not found under this installation.")
: "Upload successful. Installation picture updated.",
});
} catch (err) {
request.log.error(err);
return reply.code(500).send({ error: "Upload failed", details: err.message });
} finally {
try { if (request.file?.path) await fs.promises.unlink(request.file.path); } catch {}
}
});
fastify.post('/api/uploads/:supplierId', async (request, reply) => {
try {

Loading…
Cancel
Save