this repo has no description
at main 190 lines 4.5 kB view raw
1package server 2 3import ( 4 "context" 5 "time" 6 7 vyletdatabase "github.com/vylet-app/go/database/proto" 8 "github.com/vylet-app/go/internal/helpers" 9 "google.golang.org/protobuf/types/known/timestamppb" 10) 11 12func (s *Server) CreateProfile(ctx context.Context, req *vyletdatabase.CreateProfileRequest) (*vyletdatabase.CreateProfileResponse, error) { 13 logger := s.logger.With("name", "CreateProfile") 14 now := time.Now().UTC() 15 16 if err := s.cqlSession.Query( 17 ` 18 INSERT INTO profiles 19 (did, display_name, description, pronouns, avatar, created_at, indexed_at, updated_at) 20 VALUES 21 (?, ?, ?, ?, ?, ?, ?, ?) 22 `, 23 req.Profile.Did, 24 req.Profile.DisplayName, 25 req.Profile.Description, 26 req.Profile.Pronouns, 27 req.Profile.Avatar, 28 req.Profile.CreatedAt.AsTime(), 29 now, 30 now, 31 ).WithContext(ctx).Exec(); err != nil { 32 logger.Error("failed to create profile", "did", req.Profile.Did, "err", err) 33 return &vyletdatabase.CreateProfileResponse{ 34 Error: helpers.ToStringPtr(err.Error()), 35 }, nil 36 } 37 38 return &vyletdatabase.CreateProfileResponse{}, nil 39} 40 41func (s *Server) UpdateProfile(ctx context.Context, req *vyletdatabase.CreateProfileRequest) (*vyletdatabase.CreateProfileResponse, error) { 42 logger := s.logger.With("name", "UpdateProfile") 43 44 now := time.Now().UTC() 45 46 if err := s.cqlSession.Query( 47 ` 48 UPDATE profiles 49 SET 50 display_name = ?, 51 description = ?, 52 pronouns = ?, 53 avatar = ?, 54 updated_at = ? 55 WHERE 56 did = ? 57 `, 58 req.Profile.DisplayName, 59 req.Profile.Description, 60 req.Profile.Pronouns, 61 req.Profile.Avatar, 62 now, 63 req.Profile.Did, 64 ).WithContext(ctx).Exec(); err != nil { 65 logger.Error("failed to create profile", "did", req.Profile.Did, "err", err) 66 return &vyletdatabase.CreateProfileResponse{ 67 Error: helpers.ToStringPtr(err.Error()), 68 }, nil 69 } 70 71 return &vyletdatabase.CreateProfileResponse{}, nil 72} 73 74func (s *Server) DeleteProfile(ctx context.Context, req *vyletdatabase.DeleteProfileRequest) (*vyletdatabase.DeleteProfileResponse, error) { 75 logger := s.logger.With("name", "DeleteProfile") 76 77 if err := s.cqlSession.Query( 78 ` 79 DELETE FROM profiles 80 WHERE 81 did = ? 82 `, 83 req.Did, 84 ).WithContext(ctx).Exec(); err != nil { 85 logger.Error("failed to delete profile", "did", req.Did, "err", err) 86 return &vyletdatabase.DeleteProfileResponse{ 87 Error: helpers.ToStringPtr(err.Error()), 88 }, nil 89 } 90 91 return &vyletdatabase.DeleteProfileResponse{}, nil 92} 93 94func (s *Server) GetProfile(ctx context.Context, req *vyletdatabase.GetProfileRequest) (*vyletdatabase.GetProfileResponse, error) { 95 logger := s.logger.With("name", "GetProfile") 96 97 resp := &vyletdatabase.GetProfileResponse{ 98 Profile: &vyletdatabase.Profile{}, 99 } 100 var createdAt, indexedAt time.Time 101 102 if err := s.cqlSession.Query( 103 `SELECT 104 did, 105 display_name, 106 description, 107 pronouns, 108 avatar, 109 created_at, 110 indexed_at 111 FROM profiles 112 WHERE 113 did = ? 114 `, 115 req.Did, 116 ).WithContext(ctx).Scan( 117 &resp.Profile.Did, 118 &resp.Profile.DisplayName, 119 &resp.Profile.Description, 120 &resp.Profile.Pronouns, 121 &resp.Profile.Avatar, 122 &createdAt, 123 &indexedAt, 124 ); err != nil { 125 logger.Error("failed to get profile", "did", req.Did, "err", err) 126 return &vyletdatabase.GetProfileResponse{ 127 Error: helpers.ToStringPtr(err.Error()), 128 }, nil 129 } 130 131 resp.Profile.CreatedAt = timestamppb.New(createdAt) 132 resp.Profile.IndexedAt = timestamppb.New(indexedAt) 133 134 return resp, nil 135} 136 137func (s *Server) GetProfiles(ctx context.Context, req *vyletdatabase.GetProfilesRequest) (*vyletdatabase.GetProfilesResponse, error) { 138 logger := s.logger.With("name", "GetProfiles") 139 140 resp := &vyletdatabase.GetProfilesResponse{ 141 Profiles: make(map[string]*vyletdatabase.Profile), 142 } 143 144 iter := s.cqlSession.Query( 145 `SELECT 146 did, 147 display_name, 148 description, 149 pronouns, 150 avatar, 151 created_at, 152 indexed_at 153 FROM profiles 154 WHERE 155 did IN ? 156 `, 157 req.Dids, 158 ).WithContext(ctx).Iter() 159 160 var createdAt, indexedAt time.Time 161 for { 162 profile := &vyletdatabase.Profile{} 163 164 if !iter.Scan( 165 &profile.Did, 166 &profile.DisplayName, 167 &profile.Description, 168 &profile.Pronouns, 169 &profile.Avatar, 170 &createdAt, 171 &indexedAt, 172 ) { 173 break 174 } 175 176 profile.CreatedAt = timestamppb.New(createdAt) 177 profile.IndexedAt = timestamppb.New(indexedAt) 178 179 resp.Profiles[profile.Did] = profile 180 } 181 182 if err := iter.Close(); err != nil { 183 logger.Error("failed to get profiles", "dids", req.Dids, "err", err) 184 return &vyletdatabase.GetProfilesResponse{ 185 Error: helpers.ToStringPtr(err.Error()), 186 }, nil 187 } 188 189 return resp, nil 190}