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 ComAtprotoRepoDeleteRecordRequest 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 repo := e.Get("repo").(*models.RepoActor)
19
20 var req ComAtprotoRepoDeleteRecordRequest
21 if err := e.Bind(&req); err != nil {
22 s.logger.Error("error binding", "error", err)
23 return helpers.ServerError(e, nil)
24 }
25
26 if err := e.Validate(req); err != nil {
27 s.logger.Error("error validating", "error", err)
28 return helpers.InputError(e, nil)
29 }
30
31 if repo.Repo.Did != req.Repo {
32 s.logger.Warn("mismatched repo/auth")
33 return helpers.InputError(e, nil)
34 }
35
36 results, err := s.repoman.applyWrites(repo.Repo, []Op{
37 {
38 Type: OpTypeDelete,
39 Collection: req.Collection,
40 Rkey: &req.Rkey,
41 SwapRecord: req.SwapRecord,
42 },
43 }, req.SwapCommit)
44 if err != nil {
45 s.logger.Error("error applying writes", "error", err)
46 return helpers.ServerError(e, nil)
47 }
48
49 results[0].Type = nil
50 results[0].Uri = nil
51 results[0].Cid = nil
52 results[0].ValidationStatus = nil
53
54 return e.JSON(200, results[0])
55}