feat: WIP group handling
This commit is contained in:
51
controllers/groupController.go
Normal file
51
controllers/groupController.go
Normal file
@@ -0,0 +1,51 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"git.dynamicdiscord.de/malobeo/portal/services"
|
||||
)
|
||||
|
||||
type GroupController struct{}
|
||||
|
||||
func (gc *GroupController) GroupView(c *gin.Context) {
|
||||
groups, err := services.Groups.GetAll(c)
|
||||
|
||||
if err != nil {
|
||||
c.HTML(http.StatusBadRequest, "groups.html", gin.H{"data": gin.H{"error": err}})
|
||||
}
|
||||
|
||||
data := CreateSessionData(c, gin.H{
|
||||
"groups": groups,
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
c.HTML(http.StatusBadRequest, "groups.html", data)
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "groups.html", data)
|
||||
|
||||
}
|
||||
|
||||
func (gc *GroupController) AddGroupHandler(c *gin.Context) {
|
||||
name := c.PostForm("name")
|
||||
|
||||
if len(name) == 0 {
|
||||
fmt.Println("Adding group with empty name is forbidden")
|
||||
c.HTML(http.StatusBadRequest, "groups.html", gin.H{"error": "Cant create group without name"})
|
||||
return
|
||||
}
|
||||
|
||||
err := services.Groups.Create(c, name)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
c.HTML(http.StatusBadRequest, "groups.html", gin.H{"error": err})
|
||||
return
|
||||
}
|
||||
|
||||
gc.GroupView(c)
|
||||
}
|
||||
11
main.go
11
main.go
@@ -14,8 +14,9 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
userController controllers.UserController = controllers.UserController{}
|
||||
authValidator middlewares.AuthValidator = middlewares.AuthValidator{}
|
||||
userController controllers.UserController = controllers.UserController{}
|
||||
groupController controllers.GroupController = controllers.GroupController{}
|
||||
authValidator middlewares.AuthValidator = middlewares.AuthValidator{}
|
||||
)
|
||||
|
||||
func LoadEnvVariables() {
|
||||
@@ -49,11 +50,15 @@ func main() {
|
||||
server.Static("/static", os.Getenv("STATIC"))
|
||||
server.LoadHTMLGlob(fmt.Sprintf("%s/*.html", os.Getenv("VIEWS")))
|
||||
|
||||
viewRoutes := server.Group("/", authValidator.OptionalAuth)
|
||||
viewRoutes := server.Group("/")
|
||||
{
|
||||
viewRoutes.GET("/login", userController.LoginView)
|
||||
viewRoutes.POST("/login", userController.LoginHandler)
|
||||
|
||||
viewRoutes.GET("/groups", authValidator.RequireAdmin, groupController.GroupView)
|
||||
viewRoutes.POST("/groups", authValidator.RequireAdmin, groupController.AddGroupHandler)
|
||||
//viewRoutes.POST("/groups/:id", authValidator.RequireAdmin, groupController.GroupHandler)
|
||||
|
||||
//write middleware that redirects to homescreen on register/login/reset for logged in users
|
||||
//viewRoutes.GET("/login", userController.LoginView)
|
||||
//viewRoutes.GET("/logout", userController.Logout)
|
||||
|
||||
50
views/groups.html
Normal file
50
views/groups.html
Normal file
@@ -0,0 +1,50 @@
|
||||
{{ template "header.html" . }}
|
||||
|
||||
|
||||
<div class="flex min-h-full flex-col justify-center px-6 py-12 lg:px-8">
|
||||
<div class="sm:mx-auto sm:w-full sm:max-w-sm">
|
||||
<img class="mx-auto h-10 w-auto" src="/static/img/logo-black.png" alt="Your Company">
|
||||
<h2 class="mt-10 text-center text-2xl/9 font-bold tracking-tight text-gray-900">Edit Groups</h2>
|
||||
</div>
|
||||
|
||||
<div class="mt-10 ">
|
||||
<div class="w-full grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 2xl:grid-cols-4 gap-4">
|
||||
{{ range .data.groups }}
|
||||
<form action="/groups/{{ .Id }}" method="POST">
|
||||
<div class="max-w-md mx-auto p-4 m-4 bg-gray-100 flex flex-wrap border rounded shadow-md">
|
||||
<div class="font-bold text-center mb-4">
|
||||
{{ .Name }}
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label for="variant-value1" class="block text-sm/6 font-medium text-gray-900">Name</label>
|
||||
<input type="text" id="name" name="name" value="{{ .Name }}" class="w-full border border-gray-300 rounded-md p-2 focus:outline-none focus:ring focus:ring-blue-500">
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-2 mt-4 flex flex-wrap gap-2 w-full">
|
||||
<button type="submit" name="action" value="update" class="bg-blue-500 hover:bg-blue-700 text-white text-sm/6 font-bold py-2 px-4 rounded">Update</button>
|
||||
<button type="submit" name="action" value="delete" class="bg-red-500 hover:bg-red-700 text-white text-sm/6 font-bold py-2 px-4 rounded">Delete</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{ end }}
|
||||
</div>
|
||||
<form action="/groups" method="POST">
|
||||
<div class="max-w-md mx-auto p-4 flex flex-wrap border rounded shadow-md">
|
||||
<div class="font-bold text-center mb-4">
|
||||
Create New Group
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<label for="variant-value1" class="block text-sm/6 font-medium text-gray-900">Name</label>
|
||||
<input type="text" id="name" name="name" placeholder="name" class="w-full border border-gray-300 rounded-md p-2 focus:outline-none focus:ring focus:ring-blue-500">
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid grid-cols-4 mt-4 flex flex-wrap gap-2 w-full">
|
||||
<button type="submit" class="bg-green-500 hover:bg-green-700 text-white text-sm/6 font-bold py-2 px-4 rounded">Add</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
{{ template "footer.html" . }}
|
||||
|
||||
Reference in New Issue
Block a user