this repo has no description
1package repo 2 3import ( 4 "context" 5 "log/slog" 6 "time" 7 8 "github.com/bluesky-social/indigo/api/atproto" 9 "tangled.org/core/api/tangled" 10 "tangled.org/core/appview/config" 11 "tangled.org/core/appview/db" 12 "tangled.org/core/appview/models" 13 "tangled.org/core/appview/session" 14 "tangled.org/core/rbac" 15 "tangled.org/core/tid" 16) 17 18type Service struct { 19 logger *slog.Logger 20 config *config.Config 21 db *db.DB 22 enforcer *rbac.Enforcer 23} 24 25func NewService( 26 logger *slog.Logger, 27 config *config.Config, 28 db *db.DB, 29 enforcer *rbac.Enforcer, 30) Service { 31 return Service{ 32 logger, 33 config, 34 db, 35 enforcer, 36 } 37} 38 39// NewRepo creates a repository 40// It expects atproto session to be passed in `ctx` 41func (s *Service) NewRepo(ctx context.Context, name, description, knot string) (*models.Repo, error) { 42 l := s.logger.With("method", "NewRepo") 43 sess := session.FromContext(ctx) 44 if sess == nil { 45 l.Error("user session is missing in context") 46 return nil, ErrForbidden 47 } 48 49 ownerDid := sess.Data.AccountDID 50 l = l.With("did", ownerDid) 51 52 repo := models.Repo{ 53 Did: ownerDid.String(), 54 Name: name, 55 Knot: knot, 56 Rkey: tid.TID(), 57 Description: description, 58 Created: time.Now(), 59 Labels: s.config.Label.DefaultLabelDefs, 60 } 61 l = l.With("aturi", repo.RepoAt()) 62 63 tx, err := s.db.BeginTx(ctx, nil) 64 if err != nil { 65 l.Error("db.BeginTx failed", "err", err) 66 return nil, ErrDatabaseFail 67 } 68 defer tx.Rollback() 69 70 if err = db.AddRepo(tx, &repo); err != nil { 71 l.Error("db.AddRepo failed", "err", err) 72 return nil, ErrDatabaseFail 73 } 74 75 atpclient := sess.APIClient() 76 _, err = atproto.RepoPutRecord(ctx, atpclient, &atproto.RepoPutRecord_Input{ 77 Collection: tangled.RepoNSID, 78 Repo: repo.Did, 79 }) 80 if err != nil { 81 l.Error("atproto.RepoPutRecord failed", "err", err) 82 return nil, ErrPDSFail 83 } 84 l.Info("wrote to PDS") 85 86 // knotclient, err := s.oauth.ServiceClient( 87 // ) 88 panic("unimplemented") 89}