wmj-test/src/model/project_model.go

109 lines
2.2 KiB
Go

package model
import (
k8s_manager "k8s-manager/src"
"k8s-manager/src/utils"
"time"
)
type ProjectModel struct {
BaseModel[ProjectModel]
ProjectName string
UserName string
GroupName string
Type string
Comment string
Doc string
IsPublished bool
ImageID int
Image ImageModel
TrainData []*ProjectTrainDataModel `gorm:"foreignKey:ProjectID"`
UserPath string
CodePath string
ModelPath string
Running bool `gorm:"-:all"`
}
func (*ProjectModel) TableName() string {
return "projects"
}
type ProjectTrainDataModel struct {
BaseModel[ProjectTrainDataModel]
ProjectID int
Project *ProjectModel
DataID int
Data *DataModel
MountPath string
}
func (*ProjectTrainDataModel) TableName() string {
return "project_train_data"
}
//func (p *ProjectModel) Fill() {
// db := k8s_manager.DB()
// db.Preload(clause.Associations).First(p, p.ID)
//}
//
//func (p *ProjectModel) Create() {
// db := k8s_manager.DB()
// db.Create(p)
//}
func (p *ProjectModel) Delete() {
db := k8s_manager.DB()
for _, d := range p.TrainData {
db.Delete(d)
}
db.Delete(p)
}
func (p *ProjectModel) Save(oldProject *ProjectModel) {
db := k8s_manager.DB()
//oldProject := &ProjectModel{}
//oldProject.ID = p.ID
//oldProject.Fill()
//toAdd := utils.Difference(p.TrainData, oldProject.TrainData, func(a, b ProjectTrainDataModel) bool { return a.ID == b.ID })
//for t := range toAdd {
// db.Create(t)
//}
//
toDel := utils.Difference(oldProject.TrainData, p.TrainData, func(a, b *ProjectTrainDataModel) bool { return a.ID == b.ID })
for _, t := range toDel {
db.Delete(t)
}
toSave := utils.Intersect(p.TrainData, oldProject.TrainData, func(a, b *ProjectTrainDataModel) bool { return a.ID == b.ID })
for _, t := range toSave {
t.Project = p
db.Save(t)
}
db.Save(p)
}
//func (p *ProjectModel) Gets() []ProjectModel {
// db := k8s_manager.DB()
// var ans []ProjectModel
// db.Model(&ProjectModel{}).Preload(clause.Associations).Where(p).Find(&ans)
// return ans
//}
type RunningProject struct {
Project *ProjectModel
StartTime *time.Time
UserName string
Nodes int
Cpus int
Memory int
Gpus int
GpuMemory int
URL string
ControlURL string
}