|
- /* ******************************************************************************
- * 2019 - present Contributed by Apulis Technology (Shenzhen) Co. LTD
- *
- * This program and the accompanying materials are made available under the
- * terms of the MIT License, which is available at
- * https://www.opensource.org/licenses/MIT
- *
- * See the NOTICE file distributed with this work for additional
- * information regarding copyright ownership.
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- * SPDX-License-Identifier: MIT
- ******************************************************************************/
- package services
-
- import (
- "fmt"
- "time"
-
- "github.com/apulis/app/ai-arts-backend/internal/configs"
- "github.com/apulis/app/ai-arts-backend/internal/constant"
- "github.com/apulis/app/ai-arts-backend/internal/dto"
- "github.com/apulis/app/ai-arts-backend/internal/models"
- "github.com/apulis/app/ai-arts-backend/internal/utils"
- "github.com/apulis/sdk/go-utils/logging"
- )
-
- var globalProjectService = &ProjectService{}
-
- func GetGlobalProjectService() *ProjectService {
- return globalProjectService
- }
-
- type ProjectService struct {
- IsRunning bool
- }
-
- func (p *ProjectService) Create(projectDto *dto.CreateProject, creator string, groupName string, groupId int64, userName string) (*models.Project, error) {
- defer utils.TimeCost(time.Now(), "ProjectService.Create")
- projectModel := &models.Project{}
-
- projectModel.Name = projectDto.Name
- projectModel.Description = projectDto.Description
- projectModel.Creator = creator
- projectModel.GroupId = groupId
- projectModel.GroupName = groupName
- projectModel.Status = constant.ProjectInit
- projectModel.Type = projectDto.Type
- projectModel.Field = projectDto.Field
- projectModel.Task = projectDto.Task
-
- projectModel.CodeId = ""
- projectModel.LabId = 0
-
- projectOpt := models.ProjectOpt{}
- projectModel, err := projectOpt.CreateProject(projectModel)
- if err != nil {
- return nil, err
- }
-
- return projectModel, err
- }
-
- func (pService *ProjectService) Run() {
- projectOpt := models.ProjectOpt{}
- pService.IsRunning = true
- for pService.IsRunning {
- time.Sleep(time.Second * 5)
- req := &models.ListProjectReq{}
- req.Status = []string{"init", "delete"}
- p, _, _ := projectOpt.ListProject(req)
- fmt.Println(p)
- for i := 0; i < len(p); i++ {
- pService.TrueDelete(&p[i])
- }
- }
- }
-
- func (p *ProjectService) Stop() {
- p.IsRunning = false
- }
-
- func (p *ProjectService) UpdateUseModel(projectModel *models.Project) (*models.Project, error) {
- projectOpt := models.ProjectOpt{}
- err := projectOpt.UpdataProject(projectModel)
- return projectModel, err
- }
-
- func (p *ProjectService) Delete(projectDto *dto.DeleteProject) error {
- projectOpt := &models.ProjectOpt{}
- projectModel := &models.Project{}
- projectModel.ID = projectDto.Id
-
- req := &models.ListProjectReq{}
- req.Ids = []int64{projectModel.ID}
-
- projectModels, _, err := projectOpt.ListProject(req)
- if err != nil {
- return err
- }
- if len(projectModels) == 0 {
- return fmt.Errorf("delete projectId fail, %d is not exist", projectDto.Id)
- }
- projectModel = &projectModels[0]
- if projectModel.Status == "delete" {
- return fmt.Errorf("delete projectId fail,%d is deleted", projectDto.Id)
- }
-
- if projectModel.LabId > 0 {
- req := &dto.AiLabRealStatsReq{}
- req.LabId = projectModel.LabId
- aiLabRealStatResp, resp, err := globalAiLabService.GetRealStats(req, nil)
- if err != nil {
- return err
- } else if resp.Code != 0 {
- return fmt.Errorf("%v", resp)
- } else if aiLabRealStatResp.Active > 0 {
- return fmt.Errorf("labId %d is running,active : %d", req.LabId, aiLabRealStatResp.Active)
- }
- }
- projectModel.Status = "delete"
- projectModel.Name = fmt.Sprintf("%s_%d", "delete", time.Now().Unix())
- err = projectOpt.UpdataProject(projectModel)
-
- return err
- }
-
- func (pService *ProjectService) TrueDelete(projectModel *models.Project) error {
- projectOpt := models.ProjectOpt{}
- if projectModel.LabId > 0 {
- req := &dto.DeleteAiLabReq{}
- req.LabId = projectModel.LabId
-
- _, resp, err := globalAiLabService.DeleteLab(req, nil)
- if err != nil {
- logging.Error(err).Msgf("DeleteLab err id:%d", projectModel.LabId)
- return err
- } else if resp.Code != 0 {
- logging.Info().Msgf("DeleteLab err id:%d,%v", projectModel.LabId, resp)
- return err
- }
-
- projectModel.LabId = 0
- projectOpt.UpdataProject(projectModel)
- }
- if projectModel.CodeId != "" {
- req := &dto.DeleteRepoReq{}
- req.Bind = fmt.Sprintf("%s/%d", configs.GetAppConfig().ProjectName, projectModel.ID)
- req.RepoId = projectModel.CodeId
- _, resp, err := globalAiCodeService.DeleteRepo(req, nil)
-
- if err != nil {
- logging.Error(err).Msgf("DeleteCode err id:%d", projectModel.CodeId)
- return err
- } else if resp.Code != 0 {
- logging.Info().Msgf("DeleteCode err id:%d,%v", projectModel.CodeId, resp)
- return err
- }
- projectModel.CodeId = ""
- projectOpt.UpdataProject(projectModel)
- }
- pvcService := &PvcService{}
- err := pvcService.DelProject(projectModel.ID)
- if err != nil {
- logging.Error(err).Msgf("Delete pvc path err")
- return err
- }
-
- return projectOpt.DeleteProject([]int64{projectModel.ID})
- }
-
- func (p *ProjectService) List(projectDto *dto.ListProject) ([]models.Project, int64, error) {
- projectOpt := models.ProjectOpt{}
- l := models.BaseList{}
- l.PageNum = projectDto.PageNum
- l.PageSize = projectDto.PageSize
- l.Sort = projectDto.Sort
- req := &models.ListProjectReq{}
- req.GroupIds = projectDto.GroupId
- req.Name = projectDto.Name
- req.Type = projectDto.Type
- req.Field = projectDto.Field
- req.Task = projectDto.Task
- req.BaseList = &l
- projectModel, total, err := projectOpt.ListProject(req)
- if err != nil {
- return nil, 0, err
- }
- return projectModel, total, nil
- }
-
- func (p *ProjectService) Get(projectDto *dto.GetProjectReq) (*dto.GetProjectResp, error) {
- projectOpt := models.ProjectOpt{}
- req := &models.ListProjectReq{}
- req.Ids = []int64{projectDto.Id}
-
- projectModel, _, err := projectOpt.ListProject(req)
- if len(projectModel) > 0 {
- p := &projectModel[0]
- resp := &dto.GetProjectResp{}
- resp.Project = *p
- resp.LabStatus = 0
- return resp, err
- } else {
- return nil, fmt.Errorf("projectId %d is not exist", req.Ids[0])
- }
- }
|