mirror of
https://github.com/khairul169/vaulterm.git
synced 2026-09-15 17:03:30 +07:00
feat: team draft
This commit is contained in:
@@ -45,6 +45,7 @@ func Init() {
|
||||
|
||||
// Migrate the schema
|
||||
db.AutoMigrate(Models...)
|
||||
InitModels(db)
|
||||
runSeeders(db)
|
||||
}
|
||||
|
||||
|
||||
+14
-1
@@ -1,10 +1,23 @@
|
||||
package db
|
||||
|
||||
import "rul.sh/vaulterm/models"
|
||||
import (
|
||||
"log"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"rul.sh/vaulterm/models"
|
||||
)
|
||||
|
||||
var Models = []interface{}{
|
||||
&models.User{},
|
||||
&models.UserSession{},
|
||||
&models.Keychain{},
|
||||
&models.Host{},
|
||||
&models.Team{},
|
||||
&models.TeamMembers{},
|
||||
}
|
||||
|
||||
func InitModels(db *gorm.DB) {
|
||||
if err := db.SetupJoinTable(&models.Team{}, "Members", &models.TeamMembers{}); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
+30
-2
@@ -28,7 +28,18 @@ func seedUsers(tx *gorm.DB) error {
|
||||
return err
|
||||
}
|
||||
|
||||
userList := []models.User{
|
||||
teams := []*models.Team{
|
||||
{
|
||||
Name: "My Team",
|
||||
Icon: "☘️",
|
||||
},
|
||||
}
|
||||
|
||||
if res := tx.Create(&teams); res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
|
||||
userList := []*models.User{
|
||||
{
|
||||
Name: "Admin",
|
||||
Username: "admin",
|
||||
@@ -42,22 +53,39 @@ func seedUsers(tx *gorm.DB) error {
|
||||
Password: testPasswd,
|
||||
Email: "[email protected]",
|
||||
},
|
||||
{
|
||||
Name: "Mary Doe",
|
||||
Username: "user2",
|
||||
Password: testPasswd,
|
||||
Email: "[email protected]",
|
||||
},
|
||||
}
|
||||
|
||||
if res := tx.Create(&userList); res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
|
||||
teamMembers := []models.TeamMembers{
|
||||
{TeamID: teams[0].ID, UserID: userList[0].ID, Role: "owner"},
|
||||
{TeamID: teams[0].ID, UserID: userList[1].ID, Role: "admin"},
|
||||
{TeamID: teams[0].ID, UserID: userList[2].ID, Role: "user"},
|
||||
}
|
||||
|
||||
if res := tx.Create(&teamMembers); res.Error != nil {
|
||||
return res.Error
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func runSeeders(db *gorm.DB) {
|
||||
db.Transaction(func(tx *gorm.DB) error {
|
||||
for _, seed := range seeders {
|
||||
if err := seed(db); err != nil {
|
||||
if err := seed(tx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gorm.io/gorm"
|
||||
"rul.sh/vaulterm/db"
|
||||
"rul.sh/vaulterm/models"
|
||||
)
|
||||
@@ -32,7 +33,14 @@ func Auth(c *fiber.Ctx) error {
|
||||
|
||||
func GetUserSession(sessionId string) (*models.UserSession, error) {
|
||||
var session models.UserSession
|
||||
res := db.Get().Joins("User").Where("user_sessions.id = ?", sessionId).First(&session)
|
||||
res := db.Get().
|
||||
Joins("User").
|
||||
Preload("User.Teams", func(db *gorm.DB) *gorm.DB {
|
||||
return db.Select("id", "name", "icon")
|
||||
}).
|
||||
Where("user_sessions.id = ?", sessionId).
|
||||
First(&session)
|
||||
|
||||
return &session, res.Error
|
||||
}
|
||||
|
||||
|
||||
@@ -13,7 +13,9 @@ type Model struct {
|
||||
}
|
||||
|
||||
func (m *Model) BeforeCreate(tx *gorm.DB) error {
|
||||
m.ID = m.GenerateID()
|
||||
if m.ID == "" {
|
||||
m.ID = m.GenerateID()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type Team struct {
|
||||
Model
|
||||
|
||||
Name string `json:"name" gorm:"type:varchar(32)"`
|
||||
Icon string `json:"icon" gorm:"type:varchar(2)"`
|
||||
Members []*User `json:"members" gorm:"many2many:team_members"`
|
||||
|
||||
Timestamps
|
||||
SoftDeletes
|
||||
}
|
||||
|
||||
type TeamMembers struct {
|
||||
TeamID string `json:"teamId" gorm:"primarykey;type:varchar(26)"`
|
||||
Team Team `json:"team"`
|
||||
UserID string `json:"userId" gorm:"primarykey;type:varchar(26)"`
|
||||
User User `json:"user"`
|
||||
Role string `json:"role" gorm:"type:varchar(16)"`
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
}
|
||||
@@ -14,6 +14,8 @@ type User struct {
|
||||
Email string `json:"email" gorm:"unique"`
|
||||
Role string `json:"role" gorm:"default:user;not null;index:users_role_idx;type:varchar(8)"`
|
||||
|
||||
Teams []*Team `json:"teams" gorm:"many2many:team_members"`
|
||||
|
||||
Timestamps
|
||||
SoftDeletes
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
|
||||
type UserContext struct {
|
||||
*models.User
|
||||
IsAdmin bool
|
||||
IsAdmin bool `json:"isAdmin"`
|
||||
}
|
||||
|
||||
func getUserData(user *models.User) *UserContext {
|
||||
|
||||
Reference in New Issue
Block a user