(ctx context.Context, keys []api.DeviceMessage)
| 79 | } |
| 80 | |
| 81 | func (d *Database) StoreLocalDeviceKeys(ctx context.Context, keys []api.DeviceMessage) error { |
| 82 | // work out the latest stream IDs for each user |
| 83 | userIDToStreamID := make(map[string]int64) |
| 84 | for _, k := range keys { |
| 85 | userIDToStreamID[k.UserID] = 0 |
| 86 | } |
| 87 | return d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { |
| 88 | for userID := range userIDToStreamID { |
| 89 | streamID, err := d.DeviceKeysTable.SelectMaxStreamIDForUser(ctx, txn, userID) |
| 90 | if err != nil { |
| 91 | return err |
| 92 | } |
| 93 | userIDToStreamID[userID] = streamID |
| 94 | } |
| 95 | // set the stream IDs for each key |
| 96 | for i := range keys { |
| 97 | k := keys[i] |
| 98 | userIDToStreamID[k.UserID]++ // start stream from 1 |
| 99 | k.StreamID = userIDToStreamID[k.UserID] |
| 100 | keys[i] = k |
| 101 | } |
| 102 | return d.DeviceKeysTable.InsertDeviceKeys(ctx, txn, keys) |
| 103 | }) |
| 104 | } |
| 105 | |
| 106 | func (d *Database) DeviceKeysForUser(ctx context.Context, userID string, deviceIDs []string, includeEmpty bool) ([]api.DeviceMessage, error) { |
| 107 | return d.DeviceKeysTable.SelectBatchDeviceKeys(ctx, userID, deviceIDs, includeEmpty) |
nothing calls this directly
no test coverage detected