easybridge/appservice/db.go

72 lines
1.5 KiB
Go
Raw Normal View History

2020-02-16 18:30:49 +00:00
package appservice
import (
2020-02-16 21:07:41 +00:00
"git.deuxfleurs.fr/Deuxfleurs/easybridge/connector"
2020-02-16 18:30:49 +00:00
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
_ "github.com/jinzhu/gorm/dialects/postgres"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
var db *gorm.DB
func InitDb() error {
var err error
db, err = gorm.Open(config.DbType, config.DbPath)
if err != nil {
return err
}
2020-02-16 21:07:41 +00:00
db.AutoMigrate(&DbUserMap{})
db.Model(&DbUserMap{}).AddIndex("idx_protocol_user", "protocol", "user_id")
db.AutoMigrate(&DbRoomMap{})
db.Model(&DbRoomMap{}).AddIndex("idx_protocol_room", "protocol", "room_id")
db.AutoMigrate(&DbPmRoomMap{})
db.Model(&DbPmRoomMap{}).AddIndex("idx_protocol_user_account_user", "protocol", "user_id", "mx_user_id", "account_name")
2020-02-16 18:30:49 +00:00
return nil
}
2020-02-16 21:07:41 +00:00
// User mapping between protocol user IDs and puppeted matrix ids
type DbUserMap struct {
gorm.Model
Protocol string
UserID connector.UserID
MxUserID string `gorm:"index:mxuserid"`
}
// Room mapping between Matrix rooms and outside rooms
type DbRoomMap struct {
gorm.Model
// Network protocol
Protocol string
// Room id on the bridged network
RoomID connector.RoomID
// Bridged room matrix id
MxRoomID string `gorm:"index:mxroomid"`
}
// Room mapping between Matrix rooms and private messages
type DbPmRoomMap struct {
gorm.Model
// User id and account name of the local end viewed on Matrix
MxUserID string
Protocol string
AccountName string
// User id to reach them
2020-02-16 21:57:30 +00:00
UserID connector.UserID
2020-02-16 21:07:41 +00:00
// Bridged room for PMs
MxRoomID string `gorm:"index:mxroomoid"`
}