Live video on the AT Protocol
1package model
2
3import (
4 "context"
5 "errors"
6 "fmt"
7
8 lexutil "github.com/bluesky-social/indigo/lex/util"
9 "gorm.io/gorm"
10 "stream.place/streamplace/pkg/streamplace"
11)
12
13type MetadataConfiguration struct {
14 RepoDID string `json:"repoDID" gorm:"primarykey;column:repo_did"`
15 Repo *Repo `json:"repo,omitempty" gorm:"foreignKey:DID;references:RepoDID"`
16 Record *[]byte
17}
18
19func (m *MetadataConfiguration) ToStreamplaceMetadataConfiguration() (*streamplace.MetadataConfiguration, error) {
20 rec, err := lexutil.CborDecodeValue(*m.Record)
21 if err != nil {
22 return nil, fmt.Errorf("error decoding feed post: %w", err)
23 }
24 sdm, ok := rec.(*streamplace.MetadataConfiguration)
25 if !ok {
26 return nil, fmt.Errorf("invalid metadata configuration")
27 }
28 return sdm, nil
29}
30
31func (m *DBModel) CreateMetadataConfiguration(ctx context.Context, metadata *MetadataConfiguration) error {
32 err := m.DB.Save(metadata).Error
33 if err != nil {
34 return err
35 }
36 return nil
37}
38
39func (m *DBModel) GetMetadataConfiguration(ctx context.Context, repoDID string) (*MetadataConfiguration, error) {
40 var metadata MetadataConfiguration
41 err := m.DB.Where("repo_did = ?", repoDID).First(&metadata).Error
42 if errors.Is(err, gorm.ErrRecordNotFound) {
43 return nil, nil
44 }
45 if err != nil {
46 return nil, err
47 }
48 return &metadata, nil
49}
50
51func (m *DBModel) DeleteMetadataConfiguration(ctx context.Context, repoDID string) error {
52 err := m.DB.Where("repo_did = ?", repoDID).Delete(&MetadataConfiguration{}).Error
53 if err != nil {
54 return err
55 }
56 return nil
57}