import AppError from "../../errors/AppError"; import UserOnlineTime from "../../models/UserOnlineTime"; import { splitDateTime } from "../../helpers/SplitDateTime"; import { Op, Sequelize } from "sequelize"; import { addHours, addMinutes, addSeconds, intervalToDuration, add } from "date-fns"; import format from 'date-fns/format'; import ptBR from 'date-fns/locale/pt-BR'; import { stat } from "fs"; interface Request { userId: string | number, status: string, } const CreateOrUpdateUserOnlineTime = async ({ userId, status, }: Request): Promise => { let userOnlineTime = null; // let dateTime = splitDateTime(new Date(new Date() + 'UTC')) let dateTime = splitDateTime(new Date(format(new Date(), 'yyyy-MM-dd HH:mm:ss', { locale: ptBR }) )) userOnlineTime = await UserOnlineTime.findOne({ where: { [Op.and]: [ { userId: userId }, { "$createdAt$": Sequelize.where(Sequelize.fn("date", Sequelize.col("createdAt")), `${dateTime.fullDate}`) }, ] } }); if(userOnlineTime){ try{ if(status === 'offline'){ //updatedAt let newtTime = intervalToDuration({ start: userOnlineTime.updatedAt, end: new Date()}) console.log('TESTANDO INTERVAL DURATION: ', newtTime) console.log('hours: ', newtTime.hours, ' | minutes: ', newtTime.minutes, ' | seconds: ', newtTime.seconds) let onlineTime = new Date() onlineTime.setUTCHours(userOnlineTime.onlineTime.getHours()) onlineTime.setUTCMinutes(userOnlineTime.onlineTime.getMinutes()) onlineTime.setUTCSeconds(userOnlineTime.onlineTime.getSeconds()) console.log('userOnlineTime.onlineTime: ',userOnlineTime.onlineTime) console.log('userOnlineTime.onlineTime.getHours(): ',userOnlineTime.onlineTime.getHours()) console.log('userOnlineTime.onlineTime.getMinutes(): ',userOnlineTime.onlineTime.getMinutes()) console.log('userOnlineTime.onlineTime.getSeconds(): ',userOnlineTime.onlineTime.getSeconds()) console.log('online time 3: ', onlineTime) if(newtTime.hours && +newtTime.hours > 0){ onlineTime = addHours(onlineTime, newtTime.hours) } if(newtTime.minutes && +newtTime.minutes > 0){ onlineTime = addMinutes(onlineTime,newtTime.minutes) } if(newtTime.seconds && +newtTime.seconds > 0){ onlineTime = addSeconds(onlineTime, newtTime.seconds) } console.log('online time 4: ', onlineTime) const isoDate = new Date(onlineTime); const mySQLDateString = isoDate.toJSON().slice(0, 19).replace('T', ' '); console.log('mySQLDateString: ', mySQLDateString) await userOnlineTime.update({ status, onlineTime: mySQLDateString }) } else if(status === 'online'){ await userOnlineTime.update({ status }) } }catch(err){ throw new AppError("ERR_NO_USER_ONLINE_FOUND", 404); } } if(!userOnlineTime){ userOnlineTime = await UserOnlineTime.create( { userId, status, onlineTime: `${dateTime.fullDate} 00:00:00` }) } return userOnlineTime } export default CreateOrUpdateUserOnlineTime