addit.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package model
  2. // AchieveFlag is
  3. type AchieveFlag uint64
  4. // const
  5. var (
  6. EmptyAchieve = AchieveFlag(0)
  7. FollowerAchieve1k = AchieveFlag(1 << 0)
  8. FollowerAchieve5k = AchieveFlag(1 << 1)
  9. FollowerAchieve10k = AchieveFlag(1 << 2)
  10. FollowerAchieve100k = AchieveFlag(1 << 3)
  11. FollowerAchieve1000k = AchieveFlag(1 << 12)
  12. )
  13. // AchieveFromFollower is
  14. func AchieveFromFollower(count int64) AchieveFlag {
  15. if count <= 0 {
  16. return EmptyAchieve
  17. }
  18. if count >= 100000 {
  19. return AchieveFlag(1 << uint64(2+count/100000))
  20. }
  21. if count >= 10000 && count < 100000 {
  22. return FollowerAchieve10k
  23. }
  24. if count >= 5000 && count < 10000 {
  25. return FollowerAchieve5k
  26. }
  27. if count >= 1000 && count < 5000 {
  28. return FollowerAchieve1k
  29. }
  30. return EmptyAchieve
  31. }
  32. // AllAchieveFromFollower is
  33. func AllAchieveFromFollower(count int64) []AchieveFlag {
  34. flags := []AchieveFlag{}
  35. if count <= 0 {
  36. return flags
  37. }
  38. if count >= 1000 {
  39. flags = append(flags, FollowerAchieve1k)
  40. }
  41. if count >= 5000 {
  42. flags = append(flags, FollowerAchieve5k)
  43. }
  44. if count >= 10000 {
  45. flags = append(flags, FollowerAchieve10k)
  46. }
  47. if count >= 100000 {
  48. remain := count / 100000
  49. for i := int64(1); i <= remain; i++ {
  50. flags = append(flags, AchieveFlag(1<<uint64(2+i)))
  51. }
  52. }
  53. return flags
  54. }