Skip to content

Instantly share code, notes, and snippets.

@sangqle
Created January 15, 2019 07:18
Show Gist options
  • Save sangqle/0edd02db4c0d17486e9feed3e50eeb6f to your computer and use it in GitHub Desktop.
Save sangqle/0edd02db4c0d17486e9feed3e50eeb6f to your computer and use it in GitHub Desktop.
import { Document, model, Model, Schema, Mongoose } from 'mongoose'
import User from '../../user/models/user'
import Job from '../../jobs/models/job'
var JobStorageSchema: Schema = new Schema({
name: {
type: String
},
_idUser: {
type: Schema.Types.ObjectId,
required: true,
ref: User,
unique: true
},
jobStorage: {
type: Array,
items: {
type: Object,
properties: {
_idJob: {
type: Schema.Types.ObjectId,
required: true,
ref: Job,
index: true,
unique: true
},
saveAt: {
type: Number,
required: true
}
}
}
}
})
JobStorageSchema.methods.pushJobExist = async function(
_idJob: Schema.Types.ObjectId
): Promise<Object> {
if (
this.jobStorage.find(function(job: any) {
return job._idJob === _idJob
})
) {
return null
} else {
this.jobStorage.push({ _idJob, saveAt: new Date().getTime() })
let jobStorage = await this.save()
return jobStorage
}
}
JobStorageSchema.statics.pushJob = async function(
_idUser: Schema.Types.ObjectId,
_idJob: Schema.Types.ObjectId
): Promise<Object> {
let userSaved: any = await JobStorage.findOne({ _idUser })
if (!userSaved) {
return new JobStorage({
_idUser,
jobStorage: [
{
_idJob,
saveAt: new Date().getTime()
}
]
}).save()
} else {
return userSaved.pushJobExist(_idJob)
}
}
interface IJobStorageDocument extends Document {
_idUser: Schema.Types.ObjectId
jobStorage: Schema.Types.Array
pushJobExist(_idJob: Schema.Types.ObjectId): Promise<Object>
}
interface IJobStorageModel extends Model<IJobStorageDocument> {
pushJob: (
_idUser: Schema.Types.ObjectId,
_idJob: Schema.Types.ObjectId
) => Promise<Object>
}
var JobStorage: IJobStorageModel = model<IJobStorageDocument, IJobStorageModel>(
'JobStorage',
JobStorageSchema
)
export default JobStorage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment