va-tracker-middleware/src/models/vaModel.js

243 lines
5.1 KiB
JavaScript

import mongoose from "mongoose";
const { Schema, model, Types } = mongoose;
/* ---------------------- User Details Schema ---------------------- */
const userDetailsSchema = new Schema({
firstName: {
type: String,
},
lastName: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
dob: {
type: String,
},
age: {
type: String,
},
address: {
type: String,
},
password: {
type: String,
},
bankName: {
type: String,
},
accountHolderName: {
type: String,
},
accountNumber: {
type: String,
},
routingNumber: {
type: String,
},
});
/* ---------------------- Tracking Schema ---------------------- */
const trackingSchema = new Schema({
type: {
type: String,
enum: ["SCREENSHOT", "VIDEO"],
default: "SCREENSHOT",
},
duration: {
type: String,
default: "5M",
},
});
/* ---------------------- Project Schema ---------------------- */
const projectSchema = new Schema({
name: {
type: String,
required: true,
},
totalLoggedHours: {
type: Number,
default: 0
},
vaAssigned: [
{
type: Types.ObjectId,
ref: "VA",
},
],
});
/* ---------------------- Client Details Schema ---------------------- */
const clientDetailsSchema = new Schema({
name: {
type: String,
},
email: {
type: String,
required: true,
unique: true,
},
dob: {
type: String,
},
bankName: {
type: String,
},
accountHolderName: {
type: String,
},
accountNumber: {
type: String,
},
routingNumber: {
type: String,
},
});
/* ---------------------- Client Schema ---------------------- */
const clientSchema = new Schema({
userDetails: clientDetailsSchema,
vaIds: [
{
type: Types.ObjectId,
ref: "VA",
},
],
projectIds: [
{
type: Types.ObjectId,
ref: "Project",
},
],
accessToken: {
type: String,
default: null
},
refreshToken: {
type: String,
default: null
}
});
/* ---------------------- logged Schema ---------------------- */
const loggedSchema = new Schema({
loggedType: {
type: String,
enum: ["LOGIN", "LOGOUT"],
default: "LOGIN"
},
time: {
type: Date,
default: Date.now
},
vaId: {
type: Types.ObjectId,
ref: "VA"
},
vaEmail: {
type: String,
required: true
},
projectId: {
type: Types.ObjectId,
ref: "Project"
}
})
/* ---------------------- VA Schema ---------------------- */
const vaSchema = new Schema(
{
userDetails: userDetailsSchema,
tracking: trackingSchema,
clientIds: [
{
type: Types.ObjectId,
ref: "Client",
},
],
projectIds: [
{
type: Types.ObjectId,
ref: "Project",
},
],
schedule: {
type: String,
},
status: {
type: String,
enum: ["PARTTIME", "FULLTIME", "INACTIVE"],
default: "FULLTIME",
},
accessToken: {
type: String,
default: null
},
refreshToken: {
type: String,
default: null
}
},
{ timestamps: true }
);
// Need to add working hours and time zone tooooo in which VA is going to work, need to calculate total work hours of the day - Schedules
// Need to add this Schedule feature on SF there we can change the schedulte of VA - Add in form tooo
// Need to ask to client if we want to provide schedule changing functionality on Docker toooooo
// Add working on Tabs Datils - like which tabs VA is working on while working on project - Tab Model
// Add activity level of VA while working on project - Activity Model
const vaWorkTrackSchema = new Schema({
vaId: {
type: Types.ObjectId,
ref: "VA",
},
projectId: {
type: Types.ObjectId,
ref: "Project",
},
logId: {
type: String,
ref: "Logged",
},
title: {
type: String,
},
appName: {
type: String,
},
from: {
type: Date,
default: Date.now,
},
to: {
type: Date,
default: Date.now,
},
totalTime: {
type: Number,
default: 0,
},
},
{ timestamps: true }
)
/* ---------------------- Model Exports ---------------------- */
const VAModel = model("VA", vaSchema);
const ClientModel = model("Client", clientSchema);
const ProjectModel = model("Project", projectSchema);
const LoggedModel = model("TrackLog", loggedSchema);
const WorkTrackModel = model("TrackWork", vaWorkTrackSchema);
export { VAModel, ClientModel, ProjectModel, LoggedModel, WorkTrackModel };