Skip to content
Snippets Groups Projects
Select Git revision
  • 4927bf632b4d0500b4ac1ead5d36ababe0d5d629
  • master default protected
2 results

data.go

Blame
  • 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)