An atproto PDS written in Go
103
fork

Configure Feed

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

at 5100abe77e6b3017ef8155191937e2a59510b105 73 lines 1.9 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 ComAtprotoRepoApplyWritesRequest struct { 10 Repo string `json:"repo" validate:"required,atproto-did"` 11 Validate *bool `json:"bool,omitempty"` 12 Writes []ComAtprotoRepoApplyWritesItem `json:"writes"` 13 SwapCommit *string `json:"swapCommit"` 14} 15 16type ComAtprotoRepoApplyWritesItem struct { 17 Type string `json:"$type"` 18 Collection string `json:"collection"` 19 Rkey string `json:"rkey"` 20 Value *MarshalableMap `json:"value,omitempty"` 21} 22 23type ComAtprotoRepoApplyWritesResponse struct { 24 Commit RepoCommit `json:"commit"` 25 Results []ApplyWriteResult `json:"results"` 26} 27 28func (s *Server) handleApplyWrites(e echo.Context) error { 29 repo := e.Get("repo").(*models.RepoActor) 30 31 var req ComAtprotoRepoApplyWritesRequest 32 if err := e.Bind(&req); err != nil { 33 s.logger.Error("error binding", "error", err) 34 return helpers.ServerError(e, nil) 35 } 36 37 if err := e.Validate(req); err != nil { 38 s.logger.Error("error validating", "error", err) 39 return helpers.InputError(e, nil) 40 } 41 42 if repo.Repo.Did != req.Repo { 43 s.logger.Warn("mismatched repo/auth") 44 return helpers.InputError(e, nil) 45 } 46 47 ops := []Op{} 48 for _, item := range req.Writes { 49 ops = append(ops, Op{ 50 Type: OpType(item.Type), 51 Collection: item.Collection, 52 Rkey: &item.Rkey, 53 Record: item.Value, 54 }) 55 } 56 57 results, err := s.repoman.applyWrites(repo.Repo, ops, req.SwapCommit) 58 if err != nil { 59 s.logger.Error("error applying writes", "error", err) 60 return helpers.ServerError(e, nil) 61 } 62 63 commit := *results[0].Commit 64 65 for i := range results { 66 results[i].Commit = nil 67 } 68 69 return e.JSON(200, ComAtprotoRepoApplyWritesResponse{ 70 Commit: commit, 71 Results: results, 72 }) 73}