An atproto PDS written in Go
103
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 0.3.5 61 lines 1.6 kB view raw
1package server 2 3import ( 4 "github.com/haileyok/cocoon/internal/helpers" 5 "github.com/haileyok/cocoon/models" 6 "github.com/labstack/echo/v4" 7) 8 9type ComAtprotoRepoCreateRecordRequest struct { 10 Repo string `json:"repo" validate:"required,atproto-did"` 11 Collection string `json:"collection" validate:"required,atproto-nsid"` 12 Rkey *string `json:"rkey,omitempty"` 13 Validate *bool `json:"bool,omitempty"` 14 Record MarshalableMap `json:"record" validate:"required"` 15 SwapRecord *string `json:"swapRecord"` 16 SwapCommit *string `json:"swapCommit"` 17} 18 19func (s *Server) handleCreateRecord(e echo.Context) error { 20 repo := e.Get("repo").(*models.RepoActor) 21 22 var req ComAtprotoRepoCreateRecordRequest 23 if err := e.Bind(&req); err != nil { 24 s.logger.Error("error binding", "error", err) 25 return helpers.ServerError(e, nil) 26 } 27 28 if err := e.Validate(req); err != nil { 29 s.logger.Error("error validating", "error", err) 30 return helpers.InputError(e, nil) 31 } 32 33 if repo.Repo.Did != req.Repo { 34 s.logger.Warn("mismatched repo/auth") 35 return helpers.InputError(e, nil) 36 } 37 38 optype := OpTypeCreate 39 if req.SwapRecord != nil { 40 optype = OpTypeUpdate 41 } 42 43 results, err := s.repoman.applyWrites(repo.Repo, []Op{ 44 { 45 Type: optype, 46 Collection: req.Collection, 47 Rkey: req.Rkey, 48 Validate: req.Validate, 49 Record: &req.Record, 50 SwapRecord: req.SwapRecord, 51 }, 52 }, req.SwapCommit) 53 if err != nil { 54 s.logger.Error("error applying writes", "error", err) 55 return helpers.ServerError(e, nil) 56 } 57 58 results[0].Type = nil 59 60 return e.JSON(200, results[0]) 61}