this repo has no description
at main 151 lines 4.1 kB view raw
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}