1
0
Fork 0
mirror of https://github.com/mautrix/whatsapp.git synced 2026-05-15 18:16:53 -04:00
mautrix-whatsapp/pkg/connector/wadb/avatarcache.go

51 lines
1.4 KiB
Go
Raw Permalink Normal View History

2025-07-29 16:18:56 +03:00
package wadb
import (
"context"
"go.mau.fi/util/dbutil"
"go.mau.fi/util/jsontime"
"go.mau.fi/whatsmeow/types"
)
type AvatarCacheQuery struct {
*dbutil.QueryHelper[*AvatarCacheEntry]
}
const (
getAvatarCacheEntry = `
SELECT entity_jid, avatar_id, direct_path, expiry, gone
FROM whatsapp_avatar_cache
WHERE entity_jid = $1 AND avatar_id = $2
`
putAvatarCacheEntry = `
INSERT INTO whatsapp_avatar_cache (entity_jid, avatar_id, direct_path, expiry, gone)
VALUES ($1, $2, $3, $4, $5)
ON CONFLICT (entity_jid, avatar_id) DO UPDATE
SET direct_path = EXCLUDED.direct_path, expiry = EXCLUDED.expiry, gone = EXCLUDED.gone
`
)
func (acq *AvatarCacheQuery) Get(ctx context.Context, entityJID types.JID, avatarID string) (*AvatarCacheEntry, error) {
return acq.QueryOne(ctx, getAvatarCacheEntry, entityJID, avatarID)
}
func (acq *AvatarCacheQuery) Put(ctx context.Context, entry *AvatarCacheEntry) error {
return acq.Exec(ctx, putAvatarCacheEntry, entry.sqlVariables()...)
}
type AvatarCacheEntry struct {
EntityJID types.JID
AvatarID string
DirectPath string
Expiry jsontime.Unix
Gone bool
}
func (ace *AvatarCacheEntry) Scan(row dbutil.Scannable) (*AvatarCacheEntry, error) {
return dbutil.ValueOrErr(ace, row.Scan(&ace.EntityJID, &ace.AvatarID, &ace.DirectPath, &ace.Expiry, &ace.Gone))
}
func (ace *AvatarCacheEntry) sqlVariables() []any {
return []any{ace.EntityJID, ace.AvatarID, ace.DirectPath, ace.Expiry, ace.Gone}
}