package services import ( "github.com/goravel/framework/contracts/database/orm" "github.com/goravel/framework/facades" apperrors "goravel/app/errors" "goravel/app/http/requests/admin" "goravel/app/models" ) type <<.ServiceName>> interface { GetByID(id uint) (*models.<<.ModelName>>, error) GetList(filters <<.ModelName>>Filters, page, pageSize int) ([]models.<<.ModelName>>, int64, error) <> Create(req *admin.<<.RequestCreateName>>) (*models.<<.ModelName>>, error) <> <> Update(id uint, req *admin.<<.RequestUpdateName>>) (*models.<<.ModelName>>, error) <> <> Delete(id uint) error <> } type <<.ModelName>>Filters struct { <> <<.PascalName>> string <<- end>> } type <<.ServiceName>>Impl struct{} func New<<.ServiceName>>() <<.ServiceName>> { return &<<.ServiceName>>Impl{} } func Build<<.ModelName>>Query(filters <<.ModelName>>Filters) orm.Query { query := facades.Orm().Query().Model(&models.<<.ModelName>>{}) <> if filters.<<.PascalName>> != "" { <> query = query.Where("<<.Name>> LIKE ?", "%"+filters.<<.PascalName>>+"%") <> = ?", filters.<<.PascalName>>) <" >> query = query.Where("<<.Name>> > ?", filters.<<.PascalName>>) <=" >> query = query.Where("<<.Name>> >= ?", filters.<<.PascalName>>) <> query = query.Where("<<.Name>> < ?", filters.<<.PascalName>>) <> <= ?", filters.<<.PascalName>>) <> != ?", filters.<<.PascalName>>) <> query = query.Where("<<.Name>> IN ?", filters.<<.PascalName>>) <> query = query.Where("<<.Name>> LIKE ?", "%"+filters.<<.PascalName>>+"%") <> } <<- end>> return query } func (s *<<.ServiceName>>Impl) GetByID(id uint) (*models.<<.ModelName>>, error) { var item models.<<.ModelName>> if err := facades.Orm().Query().Where("id", id).FirstOrFail(&item); err != nil { return nil, apperrors.NewBusinessError("<<.ModuleName>>_not_found", "<<.ModelName>> not found").WithError(err) } return &item, nil } func (s *<<.ServiceName>>Impl) GetList(filters <<.ModelName>>Filters, page, pageSize int) ([]models.<<.ModelName>>, int64, error) { query := Build<<.ModelName>>Query(filters) var list []models.<<.ModelName>> var total int64 if err := query.Order("id desc").Paginate(page, pageSize, &list, &total); err != nil { return nil, 0, err } return list, total, nil } <> func (s *<<.ServiceName>>Impl) Create(req *admin.<<.RequestCreateName>>) (*models.<<.ModelName>>, error) { item := &models.<<.ModelName>>{ <> <<.FieldName>>: req.<<.FieldName>>, <<- end>> } if err := facades.Orm().Query().Create(item); err != nil { return nil, apperrors.ErrCreateFailed.WithError(err) } return item, nil } <> <> func (s *<<.ServiceName>>Impl) Update(id uint, req *admin.<<.RequestUpdateName>>) (*models.<<.ModelName>>, error) { item, err := s.GetByID(id) if err != nil { return nil, err } <> if req.<<.FieldName>> != nil { item.<<.FieldName>> = *req.<<.FieldName>> } <<- end>> if err := facades.Orm().Query().Save(item); err != nil { return nil, apperrors.ErrUpdateFailed.WithError(err) } return item, nil } <> <> func (s *<<.ServiceName>>Impl) Delete(id uint) error { if _, err := facades.Orm().Query().Where("id", id).Delete(&models.<<.ModelName>>{}); err != nil { return err } return nil } <>