(userID, userMaxUSN, afterUSN, limit int)
| 131 | } |
| 132 | |
| 133 | func (s *Sync) newFragment(userID, userMaxUSN, afterUSN, limit int) (SyncFragment, error) { |
| 134 | var notes []database.Note |
| 135 | if err := s.app.DB.Where("user_id = ? AND usn > ? AND usn <= ?", userID, afterUSN, userMaxUSN).Order("usn ASC").Limit(limit).Find(¬es).Error; err != nil { |
| 136 | return SyncFragment{}, nil |
| 137 | } |
| 138 | var books []database.Book |
| 139 | if err := s.app.DB.Where("user_id = ? AND usn > ? AND usn <= ?", userID, afterUSN, userMaxUSN).Order("usn ASC").Limit(limit).Find(&books).Error; err != nil { |
| 140 | return SyncFragment{}, nil |
| 141 | } |
| 142 | |
| 143 | var items []usnItem |
| 144 | for _, note := range notes { |
| 145 | i := usnItem{ |
| 146 | usn: note.USN, |
| 147 | val: note, |
| 148 | } |
| 149 | items = append(items, i) |
| 150 | } |
| 151 | for _, book := range books { |
| 152 | i := usnItem{ |
| 153 | usn: book.USN, |
| 154 | val: book, |
| 155 | } |
| 156 | items = append(items, i) |
| 157 | } |
| 158 | |
| 159 | // order by usn in ascending order |
| 160 | sort.Slice(items, func(i, j int) bool { |
| 161 | return items[i].usn < items[j].usn |
| 162 | }) |
| 163 | |
| 164 | fragNotes := []SyncFragNote{} |
| 165 | fragBooks := []SyncFragBook{} |
| 166 | fragExpungedNotes := []string{} |
| 167 | fragExpungedBooks := []string{} |
| 168 | |
| 169 | fragMaxUSN := 0 |
| 170 | for i := 0; i < limit; i++ { |
| 171 | if i > len(items)-1 { |
| 172 | break |
| 173 | } |
| 174 | |
| 175 | item := items[i] |
| 176 | |
| 177 | fragMaxUSN = item.usn |
| 178 | |
| 179 | switch v := item.val.(type) { |
| 180 | case database.Note: |
| 181 | note := item.val.(database.Note) |
| 182 | |
| 183 | if note.Deleted { |
| 184 | fragExpungedNotes = append(fragExpungedNotes, note.UUID) |
| 185 | } else { |
| 186 | fragNotes = append(fragNotes, NewFragNote(note)) |
| 187 | } |
| 188 | case database.Book: |
| 189 | book := item.val.(database.Book) |
| 190 |
no test coverage detected