this repo has no description
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}