Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
mudeerapi.abasa.com
/
nodetest-backup30April26
/
src
/
scripts
/
Filename :
migration.tsx
back
Copy
import mongoose from 'mongoose'; import attendance from '../models/attendance.model.js'; import { getEventActivity } from '../controllers/eventActivity.controller.js'; import dotenv from 'dotenv'; import moment from 'moment'; dotenv.config(); // Connect to MongoDB mongoose.connect('mongodb+srv://farzam123:farzamfarzam@cluster0.6ep6k.mongodb.net/') .then(() => console.log('Connected to MongoDB')) .catch(err => console.error('MongoDB connection error:', err)); const migrateAttendanceData = async (userId) => { try { // Get all attendance records for the user (overwrite existing checkout/totalWorkingHours) const attendanceRecords = await attendance.find({ user_id: userId }); console.log(`Found ${attendanceRecords.length} attendance records to update for user ${userId}`); for (const record of attendanceRecords) { // Get the date of this attendance record in YYYY-MM-DD format (UTC) const attendanceDate = moment.utc(record.createdAt).format('YYYY-MM-DD'); // Create mock request and response objects for getEventActivity const mockReq = { params: { user_id: userId }, query: { startDay: attendanceDate, endDay: attendanceDate, shiftStatus: 'working' } }; const mockRes = { status: function(code) { this.statusCode = code; return this; }, json: function(data) { this.data = data; return this; }, statusCode: null, data: null }; // Call getEventActivity function await getEventActivity(mockReq, mockRes, () => {}); if (mockRes.statusCode === 200 && mockRes.data) { const eventActivityData: any = mockRes.data; if (eventActivityData.eventActivity && eventActivityData.eventActivity.length > 0) { const dayData = eventActivityData.eventActivity[0].data; if (dayData && dayData.length > 0) { // Get the last activity of the day (already sorted by getEventActivity) const lastActivity = dayData[dayData.length - 1]; // Use the last activity's createdAt as checkout time const checkOut = new Date(lastActivity.createdAt); // Use hoursPassed directly from the last activity (already in seconds) const totalWorkingHours = parseInt(lastActivity.hoursPassed) || 0; // Update the attendance record await attendance.findByIdAndUpdate( record._id, { checkOut: checkOut, totalWorkingHours: totalWorkingHours, updatedAt: new Date() } ); console.log(`Updated attendance record ${record._id}: Check-in: ${record.createdAt} Check-out: ${checkOut} Total Seconds: ${totalWorkingHours} `); } else { console.log(`No activity data found for attendance ${record._id} on ${attendanceDate}`); } } else { console.log(`No event activities found for attendance ${record._id} on ${attendanceDate}`); } } else { console.log(`Failed to fetch activities for ${attendanceDate}: ${mockRes.statusCode}`); } } console.log('Migration completed successfully'); } catch (error) { console.error('Migration error:', error); } finally { // Close MongoDB connection await mongoose.connection.close(); } }; // Usage: Pass the userId you want to migrate const targetUserId = "66fe7957e65b2a273afe80fe"; // Replace with actual user ID to test migrateAttendanceData(targetUserId);