|
6 | 6 | "fmt" |
7 | 7 | "os" |
8 | 8 | "path/filepath" |
| 9 | + "time" |
9 | 10 |
|
10 | 11 | "github.com/aws/aws-sdk-go/aws/session" |
11 | 12 | "github.com/getsentry/sentry-go" |
@@ -186,18 +187,33 @@ func ParseFacebookArchive(sess *session.Session, db *gorm.DB, accountNumber, wor |
186 | 187 | friendIDs[f.FriendName] = f.ID |
187 | 188 | } |
188 | 189 |
|
189 | | - // FIXME: non-friends couldn't be tagged |
190 | 190 | for _, tag := range postTags { |
191 | 191 | friendID, ok := friendIDs[tag.FriendName] |
192 | | - if ok { |
193 | | - tag.FriendID = friendID |
194 | | - tag.PostID = p.ID |
195 | | - if err := db.Create(&tag).Error; err != nil { |
| 192 | + if !ok { |
| 193 | + friend := &facebook.FriendORM{ |
| 194 | + FriendName: tag.FriendName, |
| 195 | + DataOwnerID: dataOwner, |
| 196 | + Timestamp: time.Now().UnixNano(), |
| 197 | + } |
| 198 | + if err := db.Where("data_owner_id = ? AND friend_name = ?", dataOwner, tag.FriendName). |
| 199 | + FirstOrCreate(&friend).Error; err != nil { |
196 | 200 | if err != sql.ErrNoRows { |
197 | 201 | contextLogger.Error(err) |
198 | 202 | sentry.CaptureException(err) |
| 203 | + continue |
199 | 204 | } |
200 | 205 | } |
| 206 | + |
| 207 | + friendID = friend.ID |
| 208 | + friendIDs[tag.FriendName] = friendID |
| 209 | + } |
| 210 | + tag.FriendID = friendID |
| 211 | + tag.PostID = p.ID |
| 212 | + if err := db.Create(&tag).Error; err != nil { |
| 213 | + if err != sql.ErrNoRows { |
| 214 | + contextLogger.Error(err) |
| 215 | + sentry.CaptureException(err) |
| 216 | + } |
201 | 217 | } |
202 | 218 | } |
203 | 219 | } |
|
0 commit comments