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 ctx := e.Request().Context()
19
20 repo := e.Get("repo").(*models.RepoActor)
21
22 var req ComAtprotoRepoDeleteRecordRequest
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 results, err := s.repoman.applyWrites(ctx, repo.Repo, []Op{
39 {
40 Type: OpTypeDelete,
41 Collection: req.Collection,
42 Rkey: &req.Rkey,
43 SwapRecord: req.SwapRecord,
44 },
45 }, req.SwapCommit)
46 if err != nil {
47 s.logger.Error("error applying writes", "error", err)
48 return helpers.ServerError(e, nil)
49 }
50
51 results[0].Type = nil
52 results[0].Uri = nil
53 results[0].Cid = nil
54 results[0].ValidationStatus = nil
55
56 return e.JSON(200, results[0])
57}