front/models/project.js
import { BaseModel } from './base'
import { Dataset } from './dataset'
import { Record } from 'immutable'
import axios from 'axios'
const ProjectRecord = Record({
id: 0,
datasetId: 0,
name: '',
algorithm: '',
dataset: null,
createdAt: '',
updatedAt: ''
})
const urlBase = '/api/projects'
export class Project extends BaseModel(ProjectRecord, urlBase, 'project') {
static create (datasetId, name, algorithm, progressCallback = () => {}) {
const config = { onUploadProgress: progressCallback }
const data = { dataset_id: datasetId, name: name, algorithm: algorithm }
return new Promise((resolve, reject) => {
axios.post('/api/projects', data, config)
.then((res) => {
const project = Project.fromResponse(res.data)
resolve(project)
return project
})
.catch((err) => reject(err))
})
}
static fromResponse (data) {
let dataset = null
if (data.dataset !== undefined && data.dataset !== null) {
dataset = Dataset.fromResponse(data.dataset)
}
const project = new Project({
id: data.id,
datasetId: data.dataset_id,
name: data.name,
algorithm: data.algorithm,
dataset: dataset,
createdAt: data.created_at,
updatedAt: data.updated_at
})
return project
}
toRequest () {
return {
id: this.id,
dataset_id: this.datasetId,
name: this.name
}
}
}