diff --git a/pkg/models/realms.go b/pkg/models/realms.go
index c5482a4..084a85b 100644
--- a/pkg/models/realms.go
+++ b/pkg/models/realms.go
@@ -23,6 +23,8 @@ type Realm struct {
type RealmMember struct {
BaseModel
- RealmID uint `json:"realm_id"`
- AccountID uint `json:"account_id"`
+ RealmID uint `json:"realm_id"`
+ AccountID uint `json:"account_id"`
+ Realm Realm `json:"realm"`
+ Account Account `json:"account"`
}
diff --git a/pkg/server/realm_members_api.go b/pkg/server/realm_members_api.go
new file mode 100644
index 0000000..cdb561c
--- /dev/null
+++ b/pkg/server/realm_members_api.go
@@ -0,0 +1,86 @@
+package server
+
+import (
+ "git.solsynth.dev/hydrogen/interactive/pkg/database"
+ "git.solsynth.dev/hydrogen/interactive/pkg/models"
+ "git.solsynth.dev/hydrogen/interactive/pkg/services"
+ "github.com/gofiber/fiber/v2"
+)
+
+func listRealmMembers(c *fiber.Ctx) error {
+ realmId, _ := c.ParamsInt("realmId", 0)
+
+ if members, err := services.ListRealmMember(uint(realmId)); err != nil {
+ return fiber.NewError(fiber.StatusInternalServerError, err.Error())
+ } else {
+ return c.JSON(members)
+ }
+}
+
+func inviteRealm(c *fiber.Ctx) error {
+ user := c.Locals("principal").(models.Account)
+ realmId, _ := c.ParamsInt("realmId", 0)
+
+ var data struct {
+ AccountName string `json:"account_name" validate:"required"`
+ }
+
+ if err := BindAndValidate(c, &data); err != nil {
+ return err
+ }
+
+ var realm models.Realm
+ if err := database.C.Where(&models.Realm{
+ BaseModel: models.BaseModel{ID: uint(realmId)},
+ AccountID: user.ID,
+ }).First(&realm).Error; err != nil {
+ return fiber.NewError(fiber.StatusNotFound, err.Error())
+ }
+
+ var account models.Account
+ if err := database.C.Where(&models.Account{
+ Name: data.AccountName,
+ }).First(&account).Error; err != nil {
+ return fiber.NewError(fiber.StatusNotFound, err.Error())
+ }
+
+ if err := services.InviteRealmMember(account, realm); err != nil {
+ return fiber.NewError(fiber.StatusBadRequest, err.Error())
+ } else {
+ return c.SendStatus(fiber.StatusOK)
+ }
+}
+
+func kickRealm(c *fiber.Ctx) error {
+ user := c.Locals("principal").(models.Account)
+ realmId, _ := c.ParamsInt("realmId", 0)
+
+ var data struct {
+ AccountName string `json:"account_name" validate:"required"`
+ }
+
+ if err := BindAndValidate(c, &data); err != nil {
+ return err
+ }
+
+ var realm models.Realm
+ if err := database.C.Where(&models.Realm{
+ BaseModel: models.BaseModel{ID: uint(realmId)},
+ AccountID: user.ID,
+ }).First(&realm).Error; err != nil {
+ return fiber.NewError(fiber.StatusNotFound, err.Error())
+ }
+
+ var account models.Account
+ if err := database.C.Where(&models.Account{
+ Name: data.AccountName,
+ }).First(&account).Error; err != nil {
+ return fiber.NewError(fiber.StatusNotFound, err.Error())
+ }
+
+ if err := services.KickRealmMember(account, realm); err != nil {
+ return fiber.NewError(fiber.StatusBadRequest, err.Error())
+ } else {
+ return c.SendStatus(fiber.StatusOK)
+ }
+}
diff --git a/pkg/server/realms_api.go b/pkg/server/realms_api.go
index 5e1ea8c..4377d19 100644
--- a/pkg/server/realms_api.go
+++ b/pkg/server/realms_api.go
@@ -75,74 +75,6 @@ func createRealm(c *fiber.Ctx) error {
return c.JSON(realm)
}
-func inviteRealm(c *fiber.Ctx) error {
- user := c.Locals("principal").(models.Account)
- realmId, _ := c.ParamsInt("realmId", 0)
-
- var data struct {
- AccountName string `json:"account_name" validate:"required"`
- }
-
- if err := BindAndValidate(c, &data); err != nil {
- return err
- }
-
- var realm models.Realm
- if err := database.C.Where(&models.Realm{
- BaseModel: models.BaseModel{ID: uint(realmId)},
- AccountID: user.ID,
- }).First(&realm).Error; err != nil {
- return fiber.NewError(fiber.StatusNotFound, err.Error())
- }
-
- var account models.Account
- if err := database.C.Where(&models.Account{
- Name: data.AccountName,
- }).First(&account).Error; err != nil {
- return fiber.NewError(fiber.StatusNotFound, err.Error())
- }
-
- if err := services.InviteRealmMember(account, realm); err != nil {
- return fiber.NewError(fiber.StatusBadRequest, err.Error())
- } else {
- return c.SendStatus(fiber.StatusOK)
- }
-}
-
-func kickRealm(c *fiber.Ctx) error {
- user := c.Locals("principal").(models.Account)
- realmId, _ := c.ParamsInt("realmId", 0)
-
- var data struct {
- AccountName string `json:"account_name" validate:"required"`
- }
-
- if err := BindAndValidate(c, &data); err != nil {
- return err
- }
-
- var realm models.Realm
- if err := database.C.Where(&models.Realm{
- BaseModel: models.BaseModel{ID: uint(realmId)},
- AccountID: user.ID,
- }).First(&realm).Error; err != nil {
- return fiber.NewError(fiber.StatusNotFound, err.Error())
- }
-
- var account models.Account
- if err := database.C.Where(&models.Account{
- Name: data.AccountName,
- }).First(&account).Error; err != nil {
- return fiber.NewError(fiber.StatusNotFound, err.Error())
- }
-
- if err := services.KickRealmMember(account, realm); err != nil {
- return fiber.NewError(fiber.StatusBadRequest, err.Error())
- } else {
- return c.SendStatus(fiber.StatusOK)
- }
-}
-
func editRealm(c *fiber.Ctx) error {
user := c.Locals("principal").(models.Account)
id, _ := c.ParamsInt("realmId", 0)
diff --git a/pkg/server/startup.go b/pkg/server/startup.go
index f3159af..12bde2b 100644
--- a/pkg/server/startup.go
+++ b/pkg/server/startup.go
@@ -105,15 +105,19 @@ func NewServer() {
api.Put("/categories/:categoryId", authMiddleware, editCategory)
api.Delete("/categories/:categoryId", authMiddleware, deleteCategory)
- api.Get("/realms", listRealm)
- api.Get("/realms/me", authMiddleware, listOwnedRealm)
- api.Get("/realms/me/available", authMiddleware, listAvailableRealm)
- api.Get("/realms/:realmId", getRealm)
- api.Post("/realms", authMiddleware, createRealm)
- api.Post("/realms/:realmId/invite", authMiddleware, inviteRealm)
- api.Post("/realms/:realmId/kick", authMiddleware, kickRealm)
- api.Put("/realms/:realmId", authMiddleware, editRealm)
- api.Delete("/realms/:realmId", authMiddleware, deleteRealm)
+ realms := api.Group("/realms").Name("Realms API")
+ {
+ realms.Get("/", listRealm)
+ realms.Get("/me", authMiddleware, listOwnedRealm)
+ realms.Get("/me/available", authMiddleware, listAvailableRealm)
+ realms.Get("/:realmId", getRealm)
+ realms.Get("/:realmId/members", listRealmMembers)
+ realms.Post("/", authMiddleware, createRealm)
+ realms.Post("/:realmId/invite", authMiddleware, inviteRealm)
+ realms.Post("/:realmId/kick", authMiddleware, kickRealm)
+ realms.Put("/:realmId", authMiddleware, editRealm)
+ realms.Delete("/:realmId", authMiddleware, deleteRealm)
+ }
}
A.Use("/", cache.New(cache.Config{
diff --git a/pkg/services/realms.go b/pkg/services/realms.go
index 36559a5..5de70ff 100644
--- a/pkg/services/realms.go
+++ b/pkg/services/realms.go
@@ -62,6 +62,18 @@ func NewRealm(user models.Account, name, description string, realmType int) (mod
return realm, err
}
+func ListRealmMember(realmId uint) ([]models.RealmMember, error) {
+ var members []models.RealmMember
+
+ if err := database.C.Where(&models.RealmMember{
+ RealmID: realmId,
+ }).Find(&members).Error; err != nil {
+ return members, err
+ }
+
+ return members, nil
+}
+
func InviteRealmMember(user models.Account, target models.Realm) error {
member := models.RealmMember{
RealmID: target.ID,
diff --git a/pkg/views/src/components/realms/RealmEditor.vue b/pkg/views/src/components/realms/RealmEditor.vue
index 2a60f6a..d20e60d 100644
--- a/pkg/views/src/components/realms/RealmEditor.vue
+++ b/pkg/views/src/components/realms/RealmEditor.vue
@@ -4,15 +4,8 @@
-
+