From 019b31aa9f71cd52d77a6fbd8572f65241b76b00 Mon Sep 17 00:00:00 2001 From: yequari Date: Sun, 25 May 2025 23:07:44 -0700 Subject: [PATCH] implement guestbook settings db code --- internal/models/guestbook.go | 112 +++++++++++++++++++++++++++-------- 1 file changed, 87 insertions(+), 25 deletions(-) diff --git a/internal/models/guestbook.go b/internal/models/guestbook.go index c072c3b..a9e762a 100644 --- a/internal/models/guestbook.go +++ b/internal/models/guestbook.go @@ -2,6 +2,7 @@ package models import ( "database/sql" + "strconv" "time" ) @@ -13,6 +14,14 @@ type GuestbookSettings struct { AllowRemoteHostAccess bool } +const ( + SettingGbCommentingEnabled = "commenting_enabled" + SettingGbReenableComments = "reenable_comments" + SettingGbVisible = "is_visible" + SettingGbFilteredWords = "filtered_words" + SettingGbAllowRemote = "remote_enabled" +) + type Guestbook struct { ID int64 ShortId uint64 @@ -25,10 +34,43 @@ type Guestbook 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) VALUES(?, ?, ?, ?, TRUE)` 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 { return -1, err } + err = m.initializeGuestbookSettings(id, settings) + if err != nil { + return id, err + } return id, nil } @@ -80,35 +126,55 @@ func (m *GuestbookModel) GetAll(userId int64) ([]Guestbook, error) { 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 (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?)` - _ = 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 } -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 - AllowedSettingValueId=IFNULL((SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId), - UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0) - WHERE GuestbookId = ? - AND SettingId = (SELECT Id from Settings WHERE Description=?);` - _ = len(stmt) -} - -func (m *GuestbookModel) SetCommentingEnabled(guestbookId int64, enabled bool) error { - return nil -} - -func (m *GuestbookModel) SetReenableCommentingDate(guestbookId int64, reenableTime time.Time) error { - return nil -} - -func (m *GuestbookModel) SetVisible(guestbookId int64, visible bool) error { + AllowedSettingValueId=IFNULL( + (SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId + ), + UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0) + WHERE GuestbookId = ? + AND SettingId = (SELECT Id from Settings WHERE Description=?);` + result, err := m.DB.Exec(stmt, value, value, guestbookId, setting.description) + if err != nil { + return err + } + rows, err := result.RowsAffected() + if err != nil { + return err + } + if rows != 1 { + return ErrInvalidSettingValue + } return nil } @@ -119,7 +185,3 @@ func (m *GuestbookModel) AddFilteredWord(guestbookId int64, word string) error { func (m *GuestbookModel) RemoveFilteredWord(guestbookId int64, word string) error { return nil } - -func (m *GuestbookModel) SetRemoteHostAccess(guestbookId int64, allowed bool) error { - return nil -}