this repo has no description
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 23func (s *Server) handleApplyWrites(e echo.Context) error { 24 repo := e.Get("repo").(*models.RepoActor) 25 26 var req ComAtprotoRepoApplyWritesRequest 27 if err := e.Bind(&req); err != nil { 28 s.logger.Error("error binding", "error", err) 29 return helpers.ServerError(e, nil) 30 } 31 32 if err := e.Validate(req); err != nil { 33 s.logger.Error("error validating", "error", err) 34 return helpers.InputError(e, nil) 35 } 36 37 if repo.Repo.Did != req.Repo { 38 s.logger.Warn("mismatched repo/auth") 39 return helpers.InputError(e, nil) 40 } 41 42 ops := []Op{} 43 for _, item := range req.Writes { 44 ops = append(ops, Op{ 45 Type: OpType(item.Type), 46 Collection: item.Collection, 47 Rkey: &item.Rkey, 48 Record: item.Value, 49 }) 50 } 51 52 if err := s.repoman.applyWrites(repo.Repo, ops, req.SwapCommit); err != nil { 53 s.logger.Error("error applying writes", "error", err) 54 return helpers.ServerError(e, nil) 55 } 56 57 return nil 58}