Make sure to properly set NULL for portal.mxid if we don't have one.

When this gets set to empty string it causes primary key to fail and cascades
into other issues like the inability to deduplicate messages.

Refs #26
This commit is contained in:
Gary Kramlich
2022-04-07 13:46:51 -05:00
parent a56864f924
commit 2a7fc8eabf

View File

@@ -51,13 +51,21 @@ func (p *Portal) Scan(row Scannable) *Portal {
return p
}
func (p *Portal) mxidPtr() *id.RoomID {
if p.MXID != "" {
return &p.MXID
}
return nil
}
func (p *Portal) Insert() {
query := "INSERT INTO portal" +
" (channel_id, receiver, mxid, name, topic, avatar, avatar_url," +
" type, dmuser, first_event_id)" +
" VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)"
_, err := p.db.Exec(query, p.Key.ChannelID, p.Key.Receiver, p.MXID,
_, err := p.db.Exec(query, p.Key.ChannelID, p.Key.Receiver, p.mxidPtr(),
p.Name, p.Topic, p.Avatar, p.AvatarURL.String(), p.Type, p.DMUser,
p.FirstEventID.String())
@@ -72,7 +80,7 @@ func (p *Portal) Update() {
" dmuser=$7, first_event_id=$8" +
" WHERE channel_id=$9 AND receiver=$10"
_, err := p.db.Exec(query, p.MXID, p.Name, p.Topic, p.Avatar,
_, err := p.db.Exec(query, p.mxidPtr(), p.Name, p.Topic, p.Avatar,
p.AvatarURL.String(), p.Type, p.DMUser, p.FirstEventID.String(),
p.Key.ChannelID, p.Key.Receiver)