forked from hailey.at/cocoon
An atproto PDS written in Go
at main 1.5 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 ComAtprotoRepoDeleteRecordInput struct { 10 Repo string `json:"repo" validate:"required,atproto-did"` 11 Collection string `json:"collection" validate:"required,atproto-nsid"` 12 Rkey string `json:"rkey" validate:"required,atproto-rkey"` 13 SwapRecord *string `json:"swapRecord"` 14 SwapCommit *string `json:"swapCommit"` 15} 16 17func (s *Server) handleDeleteRecord(e echo.Context) error { 18 ctx := e.Request().Context() 19 logger := s.logger.With("name", "handleDeleteRecord") 20 21 repo := e.Get("repo").(*models.RepoActor) 22 23 var req ComAtprotoRepoDeleteRecordInput 24 if err := e.Bind(&req); err != nil { 25 logger.Error("error binding", "error", err) 26 return helpers.ServerError(e, nil) 27 } 28 29 if err := e.Validate(req); err != nil { 30 logger.Error("error validating", "error", err) 31 return helpers.InputError(e, nil) 32 } 33 34 if repo.Repo.Did != req.Repo { 35 logger.Warn("mismatched repo/auth") 36 return helpers.InputError(e, nil) 37 } 38 39 results, err := s.repoman.applyWrites(ctx, repo.Repo, []Op{ 40 { 41 Type: OpTypeDelete, 42 Collection: req.Collection, 43 Rkey: &req.Rkey, 44 SwapRecord: req.SwapRecord, 45 }, 46 }, req.SwapCommit) 47 if err != nil { 48 logger.Error("error applying writes", "error", err) 49 return helpers.ServerError(e, nil) 50 } 51 52 results[0].Type = nil 53 results[0].Uri = nil 54 results[0].Cid = nil 55 results[0].ValidationStatus = nil 56 57 return e.JSON(200, results[0]) 58}