Created
January 15, 2019 07:18
-
-
Save sangqle/0edd02db4c0d17486e9feed3e50eeb6f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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