1package server
2
3import (
4 "github.com/haileyok/cocoon/internal/helpers"
5 "github.com/haileyok/cocoon/models"
6 "github.com/ipfs/go-cid"
7 "github.com/labstack/echo/v4"
8)
9
10type ComAtprotoServerCheckAccountStatusResponse struct {
11 Activated bool `json:"activated"`
12 ValidDid bool `json:"validDid"`
13 RepoCommit string `json:"repoCommit"`
14 RepoRev string `json:"repoRev"`
15 RepoBlocks int64 `json:"repoBlocks"`
16 IndexedRecords int64 `json:"indexedRecords"`
17 PrivateStateValues int64 `json:"privateStateValues"`
18 ExpectedBlobs int64 `json:"expectedBlobs"`
19 ImportedBlobs int64 `json:"importedBlobs"`
20}
21
22func (s *Server) handleServerCheckAccountStatus(e echo.Context) error {
23 ctx := e.Request().Context()
24
25 urepo := e.Get("repo").(*models.RepoActor)
26
27 resp := ComAtprotoServerCheckAccountStatusResponse{
28 Activated: true, // TODO: should allow for deactivation etc.
29 ValidDid: true, // TODO: should probably verify?
30 RepoRev: urepo.Rev,
31 ImportedBlobs: 0, // TODO: ???
32 }
33
34 rootcid, err := cid.Cast(urepo.Root)
35 if err != nil {
36 s.logger.Error("error casting cid", "error", err)
37 return helpers.ServerError(e, nil)
38 }
39 resp.RepoCommit = rootcid.String()
40
41 type CountResp struct {
42 Ct int64
43 }
44
45 var blockCtResp CountResp
46 if err := s.db.Raw(ctx, "SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil {
47 s.logger.Error("error getting block count", "error", err)
48 return helpers.ServerError(e, nil)
49 }
50 resp.RepoBlocks = blockCtResp.Ct
51
52 var recCtResp CountResp
53 if err := s.db.Raw(ctx, "SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil {
54 s.logger.Error("error getting record count", "error", err)
55 return helpers.ServerError(e, nil)
56 }
57 resp.IndexedRecords = recCtResp.Ct
58
59 var blobCtResp CountResp
60 if err := s.db.Raw(ctx, "SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil {
61 s.logger.Error("error getting record count", "error", err)
62 return helpers.ServerError(e, nil)
63 }
64 resp.ExpectedBlobs = blobCtResp.Ct
65
66 return e.JSON(200, resp)
67}