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 urepo := e.Get("repo").(*models.RepoActor)
24
25 resp := ComAtprotoServerCheckAccountStatusResponse{
26 Activated: true, // TODO: should allow for deactivation etc.
27 ValidDid: true, // TODO: should probably verify?
28 RepoRev: urepo.Rev,
29 ImportedBlobs: 0, // TODO: ???
30 }
31
32 rootcid, err := cid.Cast(urepo.Root)
33 if err != nil {
34 s.logger.Error("error casting cid", "error", err)
35 return helpers.ServerError(e, nil)
36 }
37 resp.RepoCommit = rootcid.String()
38
39 type CountResp struct {
40 Ct int64
41 }
42
43 var blockCtResp CountResp
44 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil {
45 s.logger.Error("error getting block count", "error", err)
46 return helpers.ServerError(e, nil)
47 }
48 resp.RepoBlocks = blockCtResp.Ct
49
50 var recCtResp CountResp
51 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil {
52 s.logger.Error("error getting record count", "error", err)
53 return helpers.ServerError(e, nil)
54 }
55 resp.IndexedRecords = recCtResp.Ct
56
57 var blobCtResp CountResp
58 if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil {
59 s.logger.Error("error getting record count", "error", err)
60 return helpers.ServerError(e, nil)
61 }
62 resp.ExpectedBlobs = blobCtResp.Ct
63
64 return e.JSON(200, resp)
65}