fork
Configure Feed
Select the types of activity you want to include in your feed.
Live video on the AT Protocol
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package model
2
3import (
4 "context"
5 "errors"
6 "fmt"
7 "time"
8
9 lexutil "github.com/bluesky-social/indigo/lex/util"
10 "gorm.io/gorm"
11 "stream.place/streamplace/pkg/streamplace"
12)
13
14// ServerSettings represents a user's settings for a particular Streamplace node
15type ServerSettings struct {
16 Server string `gorm:"primaryKey;column:server"`
17 RepoDID string `gorm:"primaryKey;column:repo_did"`
18 Record *[]byte `gorm:"column:record"`
19 Created time.Time `gorm:"column:created;not null"`
20 Updated time.Time `gorm:"column:updated;not null"`
21}
22
23// TableName specifies the table name for the ServerSettings model
24func (ServerSettings) TableName() string {
25 return "server_settings"
26}
27
28// ToStreamplaceServerSettings converts the model to a streamplace ServerSettings
29func (m *ServerSettings) ToStreamplaceServerSettings() (*streamplace.ServerSettings, error) {
30 if m.Record == nil {
31 return nil, fmt.Errorf("no record data")
32 }
33 rec, err := lexutil.CborDecodeValue(*m.Record)
34 if err != nil {
35 return nil, fmt.Errorf("error decoding server settings: %w", err)
36 }
37 ss, ok := rec.(*streamplace.ServerSettings)
38 if !ok {
39 return nil, fmt.Errorf("invalid server settings")
40 }
41 return ss, nil
42}
43
44// UpdateServerSettings creates or updates a server settings record
45func (m *DBModel) UpdateServerSettings(ctx context.Context, settings *ServerSettings) error {
46 now := time.Now()
47 if settings.Created.IsZero() {
48 settings.Created = now
49 }
50 settings.Updated = now
51 return m.DB.Save(settings).Error
52}
53
54// GetServerSettings retrieves server settings for a given server and repoDID
55func (m *DBModel) GetServerSettings(ctx context.Context, server string, repoDID string) (*ServerSettings, error) {
56 var settings ServerSettings
57 err := m.DB.Where("server = ? AND repo_did = ?", server, repoDID).First(&settings).Error
58 if errors.Is(err, gorm.ErrRecordNotFound) {
59 return nil, nil
60 }
61 if err != nil {
62 return nil, err
63 }
64 return &settings, nil
65}
66
67// DeleteServerSettings deletes server settings for a given server and repoDID
68func (m *DBModel) DeleteServerSettings(ctx context.Context, server string, repoDID string) error {
69 return m.DB.Where("server = ? AND repo_did = ?", server, repoDID).Delete(&ServerSettings{}).Error
70}