+46
-15
server/handle_server_check_account_status.go
+46
-15
server/handle_server_check_account_status.go
···
1
1
package server
2
2
3
3
import (
4
+
"errors"
5
+
"sync"
6
+
7
+
"github.com/bluesky-social/indigo/atproto/syntax"
4
8
"github.com/haileyok/cocoon/internal/helpers"
5
9
"github.com/haileyok/cocoon/models"
6
10
"github.com/ipfs/go-cid"
···
22
26
func (s *Server) handleServerCheckAccountStatus(e echo.Context) error {
23
27
urepo := e.Get("repo").(*models.RepoActor)
24
28
29
+
_, didErr := syntax.ParseDID(urepo.Repo.Did)
30
+
if didErr != nil {
31
+
s.logger.Error("error validating did", "err", didErr)
32
+
}
33
+
25
34
resp := ComAtprotoServerCheckAccountStatusResponse{
26
35
Activated: true, // TODO: should allow for deactivation etc.
27
-
ValidDid: true, // TODO: should probably verify?
36
+
ValidDid: didErr == nil,
28
37
RepoRev: urepo.Rev,
29
38
ImportedBlobs: 0, // TODO: ???
30
39
}
···
34
43
s.logger.Error("error casting cid", "error", err)
35
44
return helpers.ServerError(e, nil)
36
45
}
46
+
37
47
resp.RepoCommit = rootcid.String()
38
48
39
49
type CountResp struct {
···
41
51
}
42
52
43
53
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
54
+
var recCtResp CountResp
55
+
var blobCtResp CountResp
56
+
57
+
var wg sync.WaitGroup
58
+
var procErr error
59
+
60
+
wg.Add(1)
61
+
go func() {
62
+
defer wg.Done()
63
+
if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil {
64
+
s.logger.Error("error getting block count", "error", err)
65
+
procErr = errors.Join(procErr, err)
66
+
}
67
+
}()
68
+
69
+
wg.Add(1)
70
+
go func() {
71
+
defer wg.Done()
72
+
if err := s.db.Raw("SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil {
73
+
s.logger.Error("error getting record count", "error", err)
74
+
procErr = errors.Join(procErr, err)
75
+
}
76
+
}()
49
77
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
78
+
wg.Add(1)
79
+
go func() {
80
+
if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil {
81
+
s.logger.Error("error getting expected blobs count", "error", err)
82
+
procErr = errors.Join(procErr, err)
83
+
}
84
+
}()
56
85
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)
86
+
wg.Wait()
87
+
if procErr != nil {
60
88
return helpers.ServerError(e, nil)
61
89
}
90
+
91
+
resp.RepoBlocks = blockCtResp.Ct
92
+
resp.IndexedRecords = recCtResp.Ct
62
93
resp.ExpectedBlobs = blobCtResp.Ct
63
94
64
95
return e.JSON(200, resp)