mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-08-02 06:12:45 +00:00
blind stab at adding a peek
section to /sync
This commit is contained in:
parent
9b79f9a883
commit
d343b8fb2c
4 changed files with 101 additions and 10 deletions
|
@ -32,6 +32,7 @@ CREATE TABLE IF NOT EXISTS syncapi_peeks (
|
|||
room_id TEXT NOT NULL,
|
||||
user_id TEXT NOT NULL,
|
||||
device_id TEXT NOT NULL,
|
||||
new BOOL NOT NULL DEFAULT true,
|
||||
-- When the peek was created in UNIX epoch ms.
|
||||
creation_ts INTEGER NOT NULL,
|
||||
);
|
||||
|
@ -49,11 +50,14 @@ const deletePeekSQL = "" +
|
|||
"DELETE FROM syncapi_peeks WHERE room_id = $1 AND user_id = $2 and device_id = $3"
|
||||
|
||||
const selectPeeksSQL == "" +
|
||||
"SELECT room_id FROM syncapi_peeks WHERE user_id = $1 and device_id = $2"
|
||||
"SELECT room_id, new FROM syncapi_peeks WHERE user_id = $1 and device_id = $2"
|
||||
|
||||
const selectPeekingDevicesSQL == "" +
|
||||
"SELECT room_id, user_id, device_id FROM syncapi_peeks"
|
||||
|
||||
const markPeeksAsOldSQL == "" +
|
||||
"UPDATE syncapi_peeks SET new=false WHERE user_id = $1 and device_id = $2"
|
||||
|
||||
type peekStatements struct {
|
||||
db *sql.DB
|
||||
insertPeekStmt *sql.Stmt
|
||||
|
@ -82,6 +86,9 @@ func NewSqlitePeeksTable(db *sql.DB) (tables.Peeks, error) {
|
|||
if s.selectPeekingDevicesStmt, err = db.Prepare(selectPeekingDevicesSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if s.markPeeksAsOldStmt, err = db.Prepare(markPeeksAsOldSQL); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
|
@ -110,7 +117,7 @@ func (s *peekStatements) DeletePeek(
|
|||
|
||||
func (s *peekStatements) SelectPeeks(
|
||||
ctx context.Context, txn *sql.Tx, userID, deviceID string,
|
||||
) (roomIDs []string, err error) {
|
||||
) (peeks []Peek, err error) {
|
||||
rows, err := sqlutil.TxStmt(txn, s.selectPeeksStmt).QueryContext(ctx, userID, deviceID)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -118,14 +125,21 @@ func (s *peekStatements) SelectPeeks(
|
|||
defer internal.CloseAndLogIfError(ctx, rows, "SelectPeeks: rows.close() failed")
|
||||
|
||||
for rows.Next() {
|
||||
var roomID string
|
||||
if err = rows.Scan(&roomId); err != nil {
|
||||
peek = Peek{}
|
||||
if err = rows.Scan(&peek.roomId, &peek.new); err != nil {
|
||||
return
|
||||
}
|
||||
roomIDs = append(roomIDs, roomID)
|
||||
peeks = append(peeks, peek)
|
||||
}
|
||||
|
||||
return roomIDs, rows.Err()
|
||||
return peeks, rows.Err()
|
||||
}
|
||||
|
||||
func (s *peekStatements) MarkPeeksAsOld (
|
||||
ctx context.Context, txn *sql.Tx, userID, deviceID string,
|
||||
) (err error) {
|
||||
_, err := sqlutil.TxStmt(txn, s.markPeeksAsOldStmt).ExecContext(ctx, userID, deviceID)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *peekStatements) SelectPeekingDevices(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue