···64 }
6566 var records []models.Record
67- if err := s.db.Raw("SELECT DISTINCT(nsid) FROM records WHERE did = ?", repo.Repo.Did).Scan(&records).Error; err != nil {
68 s.logger.Error("error getting collections", "error", err)
69 return helpers.ServerError(e, nil)
70 }
···64 }
6566 var records []models.Record
67+ if err := s.db.Raw("SELECT DISTINCT(nsid) FROM records WHERE did = ?", nil, repo.Repo.Did).Scan(&records).Error; err != nil {
68 s.logger.Error("error getting collections", "error", err)
69 return helpers.ServerError(e, nil)
70 }
+1-1
server/handle_repo_get_record.go
···32 }
3334 var record models.Record
35- if err := s.db.Raw("SELECT * FROM records WHERE did = ? AND nsid = ? AND rkey = ?"+cidquery, params...).Scan(&record).Error; err != nil {
36 // TODO: handle error nicely
37 return err
38 }
···32 }
3334 var record models.Record
35+ if err := s.db.Raw("SELECT * FROM records WHERE did = ? AND nsid = ? AND rkey = ?"+cidquery, nil, params...).Scan(&record).Error; err != nil {
36 // TODO: handle error nicely
37 return err
38 }
+1-1
server/handle_repo_list_records.go
···64 params = append(params, limit)
6566 var records []models.Record
67- if err := s.db.Raw("SELECT * FROM records WHERE did = ? AND nsid = ? "+cursorquery+" ORDER BY created_at "+sort+" limit ?", params...).Scan(&records).Error; err != nil {
68 s.logger.Error("error getting records", "error", err)
69 return helpers.ServerError(e, nil)
70 }
···64 params = append(params, limit)
6566 var records []models.Record
67+ if err := s.db.Raw("SELECT * FROM records WHERE did = ? AND nsid = ? "+cursorquery+" ORDER BY created_at "+sort+" limit ?", nil, params...).Scan(&records).Error; err != nil {
68 s.logger.Error("error getting records", "error", err)
69 return helpers.ServerError(e, nil)
70 }
+1-1
server/handle_repo_list_repos.go
···22// TODO: paginate this bitch
23func (s *Server) handleListRepos(e echo.Context) error {
24 var repos []models.Repo
25- if err := s.db.Raw("SELECT * FROM repos ORDER BY created_at DESC LIMIT 500").Scan(&repos).Error; err != nil {
26 return err
27 }
28
···22// TODO: paginate this bitch
23func (s *Server) handleListRepos(e echo.Context) error {
24 var repos []models.Repo
25+ if err := s.db.Raw("SELECT * FROM repos ORDER BY created_at DESC LIMIT 500", nil).Scan(&repos).Error; err != nil {
26 return err
27 }
28
+3-3
server/handle_repo_upload_blob.go
···40 CreatedAt: s.repoman.clock.Next().String(),
41 }
4243- if err := s.db.Create(&blob).Error; err != nil {
44 s.logger.Error("error creating new blob in db", "error", err)
45 return helpers.ServerError(e, nil)
46 }
···72 Data: data,
73 }
7475- if err := s.db.Create(&blobPart).Error; err != nil {
76 s.logger.Error("error adding blob part to db", "error", err)
77 return helpers.ServerError(e, nil)
78 }
···89 return helpers.ServerError(e, nil)
90 }
9192- if err := s.db.Exec("UPDATE blobs SET cid = ? WHERE id = ?", c.Bytes(), blob.ID).Error; err != nil {
93 // there should probably be somme handling here if this fails...
94 s.logger.Error("error updating blob", "error", err)
95 return helpers.ServerError(e, nil)
···40 CreatedAt: s.repoman.clock.Next().String(),
41 }
4243+ if err := s.db.Create(&blob, nil).Error; err != nil {
44 s.logger.Error("error creating new blob in db", "error", err)
45 return helpers.ServerError(e, nil)
46 }
···72 Data: data,
73 }
7475+ if err := s.db.Create(&blobPart, nil).Error; err != nil {
76 s.logger.Error("error adding blob part to db", "error", err)
77 return helpers.ServerError(e, nil)
78 }
···89 return helpers.ServerError(e, nil)
90 }
9192+ if err := s.db.Exec("UPDATE blobs SET cid = ? WHERE id = ?", nil, c.Bytes(), blob.ID).Error; err != nil {
93 // there should probably be somme handling here if this fails...
94 s.logger.Error("error updating blob", "error", err)
95 return helpers.ServerError(e, nil)
+1-1
server/handle_server_confirm_email.go
···4142 now := time.Now().UTC()
4344- if err := s.db.Exec("UPDATE repos SET email_verification_code = NULL, email_verification_code_expires_at = NULL, email_confirmed_at = ? WHERE did = ?", now, urepo.Repo.Did).Error; err != nil {
45 s.logger.Error("error updating user", "error", err)
46 return helpers.ServerError(e, nil)
47 }
···4142 now := time.Now().UTC()
4344+ if err := s.db.Exec("UPDATE repos SET email_verification_code = NULL, email_verification_code_expires_at = NULL, email_confirmed_at = ? WHERE did = ?", nil, now, urepo.Repo.Did).Error; err != nil {
45 s.logger.Error("error updating user", "error", err)
46 return helpers.ServerError(e, nil)
47 }
+4-4
server/handle_server_create_account.go
···102 }
103104 var ic models.InviteCode
105- if err := s.db.Raw("SELECT * FROM invite_codes WHERE code = ?", request.InviteCode).Scan(&ic).Error; err != nil {
106 if err == gorm.ErrRecordNotFound {
107 return helpers.InputError(e, to.StringPtr("InvalidInviteCode"))
108 }
···166 Handle: request.Handle,
167 }
168169- if err := s.db.Create(&urepo).Error; err != nil {
170 s.logger.Error("error inserting new repo", "error", err)
171 return helpers.ServerError(e, nil)
172 }
173174- if err := s.db.Create(&actor).Error; err != nil {
175 s.logger.Error("error inserting new actor", "error", err)
176 return helpers.ServerError(e, nil)
177 }
···210 })
211 }
212213- if err := s.db.Raw("UPDATE invite_codes SET remaining_use_count = remaining_use_count - 1 WHERE code = ?", request.InviteCode).Scan(&ic).Error; err != nil {
214 s.logger.Error("error decrementing use count", "error", err)
215 return helpers.ServerError(e, nil)
216 }
···102 }
103104 var ic models.InviteCode
105+ if err := s.db.Raw("SELECT * FROM invite_codes WHERE code = ?", nil, request.InviteCode).Scan(&ic).Error; err != nil {
106 if err == gorm.ErrRecordNotFound {
107 return helpers.InputError(e, to.StringPtr("InvalidInviteCode"))
108 }
···166 Handle: request.Handle,
167 }
168169+ if err := s.db.Create(&urepo, nil).Error; err != nil {
170 s.logger.Error("error inserting new repo", "error", err)
171 return helpers.ServerError(e, nil)
172 }
173174+ if err := s.db.Create(&actor, nil).Error; err != nil {
175 s.logger.Error("error inserting new actor", "error", err)
176 return helpers.ServerError(e, nil)
177 }
···210 })
211 }
212213+ if err := s.db.Raw("UPDATE invite_codes SET remaining_use_count = remaining_use_count - 1 WHERE code = ?", nil, request.InviteCode).Scan(&ic).Error; err != nil {
214 s.logger.Error("error decrementing use count", "error", err)
215 return helpers.ServerError(e, nil)
216 }
···65 var err error
66 switch idtype {
67 case "did":
68- err = s.db.Raw("SELECT r.*, a.* FROM repos r LEFT JOIN actors a ON r.did = a.did WHERE r.did = ?", req.Identifier).Scan(&repo).Error
69 case "handle":
70- err = s.db.Raw("SELECT r.*, a.* FROM actors a LEFT JOIN repos r ON a.did = r.did WHERE a.handle = ?", req.Identifier).Scan(&repo).Error
71 case "email":
72- err = s.db.Raw("SELECT r.*, a.* FROM repos r LEFT JOIN actors a ON r.did = a.did WHERE r.email = ?", req.Identifier).Scan(&repo).Error
73 }
7475 if err != nil {
···65 var err error
66 switch idtype {
67 case "did":
68+ err = s.db.Raw("SELECT r.*, a.* FROM repos r LEFT JOIN actors a ON r.did = a.did WHERE r.did = ?", nil, req.Identifier).Scan(&repo).Error
69 case "handle":
70+ err = s.db.Raw("SELECT r.*, a.* FROM actors a LEFT JOIN repos r ON a.did = r.did WHERE a.handle = ?", nil, req.Identifier).Scan(&repo).Error
71 case "email":
72+ err = s.db.Raw("SELECT r.*, a.* FROM repos r LEFT JOIN actors a ON r.did = a.did WHERE r.email = ?", nil, req.Identifier).Scan(&repo).Error
73 }
7475 if err != nil {
+2-2
server/handle_server_delete_session.go
···10 token := e.Get("token").(string)
1112 var acctok models.Token
13- if err := s.db.Raw("DELETE FROM tokens WHERE token = ? RETURNING *", token).Scan(&acctok).Error; err != nil {
14 s.logger.Error("error deleting access token from db", "error", err)
15 return helpers.ServerError(e, nil)
16 }
1718- if err := s.db.Exec("DELETE FROM refresh_tokens WHERE token = ?", acctok.RefreshToken).Error; err != nil {
19 s.logger.Error("error deleting refresh token from db", "error", err)
20 return helpers.ServerError(e, nil)
21 }
···10 token := e.Get("token").(string)
1112 var acctok models.Token
13+ if err := s.db.Raw("DELETE FROM tokens WHERE token = ? RETURNING *", nil, token).Scan(&acctok).Error; err != nil {
14 s.logger.Error("error deleting access token from db", "error", err)
15 return helpers.ServerError(e, nil)
16 }
1718+ if err := s.db.Exec("DELETE FROM refresh_tokens WHERE token = ?", nil, acctok.RefreshToken).Error; err != nil {
19 s.logger.Error("error deleting refresh token from db", "error", err)
20 return helpers.ServerError(e, nil)
21 }
+2-2
server/handle_server_refresh_session.go
···19 token := e.Get("token").(string)
20 repo := e.Get("repo").(*models.RepoActor)
2122- if err := s.db.Exec("DELETE FROM refresh_tokens WHERE token = ?", token).Error; err != nil {
23 s.logger.Error("error getting refresh token from db", "error", err)
24 return helpers.ServerError(e, nil)
25 }
2627- if err := s.db.Exec("DELETE FROM tokens WHERE refresh_token = ?", token).Error; err != nil {
28 s.logger.Error("error deleting access token from db", "error", err)
29 return helpers.ServerError(e, nil)
30 }
···19 token := e.Get("token").(string)
20 repo := e.Get("repo").(*models.RepoActor)
2122+ if err := s.db.Exec("DELETE FROM refresh_tokens WHERE token = ?", nil, token).Error; err != nil {
23 s.logger.Error("error getting refresh token from db", "error", err)
24 return helpers.ServerError(e, nil)
25 }
2627+ if err := s.db.Exec("DELETE FROM tokens WHERE refresh_token = ?", nil, token).Error; err != nil {
28 s.logger.Error("error deleting access token from db", "error", err)
29 return helpers.ServerError(e, nil)
30 }
···26 }
2728 var blob models.Blob
29- if err := s.db.Raw("SELECT * FROM blobs WHERE did = ? AND cid = ?", did, c.Bytes()).Scan(&blob).Error; err != nil {
30 s.logger.Error("error looking up blob", "error", err)
31 return helpers.ServerError(e, nil)
32 }
···34 buf := new(bytes.Buffer)
3536 var parts []models.BlobPart
37- if err := s.db.Raw("SELECT * FROM blob_parts WHERE blob_id = ? ORDER BY idx", blob.ID).Scan(&parts).Error; err != nil {
38 s.logger.Error("error getting blob parts", "error", err)
39 return helpers.ServerError(e, nil)
40 }
···44 buf.Write(p.Data)
45 }
4647- e.Response().Header().Set(echo.HeaderContentDisposition, "attachment; filename=" + c.String())
4849 return e.Stream(200, "application/octet-stream", buf)
50}
···26 }
2728 var blob models.Blob
29+ if err := s.db.Raw("SELECT * FROM blobs WHERE did = ? AND cid = ?", nil, did, c.Bytes()).Scan(&blob).Error; err != nil {
30 s.logger.Error("error looking up blob", "error", err)
31 return helpers.ServerError(e, nil)
32 }
···34 buf := new(bytes.Buffer)
3536 var parts []models.BlobPart
37+ if err := s.db.Raw("SELECT * FROM blob_parts WHERE blob_id = ? ORDER BY idx", nil, blob.ID).Scan(&parts).Error; err != nil {
38 s.logger.Error("error getting blob parts", "error", err)
39 return helpers.ServerError(e, nil)
40 }
···44 buf.Write(p.Data)
45 }
4647+ e.Response().Header().Set(echo.HeaderContentDisposition, "attachment; filename="+c.String())
4849 return e.Stream(200, "application/octet-stream", buf)
50}
+1-1
server/handle_sync_get_record.go
···18 rkey := e.QueryParam("rkey")
1920 var urepo models.Repo
21- if err := s.db.Raw("SELECT * FROM repos WHERE did = ?", did).Scan(&urepo).Error; err != nil {
22 s.logger.Error("error getting repo", "error", err)
23 return helpers.ServerError(e, nil)
24 }
···18 rkey := e.QueryParam("rkey")
1920 var urepo models.Repo
21+ if err := s.db.Raw("SELECT * FROM repos WHERE did = ?", nil, did).Scan(&urepo).Error; err != nil {
22 s.logger.Error("error getting repo", "error", err)
23 return helpers.ServerError(e, nil)
24 }
+1-1
server/handle_sync_get_repo.go
···41 }
4243 var blocks []models.Block
44- if err := s.db.Raw("SELECT * FROM blocks WHERE did = ? ORDER BY rev ASC", urepo.Repo.Did).Scan(&blocks).Error; err != nil {
45 return err
46 }
47
···41 }
4243 var blocks []models.Block
44+ if err := s.db.Raw("SELECT * FROM blocks WHERE did = ? ORDER BY rev ASC", nil, urepo.Repo.Did).Scan(&blocks).Error; err != nil {
45 return err
46 }
47
+1-1
server/handle_sync_list_blobs.go
···35 params = append(params, limit)
3637 var blobs []models.Blob
38- if err := s.db.Raw("SELECT * FROM blobs WHERE did = ? "+cursorquery+" ORDER BY created_at DESC LIMIT ?", params...).Scan(&blobs).Error; err != nil {
39 s.logger.Error("error getting records", "error", err)
40 return helpers.ServerError(e, nil)
41 }
···35 params = append(params, limit)
3637 var blobs []models.Blob
38+ if err := s.db.Raw("SELECT * FROM blobs WHERE did = ? "+cursorquery+" ORDER BY created_at DESC LIMIT ?", nil, params...).Scan(&blobs).Error; err != nil {
39 s.logger.Error("error getting records", "error", err)
40 return helpers.ServerError(e, nil)
41 }
+10-10
server/repo.go
···18 "github.com/bluesky-social/indigo/repo"
19 "github.com/bluesky-social/indigo/util"
20 "github.com/haileyok/cocoon/blockstore"
021 "github.com/haileyok/cocoon/models"
22 blocks "github.com/ipfs/go-block-format"
23 "github.com/ipfs/go-cid"
24 cbor "github.com/ipfs/go-ipld-cbor"
25 "github.com/ipld/go-car"
26- "gorm.io/gorm"
27 "gorm.io/gorm/clause"
28)
2930type RepoMan struct {
31- db *gorm.DB
32 s *Server
33 clock *syntax.TIDClock
34}
···162 })
163 case OpTypeDelete:
164 var old models.Record
165- if err := rm.db.Raw("SELECT value FROM records WHERE did = ? AND nsid = ? AND rkey = ?", urepo.Did, op.Collection, op.Rkey).Scan(&old).Error; err != nil {
166 return nil, err
167 }
168 entries = append(entries, models.Record{
···284 for _, entry := range entries {
285 var cids []cid.Cid
286 if entry.Cid != "" {
287- if err := rm.s.db.Clauses(clause.OnConflict{
288 Columns: []clause.Column{{Name: "did"}, {Name: "nsid"}, {Name: "rkey"}},
289 UpdateAll: true,
290- }).Create(&entry).Error; err != nil {
291 return nil, err
292 }
293···296 return nil, err
297 }
298 } else {
299- if err := rm.s.db.Delete(&entry).Error; err != nil {
300 return nil, err
301 }
302 cids, err = rm.decrementBlobRefs(urepo, entry.Value)
···368 }
369370 for _, c := range cids {
371- if err := rm.db.Exec("UPDATE blobs SET ref_count = ref_count + 1 WHERE did = ? AND cid = ?", urepo.Did, c.Bytes()).Error; err != nil {
372 return nil, err
373 }
374 }
···387 ID uint
388 Count int
389 }
390- if err := rm.db.Raw("UPDATE blobs SET ref_count = ref_count - 1 WHERE did = ? AND cid = ? RETURNING id, ref_count", urepo.Did, c.Bytes()).Scan(&res).Error; err != nil {
391 return nil, err
392 }
393394 if res.Count == 0 {
395- if err := rm.db.Exec("DELETE FROM blobs WHERE id = ?", res.ID).Error; err != nil {
396 return nil, err
397 }
398- if err := rm.db.Exec("DELETE FROM blob_parts WHERE blob_id = ?", res.ID).Error; err != nil {
399 return nil, err
400 }
401 }
···18 "github.com/bluesky-social/indigo/repo"
19 "github.com/bluesky-social/indigo/util"
20 "github.com/haileyok/cocoon/blockstore"
21+ "github.com/haileyok/cocoon/internal/db"
22 "github.com/haileyok/cocoon/models"
23 blocks "github.com/ipfs/go-block-format"
24 "github.com/ipfs/go-cid"
25 cbor "github.com/ipfs/go-ipld-cbor"
26 "github.com/ipld/go-car"
027 "gorm.io/gorm/clause"
28)
2930type RepoMan struct {
31+ db *db.DB
32 s *Server
33 clock *syntax.TIDClock
34}
···162 })
163 case OpTypeDelete:
164 var old models.Record
165+ if err := rm.db.Raw("SELECT value FROM records WHERE did = ? AND nsid = ? AND rkey = ?", nil, urepo.Did, op.Collection, op.Rkey).Scan(&old).Error; err != nil {
166 return nil, err
167 }
168 entries = append(entries, models.Record{
···284 for _, entry := range entries {
285 var cids []cid.Cid
286 if entry.Cid != "" {
287+ if err := rm.s.db.Create(&entry, []clause.Expression{clause.OnConflict{
288 Columns: []clause.Column{{Name: "did"}, {Name: "nsid"}, {Name: "rkey"}},
289 UpdateAll: true,
290+ }}).Error; err != nil {
291 return nil, err
292 }
293···296 return nil, err
297 }
298 } else {
299+ if err := rm.s.db.Delete(&entry, nil).Error; err != nil {
300 return nil, err
301 }
302 cids, err = rm.decrementBlobRefs(urepo, entry.Value)
···368 }
369370 for _, c := range cids {
371+ if err := rm.db.Exec("UPDATE blobs SET ref_count = ref_count + 1 WHERE did = ? AND cid = ?", nil, urepo.Did, c.Bytes()).Error; err != nil {
372 return nil, err
373 }
374 }
···387 ID uint
388 Count int
389 }
390+ if err := rm.db.Raw("UPDATE blobs SET ref_count = ref_count - 1 WHERE did = ? AND cid = ? RETURNING id, ref_count", nil, urepo.Did, c.Bytes()).Scan(&res).Error; err != nil {
391 return nil, err
392 }
393394 if res.Count == 0 {
395+ if err := rm.db.Exec("DELETE FROM blobs WHERE id = ?", nil, res.ID).Error; err != nil {
396 return nil, err
397 }
398+ if err := rm.db.Exec("DELETE FROM blob_parts WHERE blob_id = ?", nil, res.ID).Error; err != nil {
399 return nil, err
400 }
401 }