Move code for working with db into functions that process requests

This commit is contained in:
Ivan R. 2023-07-21 09:48:57 +05:00
parent 2029b8ec19
commit 81b7e6f896
No known key found for this signature in database
GPG key ID: 56C7BAAE859B302C
6 changed files with 51 additions and 109 deletions

View file

@ -1,53 +1,7 @@
package backend
import (
"gorm.io/gorm"
)
type Group struct {
ID uint64 `gorm:"primaryKey"`
Name string `gorm:"unique,notNull"`
Links []Link `gorm:"constraint:OnDelete:CASCADE;"`
}
func GetGroups(db *gorm.DB) ([]Group, error) {
var groups []Group
result := db.Model(&Group{}).Preload("Links").Find(&groups)
if result.Error != nil {
return nil, result.Error
}
return groups, nil
}
func CreateGroup(db *gorm.DB, groupName string) (Group, error) {
group := Group{
Name: groupName,
}
result := db.Create(&group)
if result.Error != nil {
return Group{}, result.Error
}
return group, nil
}
func UpdateGroup(db *gorm.DB, id uint64, groupName string) (Group, error) {
var group Group
db.First(&group, id)
group.Name = groupName
result := db.Save(&group)
if result.Error != nil {
return Group{}, result.Error
}
return group, nil
}
func DeleteGroup(db *gorm.DB, id uint64) error {
result := db.Delete(&Group{}, id)
if result.Error != nil {
return result.Error
}
return nil
}

View file

@ -1,48 +1,8 @@
package backend
import (
"gorm.io/gorm"
)
type Link struct {
ID uint64 `gorm:"primaryKey"`
Name string `gorm:"notNull"`
Href string `gorm:"notNull"`
GroupID uint64 `gorm:"notNull"`
}
func CreateLink(db *gorm.DB, linkName string, href string, groupID uint64) (Link, error) {
link := Link{
Name: linkName,
Href: href,
GroupID: groupID,
}
result := db.Create(&link)
if result.Error != nil {
return Link{}, result.Error
}
return link, nil
}
func UpdateLink(db *gorm.DB, id uint64, linkName string, href string) (Link, error) {
var link Link
db.First(&link, id)
link.Name = linkName
link.Href = href
result := db.Save(&link)
if result.Error != nil {
return Link{}, result.Error
}
return link, nil
}
func DeleteLink(db *gorm.DB, id uint64) error {
result := db.Delete(&Link{}, id)
if result.Error != nil {
return result.Error
}
return nil
}

View file

@ -14,9 +14,11 @@ func CreateGroup(c *gin.Context, db *gorm.DB) {
}
// Save new group to the database.
groupName := c.PostForm("groupName")
if _, err := backend.CreateGroup(db, groupName); err != nil {
ShowError(c, err)
group := backend.Group{
Name: c.PostForm("groupName"),
}
if result := db.Create(&group); result.Error != nil {
ShowError(c, result.Error)
return
}
@ -34,9 +36,16 @@ func UpdateGroup(c *gin.Context, db *gorm.DB) {
ShowError(c, err)
return
}
groupName := c.PostForm("groupName")
if _, err := backend.UpdateGroup(db, id, groupName); err != nil {
ShowError(c, err)
var group backend.Group
if result := db.First(&group, id); result.Error != nil {
ShowError(c, result.Error)
return
}
group.Name = c.PostForm("groupName")
if result := db.Save(&group); result.Error != nil {
ShowError(c, result.Error)
return
}
@ -55,8 +64,8 @@ func DeleteGroup(c *gin.Context, db *gorm.DB) {
return
}
if err = backend.DeleteGroup(db, id); err != nil {
ShowError(c, err)
if result := db.Delete(&backend.Group{}, id); result.Error != nil {
ShowError(c, result.Error)
return
}

View file

@ -13,9 +13,14 @@ func ShowMainPage(c *gin.Context, db *gorm.DB) {
}
// Get a list of groups with links
groups, err := backend.GetGroups(db)
if err != nil {
ShowError(c, err)
var groups []backend.Group
result := db.
Model(&backend.Group{}).
Preload("Links").
Find(&groups)
if result.Error != nil {
ShowError(c, result.Error)
return
}

View file

@ -13,16 +13,19 @@ func CreateLink(c *gin.Context, db *gorm.DB) {
return
}
linkName := c.PostForm("linkName")
href := c.PostForm("href")
groupID, err := strconv.ParseUint(c.PostForm("groupID"), 10, 32)
if err != nil {
ShowError(c, err)
return
}
if _, err = backend.CreateLink(db, linkName, href, groupID); err != nil {
ShowError(c, err)
link := backend.Link{
Name: c.PostForm("linkName"),
Href: c.PostForm("href"),
GroupID: groupID,
}
if result := db.Create(&link); result.Error != nil {
ShowError(c, result.Error)
return
}
@ -40,14 +43,20 @@ func UpdateLink(c *gin.Context, db *gorm.DB) {
ShowError(c, err)
return
}
linkName := c.PostForm("linkName")
href := c.PostForm("href")
if _, err = backend.UpdateLink(db, id, linkName, href); err != nil {
var link backend.Link
if result := db.First(&link, id); result.Error != nil {
ShowError(c, err)
return
}
link.Name = c.PostForm("linkName")
link.Href = c.PostForm("href")
if result := db.Save(&link); result.Error != nil {
ShowError(c, result.Error)
return
}
// Redirect to settings.
c.Redirect(http.StatusFound, "/settings")
}
@ -63,8 +72,8 @@ func DeleteLink(c *gin.Context, db *gorm.DB) {
return
}
if err = backend.DeleteLink(db, id); err != nil {
ShowError(c, err)
if result := db.Delete(&backend.Link{}, id); result.Error != nil {
ShowError(c, result.Error)
return
}

View file

@ -13,9 +13,14 @@ func ShowSettings(c *gin.Context, db *gorm.DB) {
}
// Get a list of groups with links
groups, err := backend.GetGroups(db)
if err != nil {
ShowError(c, err)
var groups []backend.Group
result := db.
Model(&backend.Group{}).
Preload("Links").
Find(&groups)
if result.Error != nil {
ShowError(c, result.Error)
return
}