publish.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package service
  2. import (
  3. "context"
  4. "go-common/app/admin/main/appstatic/model"
  5. "go-common/library/log"
  6. )
  7. // GendDiff picks the already generated diff packages
  8. func (s *Service) GendDiff(resID int) (generated map[int64]int64, err error) {
  9. generated = make(map[int64]int64)
  10. genVers := []*model.Ver{}
  11. if err = s.DB.Where("file_type IN (1,2)"). // 1=diff pkg, 2=diff pkg calculation in progress
  12. Where("is_deleted = 0").Where("resource_id = ?", resID).Select("id, from_ver").Find(&genVers).Error; err != nil {
  13. log.Error("generatedDiff Error %v", err)
  14. return
  15. }
  16. for _, v := range genVers {
  17. generated[v.FromVer] = v.ID
  18. }
  19. return
  20. }
  21. // Publish returns the second trigger result
  22. func (s *Service) Publish(ctx context.Context, resID int) (data *model.PubResp, err error) {
  23. var (
  24. prodVers, testVers []int64 // the history versions that we should generate for
  25. currRes *model.Resource
  26. generated map[int64]int64
  27. prodMore, testMore []int64
  28. )
  29. // pick history versions to calculate diff
  30. if prodVers, testVers, currRes, err = s.pickDiff(resID); err != nil {
  31. return
  32. }
  33. // pick already generated diff packages
  34. if generated, err = s.GendDiff(resID); err != nil {
  35. return
  36. }
  37. // filter already generated
  38. for _, v := range prodVers {
  39. if _, ok := generated[v]; !ok {
  40. prodMore = append(prodMore, v)
  41. }
  42. }
  43. for _, v := range testVers {
  44. if _, ok := generated[v]; !ok {
  45. testMore = append(testMore, v)
  46. }
  47. }
  48. // put diff packages in our DB
  49. if err = s.putDiff(resID, mergeSlice(prodMore, testMore), currRes); err != nil {
  50. return
  51. }
  52. data = &model.PubResp{
  53. CurrVer: currRes.Version,
  54. DiffProd: prodMore,
  55. DiffTest: testMore,
  56. }
  57. // add the publish resID into to push list
  58. err = s.newPush(ctx, resID)
  59. return
  60. }