project controller

This commit is contained in:
w-mj 2023-04-03 22:39:43 +08:00
parent a36de499c3
commit e4ddd0b445
No known key found for this signature in database
GPG Key ID: 3A2CB5BE2F835897
9 changed files with 174 additions and 25 deletions

View File

@ -81,6 +81,7 @@ func main() {
r.GET("/images", controller.GetImages)
controller.AddDataController(r)
controller.AddProjectController(r)
err := r.Run(":8000")
if err != nil {

View File

@ -2,15 +2,17 @@ package controller
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
"k8s-manager/src/model"
"k8s-manager/src/utils"
"math/rand"
)
func AddData(username string, data *model.DataModel) (utils.OKType, error) {
data.UserName = username
data.Save()
data.AccessInfo = fmt.Sprintf("/data/%s-%s-%d", data.UserName, data.Name, rand.Int())
data.Create()
return utils.OK, nil
}
@ -26,13 +28,13 @@ func DeleteData(username string, ID uint) (utils.OKType, error) {
}
func UpdateData(username string, data *model.DataModel) (utils.OKType, error) {
oldData := model.DataModel{}
oldData := &model.DataModel{}
oldData.SetID(data.ID)
oldData.Fill()
if username != oldData.GetUserName() {
return nil, errors.New("wrong username")
}
data.Save()
data.Save(oldData)
return utils.OK, nil
}
@ -40,7 +42,6 @@ func GetData(UserName string, IsPublish bool) (gin.H, error) {
data := model.DataModel{}
data.UserName = UserName
data.IsPublished = IsPublish
log.Info(UserName, IsPublish)
if UserName == "" && !IsPublish {
return gin.H{"data": []string{}}, nil
}

View File

@ -0,0 +1,54 @@
package controller
import (
"errors"
"github.com/gin-gonic/gin"
"k8s-manager/src/model"
"k8s-manager/src/utils"
)
func AddProject(username string, proj *model.ProjectModel) (utils.OKType, error) {
proj.UserName = username
proj.Create()
return utils.OK, nil
}
func DeleteProject(username string, ID uint) (utils.OKType, error) {
old := model.ProjectModel{}
old.ID = ID
old.Fill()
if username != old.UserName {
return nil, errors.New("wrong username")
}
old.Delete()
return utils.OK, nil
}
func UpdateProject(username string, proj *model.ProjectModel) (utils.OKType, error) {
old := &model.ProjectModel{}
old.ID = proj.ID
old.Fill()
if username != old.GetUserName() {
return nil, errors.New("wrong username")
}
proj.Save(old)
return utils.OK, nil
}
func GetProjects(UserName string, IsPublished bool) (gin.H, error) {
proj := &model.ProjectModel{}
proj.UserName = UserName
proj.IsPublished = IsPublished
if UserName == "" && !IsPublished {
return gin.H{"data": []string{}}, nil
}
ans := proj.Gets()
return gin.H{"data": ans}, nil
}
func AddProjectController(r *gin.Engine) {
utils.RouteWrapper(r, "POST", "/project", AddProject, []string{"username", "1"})
utils.RouteWrapper(r, "DELETE", "/project", DeleteProject, []string{"username", "ID"})
utils.RouteWrapper(r, "PUT", "/project", UpdateProject, []string{"username", "1"})
utils.RouteWrapper(r, "GET", "/projects", GetProjects, []string{"UserName", "IsPublished"})
}

View File

@ -41,7 +41,7 @@ func (b *BaseModel[T]) Create() {
db.Create(p)
}
func (b *BaseModel[T]) Save() {
func (b *BaseModel[T]) Save(old *T) {
db := k8s_manager.DB()
p := (*T)(unsafe.Pointer(b))
db.Save(p)

View File

@ -1,23 +1,24 @@
package model
import (
"gorm.io/gorm"
k8s_manager "k8s-manager/src"
"k8s-manager/src/utils"
"time"
)
type ProjectModel struct {
gorm.Model
BaseModel[ProjectModel]
ProjectName string
UserName string
GroupName string
Type string
Comment string
Doc string
IsPublic bool
IsPublished bool
ImageID int
Image ImageModel
TrainData []*DataModel `gorm:"many2many:projects_data"`
TrainData []*ProjectTrainDataModel `gorm:"foreignKey:ProjectID"`
UserPath string
CodePath string
@ -30,6 +31,71 @@ func (*ProjectModel) TableName() string {
return "projects"
}
type ProjectTrainDataModel struct {
BaseModel[ProjectTrainDataModel]
ProjectID uint
DataID uint
Data *DataModel
MountPath string
}
func (*ProjectTrainDataModel) TableName() string {
return "project_train_data"
}
func (p *ProjectModel) Fill() {
db := k8s_manager.DB()
db.Preload("ProjectTrainDataModel").First(p, p.ID)
}
func (p *ProjectModel) Create() {
db := k8s_manager.DB()
db.Create(p)
for _, d := range p.TrainData {
d.ProjectID = p.ID
db.Create(d)
}
}
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(oldProject.TrainData, p.TrainData, func(a, b *ProjectTrainDataModel) bool { return a.ID == b.ID })
for t := range toSave {
db.Save(t)
}
db.Save(p)
}
func (p *ProjectModel) Gets() []ProjectModel {
db := k8s_manager.DB()
var ans []ProjectModel
db.Model(&ProjectModel{}).Preload("ProjectTrainDataModel").Where(p).Find(&ans)
return ans
}
type RunningProject struct {
Project *ProjectModel
StartTime *time.Time

View File

@ -0,0 +1,31 @@
package utils
func Difference[T any](a, b []T, com func(T, T) bool) []T {
var ans []T
for _, x := range a {
unique := true
for _, y := range b {
if com(x, y) {
unique = false
break
}
}
if unique {
ans = append(ans, x)
}
}
return ans
}
func Intersect[T any](a, b []T, com func(T, T) bool) []T {
var ans []T
for _, x := range a {
for _, y := range b {
if com(x, y) {
ans = append(ans, x)
break
}
}
}
return ans
}

View File

@ -1,10 +1,5 @@
package main
import (
"k8s-manager/src/controller"
"k8s-manager/src/model"
)
func main() {
controller.BaseController[model.DataModel, *model.DataModel]{}.Add(nil)
//controller.BaseController[model.DataModel, *model.DataModel]{}.Add(nil)
}

View File

@ -1,7 +1,6 @@
package main
import (
"encoding/json"
"fmt"
k8s_manager "k8s-manager/src"
"k8s-manager/src/model"
@ -10,9 +9,10 @@ import (
func CreateTables() {
db := k8s_manager.DB()
err := db.Migrator().AutoMigrate(
&model.ProjectModel{},
&model.ImageModel{},
&model.DataModel{},
//&model.ProjectModel{},
//&model.ImageModel{},
//&model.DataModel{},
&model.ProjectTrainDataModel{},
)
if err != nil {
fmt.Println(err)
@ -22,9 +22,10 @@ func CreateTables() {
func main() {
k8s_manager.InitConfig()
db := k8s_manager.DB()
p := model.ProjectModel{}
db.Preload("TrainData").Where("user_name = ?", "wmj").Find(&p)
j, _ := json.Marshal(&p)
fmt.Println(string(j))
CreateTables()
// db := k8s_manager.DB()
// p := model.ProjectModel{}
// db.Preload("TrainData").Where("user_name = ?", "wmj").Find(&p)
// j, _ := json.Marshal(&p)
// fmt.Println(string(j))
}