implement guestbook settings db code

This commit is contained in:
yequari 2025-05-25 23:07:44 -07:00
parent 260ddbe740
commit 019b31aa9f

View File

@ -2,6 +2,7 @@ package models
import ( import (
"database/sql" "database/sql"
"strconv"
"time" "time"
) )
@ -13,6 +14,14 @@ type GuestbookSettings struct {
AllowRemoteHostAccess bool AllowRemoteHostAccess bool
} }
const (
SettingGbCommentingEnabled = "commenting_enabled"
SettingGbReenableComments = "reenable_comments"
SettingGbVisible = "is_visible"
SettingGbFilteredWords = "filtered_words"
SettingGbAllowRemote = "remote_enabled"
)
type Guestbook struct { type Guestbook struct {
ID int64 ID int64
ShortId uint64 ShortId uint64
@ -25,10 +34,43 @@ type Guestbook struct {
} }
type GuestbookModel struct { type GuestbookModel struct {
DB *sql.DB DB *sql.DB
Settings map[string]Setting
} }
func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64) (int64, error) { func (m *GuestbookModel) InitializeSettingsMap() error {
if m.Settings == nil {
m.Settings = make(map[string]Setting)
}
stmt := `SELECT settings.Id, settings.Description, Constrained, d.Id, d.Description, g.Id, g.Description, MinValue, MaxValue
FROM settings
LEFT JOIN setting_data_types d ON settings.DataType = d.Id
LEFT JOIN setting_groups g ON settings.SettingGroup = g.Id
WHERE SettingGroup = (SELECT Id FROM setting_groups WHERE Description = 'guestbook' LIMIT 1)`
result, err := m.DB.Query(stmt)
if err != nil {
return err
}
for result.Next() {
var s Setting
var mn sql.NullString
var mx sql.NullString
err := result.Scan(&s.id, &s.description, &s.constrained, &s.dataType.id, &s.dataType.description, &s.settingGroup.id, &s.settingGroup.description, &mn, &mx)
if mn.Valid {
s.minValue = mn.String
}
if mx.Valid {
s.maxValue = mx.String
}
if err != nil {
return err
}
m.Settings[s.description] = s
}
return nil
}
func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64, settings GuestbookSettings) (int64, error) {
stmt := `INSERT INTO guestbooks (ShortId, UserId, WebsiteId, Created, IsActive) stmt := `INSERT INTO guestbooks (ShortId, UserId, WebsiteId, Created, IsActive)
VALUES(?, ?, ?, ?, TRUE)` VALUES(?, ?, ?, ?, TRUE)`
result, err := m.DB.Exec(stmt, shortId, userId, websiteId, time.Now().UTC()) result, err := m.DB.Exec(stmt, shortId, userId, websiteId, time.Now().UTC())
@ -39,6 +81,10 @@ func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64) (
if err != nil { if err != nil {
return -1, err return -1, err
} }
err = m.initializeGuestbookSettings(id, settings)
if err != nil {
return id, err
}
return id, nil return id, nil
} }
@ -80,35 +126,55 @@ func (m *GuestbookModel) GetAll(userId int64) ([]Guestbook, error) {
return guestbooks, nil return guestbooks, nil
} }
func (m *GuestbookModel) initializeGuestbookSettings(guestbookId int64, settings UserSettings) error { func (m *GuestbookModel) initializeGuestbookSettings(guestbookId int64, settings GuestbookSettings) error {
stmt := `INSERT INTO guestbook_settings (GuestbookId, SettingId, AllowedSettingValueId, UnconstrainedValue) VALUES stmt := `INSERT INTO guestbook_settings (GuestbookId, SettingId, AllowedSettingValueId, UnconstrainedValue) VALUES
(?, ?, ?, ?), (?, ?, ?, ?),
(?, ?, ?, ?), (?, ?, ?, ?),
(?, ?, ?, ?), (?, ?, ?, ?),
(?, ?, ?, ?), (?, ?, ?, ?),
(?, ?, ?, ?)` (?, ?, ?, ?)`
_ = len(stmt) _, err := m.DB.Exec(stmt,
guestbookId, m.Settings[SettingGbCommentingEnabled].id, settings.IsCommentingEnabled, nil,
guestbookId, m.Settings[SettingGbReenableComments].id, nil, settings.ReenableCommenting.String(),
guestbookId, m.Settings[SettingGbVisible].id, settings.IsVisible, nil,
guestbookId, m.Settings[SettingGbAllowRemote].id, settings.AllowRemoteHostAccess, nil)
if err != nil {
return err
}
return nil return nil
} }
func (m *GuestbookModel) UpdateSetting(guestbookId int64, value string) { func (m *GuestbookModel) UpdateGuestbookSettings(guestbookId int64, settings GuestbookSettings) error {
err := m.UpdateSetting(guestbookId, m.Settings[SettingGbCommentingEnabled], strconv.FormatBool(settings.IsCommentingEnabled))
if err != nil {
return err
}
err = m.UpdateSetting(guestbookId, m.Settings[SettingGbReenableComments], settings.ReenableCommenting.String())
if err != nil {
return err
}
return nil
}
func (m *GuestbookModel) UpdateSetting(guestbookId int64, setting Setting, value string) error {
stmt := `UPDATE guestbook_settings SET stmt := `UPDATE guestbook_settings SET
AllowedSettingValueId=IFNULL((SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId), AllowedSettingValueId=IFNULL(
UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0) (SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId
WHERE GuestbookId = ? ),
AND SettingId = (SELECT Id from Settings WHERE Description=?);` UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0)
_ = len(stmt) WHERE GuestbookId = ?
} AND SettingId = (SELECT Id from Settings WHERE Description=?);`
result, err := m.DB.Exec(stmt, value, value, guestbookId, setting.description)
func (m *GuestbookModel) SetCommentingEnabled(guestbookId int64, enabled bool) error { if err != nil {
return nil return err
} }
rows, err := result.RowsAffected()
func (m *GuestbookModel) SetReenableCommentingDate(guestbookId int64, reenableTime time.Time) error { if err != nil {
return nil return err
} }
if rows != 1 {
func (m *GuestbookModel) SetVisible(guestbookId int64, visible bool) error { return ErrInvalidSettingValue
}
return nil return nil
} }
@ -119,7 +185,3 @@ func (m *GuestbookModel) AddFilteredWord(guestbookId int64, word string) error {
func (m *GuestbookModel) RemoveFilteredWord(guestbookId int64, word string) error { func (m *GuestbookModel) RemoveFilteredWord(guestbookId int64, word string) error {
return nil return nil
} }
func (m *GuestbookModel) SetRemoteHostAccess(guestbookId int64, allowed bool) error {
return nil
}