this repo has no description
1package server
2
3import (
4 "context"
5 "time"
6
7 "github.com/gocql/gocql"
8 vyletdatabase "github.com/vylet-app/go/database/proto"
9 "github.com/vylet-app/go/internal/helpers"
10 "google.golang.org/protobuf/types/known/timestamppb"
11)
12
13func (s *Server) GetBlobRef(ctx context.Context, req *vyletdatabase.GetBlobRefRequest) (*vyletdatabase.GetBlobRefResponse, error) {
14 logger := s.logger.With("name", "GetBlobRef", "did", req.Did, "cid", req.Cid)
15
16 query := `
17 SELECT did, cid, first_seen_at, processed_at, updated_at, taken_down, takedown_reason, taken_down_at, tags
18 FROM blob_refs
19 WHERE did = ? AND cid = ?
20 `
21
22 blobRef := &vyletdatabase.BlobRef{}
23 var firstSeenAt, updatedAt time.Time
24 var processedAt, takenDownAt *time.Time
25 var tags []string
26
27 err := s.cqlSession.Query(query, req.Did, req.Cid).WithContext(ctx).Scan(
28 &blobRef.Did,
29 &blobRef.Cid,
30 &firstSeenAt,
31 &processedAt,
32 &updatedAt,
33 &blobRef.TakenDown,
34 &blobRef.TakedownReason,
35 &takenDownAt,
36 &tags,
37 )
38
39 if err != nil {
40 if err == gocql.ErrNotFound {
41 logger.Warn("blob ref not found", "did", req.Did, "cid", req.Cid)
42 return &vyletdatabase.GetBlobRefResponse{
43 Error: helpers.ToStringPtr("blob ref not found"),
44 }, nil
45 }
46 logger.Error("failed to fetch blob ref", "did", req.Did, "cid", req.Cid, "err", err)
47 return &vyletdatabase.GetBlobRefResponse{
48 Error: helpers.ToStringPtr(err.Error()),
49 }, nil
50 }
51
52 blobRef.FirstSeenAt = timestamppb.New(firstSeenAt)
53 blobRef.UpdatedAt = timestamppb.New(updatedAt)
54 if processedAt != nil {
55 blobRef.ProcessedAt = timestamppb.New(*processedAt)
56 }
57 if takenDownAt != nil {
58 blobRef.TakenDownAt = timestamppb.New(*takenDownAt)
59 }
60 blobRef.Tags = tags
61
62 return &vyletdatabase.GetBlobRefResponse{
63 BlobRef: blobRef,
64 }, nil
65}
66
67func (s *Server) CreateBlobRef(ctx context.Context, req *vyletdatabase.CreateBlobRefRequest) (*vyletdatabase.CreateBlobRefResponse, error) {
68 logger := s.logger.With("name", "CreateBlobRef", "did", req.BlobRef.Did, "cid", req.BlobRef.Cid)
69
70 now := time.Now().UTC()
71
72 var processedAt, takenDownAt *time.Time
73 if req.BlobRef.ProcessedAt != nil {
74 t := req.BlobRef.ProcessedAt.AsTime()
75 processedAt = &t
76 }
77 if req.BlobRef.TakenDownAt != nil {
78 t := req.BlobRef.TakenDownAt.AsTime()
79 takenDownAt = &t
80 }
81
82 query := `
83 INSERT INTO blob_refs
84 (did, cid, first_seen_at, processed_at, updated_at, taken_down, takedown_reason, taken_down_at, tags)
85 VALUES
86 (?, ?, ?, ?, ?, ?, ?, ?, ?)
87 `
88
89 err := s.cqlSession.Query(query,
90 req.BlobRef.Did,
91 req.BlobRef.Cid,
92 req.BlobRef.FirstSeenAt.AsTime(),
93 processedAt,
94 now,
95 req.BlobRef.TakenDown,
96 req.BlobRef.TakedownReason,
97 takenDownAt,
98 req.BlobRef.Tags,
99 ).WithContext(ctx).Exec()
100
101 if err != nil {
102 logger.Error("failed to create blob ref", "did", req.BlobRef.Did, "cid", req.BlobRef.Cid, "err", err)
103 return &vyletdatabase.CreateBlobRefResponse{
104 Error: helpers.ToStringPtr(err.Error()),
105 }, nil
106 }
107
108 return &vyletdatabase.CreateBlobRefResponse{}, nil
109}
110
111func (s *Server) UpdateBlobRef(ctx context.Context, req *vyletdatabase.UpdateBlobRefRequest) (*vyletdatabase.UpdateBlobRefResponse, error) {
112 logger := s.logger.With("name", "UpdateBlobRef", "did", req.BlobRef.Did, "cid", req.BlobRef.Cid)
113
114 now := time.Now().UTC()
115
116 var processedAt, takenDownAt *time.Time
117 if req.BlobRef.ProcessedAt != nil {
118 t := req.BlobRef.ProcessedAt.AsTime()
119 processedAt = &t
120 }
121 if req.BlobRef.TakenDownAt != nil {
122 t := req.BlobRef.TakenDownAt.AsTime()
123 takenDownAt = &t
124 }
125
126 query := `
127 UPDATE blob_refs
128 SET processed_at = ?, updated_at = ?, taken_down = ?, takedown_reason = ?, taken_down_at = ?, tags = ?
129 WHERE did = ? AND cid = ?
130 `
131
132 err := s.cqlSession.Query(query,
133 processedAt,
134 now,
135 req.BlobRef.TakenDown,
136 req.BlobRef.TakedownReason,
137 takenDownAt,
138 req.BlobRef.Tags,
139 req.BlobRef.Did,
140 req.BlobRef.Cid,
141 ).WithContext(ctx).Exec()
142
143 if err != nil {
144 logger.Error("failed to update blob ref", "did", req.BlobRef.Did, "cid", req.BlobRef.Cid, "err", err)
145 return &vyletdatabase.UpdateBlobRefResponse{
146 Error: helpers.ToStringPtr(err.Error()),
147 }, nil
148 }
149
150 return &vyletdatabase.UpdateBlobRefResponse{}, nil
151}