Select Git revision
data.go 2.91 KiB
package db
import (
"fmt"
"git.sch.bme.hu/mikewashere/voxfrontend/languages"
"github.com/google/uuid"
"gitlab.com/MikeTTh/env"
"gorm.io/driver/postgres"
"gorm.io/gorm"
"net/http"
"time"
)
const cookiename = "uid"
type User struct {
Name string `gorm:"type:varchar(50)"`
SchAcc string `gorm:"primaryKey;type:varchar(22)"`
Lang languages.Voice `gorm:"type:varchar(10)"`
Dark bool `gorm:"dark"`
}
type Cookie struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
SchAcc string `gorm:"type:varchar(22)"`
User *User `gorm:"belongsTo:User;foreignKey:SchAcc;references:SchAcc"`
}
type Message struct {
Id uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
Sent time.Time `gorm:"default:now()"`
Message string
SchAcc string `gorm:"type:varchar(22)"`
Lang languages.Voice `gorm:"type:varchar(10);default:'🇭🇺'"`
User *User `gorm:"belongsTo:User;foreignKey:SchAcc;references:SchAcc"`
}
var db *gorm.DB
func init() {
var err error
db, err = gorm.Open(postgres.Open(env.String("POSTGRES", "postgresql://postgres:postgres@localhost")))
if err != nil {
panic(err)
}
err = db.AutoMigrate(&User{}, &Cookie{}, &Message{})
if err != nil {
panic(err)
}
}
func GetLastMessages() ([]Message, error) {
var msgs []Message
err := db.Preload("User").Order("sent DESC").Limit(10).Find(&msgs).Error
if err != nil {
return nil, err
}
return msgs, nil
}
func GetUser(r *http.Request) *User {
c, e := r.Cookie(cookiename)
if e != nil {
return nil
}
u, e := uuid.Parse(c.Value)