Encrypted messaging app
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

112 lines
2.7 KiB

package Database
import (
"time"
"github.com/gofrs/uuid"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
// UserConversation Used to link the current user to their conversations
type UserConversation struct {
Base
UserID uuid.UUID `gorm:"type:uuid;column:user_id;not null;" json:"user_id"`
User User ` json:"user"`
ConversationDetailID string `gorm:"not null" json:"conversation_detail_id"` // Stored encrypted
Admin string `gorm:"not null" json:"admin"` // Bool if user is admin of thread, stored encrypted
SymmetricKey string `gorm:"not null" json:"symmetric_key"` // Stored encrypted
CreatedAt time.Time `gorm:"not null" json:"created_at"`
}
type UserConversationList []UserConversation
func GetUserConversationById(id string) (UserConversation, error) {
var (
message UserConversation
err error
)
err = DB.First(&message, "id = ?", id).
Error
return message, err
}
func GetUserConversationsByUserId(id string, page int) ([]UserConversation, error) {
var (
conversations []UserConversation
offset int
err error
)
offset = page * PageSize
err = DB.Offset(offset).
Limit(PageSize).
Find(&conversations, "user_id = ?", id).
Order("created_at DESC").
Error
return conversations, err
}
func (userConversation *UserConversation) CreateUserConversation() error {
var err error
err = DB.Session(&gorm.Session{FullSaveAssociations: true}).
Create(userConversation).
Error
return err
}
func (userConversations *UserConversationList) CreateUserConversations() error {
var err error
err = DB.Create(userConversations).
Error
return err
}
func (userConversation *UserConversation) UpdateUserConversation() error {
var err error
err = DB.Model(UserConversation{}).
Updates(userConversation).
Error
return err
}
func (userConversations *UserConversationList) UpdateUserConversations() error {
var err error
err = DB.Model(UserConversation{}).
Updates(userConversations).
Error
return err
}
func (userConversations *UserConversationList) UpdateOrCreateUserConversations() error {
var err error
err = DB.Model(UserConversation{}).
Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "id"}},
DoUpdates: clause.AssignmentColumns([]string{"admin"}),
}).
Create(userConversations).
Error
return err
}
func (userConversation *UserConversation) DeleteUserConversation() error {
return DB.Session(&gorm.Session{FullSaveAssociations: true}).
Delete(userConversation).
Error
}