package service import ( "xps/datamodels" "xps/datasource" "xps/repositories" "xps/viewmodels" ) type ModelService interface { GetList(m map[string]interface{}) ([]viewmodels.ModelInfo, error) GetTreeData() ([]viewmodels.ModelDataInfo, error) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) GetById(modelId int64) (*viewmodels.ModelInfo, error) Create(d *datamodels.Model) error Update(d *datamodels.Model) error Delete(m map[string]interface{}) error } type modelService struct { modelRepo *repositories.ModelRepo objectRepo *repositories.ModelObjectRepo } func NewModelService() ModelService { return &modelService{ modelRepo: repositories.NewModelRepo(datasource.InstanceMaster()), objectRepo: repositories.NewModelObjectRepo(datasource.InstanceMaster()), } } func (s *modelService) GetList(m map[string]interface{}) ([]viewmodels.ModelInfo, error) { return s.modelRepo.GetList(m) } func (s *modelService) GetTreeData() ([]viewmodels.ModelDataInfo, error) { modelArr, err1 := s.modelRepo.GetAll() if err1 != nil { return nil, err1 } objectArr, err2 := s.objectRepo.GetAll() if err2 != nil { return nil, err2 } modelDataArr := make([]viewmodels.ModelDataInfo, 0) for _, model := range modelArr { modelData := viewmodels.ModelDataInfo{} modelId := model.ModelId objects := make([]viewmodels.ModelObjectInfo, 0) for _, object := range objectArr { if object.ModelId == modelId { objects = append(objects, object) } } modelData.ModelId = modelId modelData.ModelTitle = model.ModelTitle modelData.ModelDesc = model.ModelDesc modelData.Objects = objects modelDataArr = append(modelDataArr, modelData) } return modelDataArr, nil } func (s *modelService) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) { return s.modelRepo.GetPage(m) } func (s *modelService) GetById(modelId int64) (*viewmodels.ModelInfo, error) { return s.modelRepo.GetById(modelId) } func (s *modelService) Create(m *datamodels.Model) error { m.ModelId = NewID() return s.modelRepo.Create(m) } func (s *modelService) Update(m *datamodels.Model) error { return s.modelRepo.Update(m) } func (s *modelService) Delete(m map[string]interface{}) error { return s.modelRepo.Delete(m) }