Skip to content

Commit 27cb41c

Browse files
committed
feat: add verification_request queries
1 parent 718b2d5 commit 27cb41c

File tree

1 file changed

+53
-2
lines changed

1 file changed

+53
-2
lines changed

server/db/providers/cassandradb/verification_requests.go

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package cassandradb
22

33
import (
4+
"fmt"
45
"time"
56

67
"github.com/authorizerdev/authorizer/server/db/models"
78
"github.com/authorizerdev/authorizer/server/graph/model"
9+
"github.com/gocql/gocql"
810
"github.com/google/uuid"
911
)
1012

@@ -17,29 +19,78 @@ func (p *provider) AddVerificationRequest(verificationRequest models.Verificatio
1719
verificationRequest.CreatedAt = time.Now().Unix()
1820
verificationRequest.UpdatedAt = time.Now().Unix()
1921

22+
query := fmt.Sprintf("INSERT INTO %s (id, jwt_token, identifier, expires_at, email, nonce, redirect_uri, created_at, updated_at) VALUES ('%s', '%s', '%s', %d, '%s', '%s', '%s', %d, %d)", KeySpace+"."+models.Collections.VerificationRequest, verificationRequest.ID, verificationRequest.Token, verificationRequest.Identifier, verificationRequest.ExpiresAt, verificationRequest.Email, verificationRequest.Nonce, verificationRequest.RedirectURI, verificationRequest.CreatedAt, verificationRequest.UpdatedAt)
23+
err := p.db.Query(query).Exec()
24+
if err != nil {
25+
return verificationRequest, err
26+
}
2027
return verificationRequest, nil
2128
}
2229

2330
// GetVerificationRequestByToken to get verification request from database using token
2431
func (p *provider) GetVerificationRequestByToken(token string) (models.VerificationRequest, error) {
2532
var verificationRequest models.VerificationRequest
26-
33+
query := fmt.Sprintf(`SELECT id, jwt_token, identifier, expires_at, email, nonce, redirect_uri, created_at, updated_at FROM %s WHERE jwt_token = '%s' LIMIT 1`, KeySpace+"."+models.Collections.VerificationRequest, token)
34+
err := p.db.Query(query).Consistency(gocql.One).Scan(&verificationRequest.ID, &verificationRequest.Token, &verificationRequest.Identifier, &verificationRequest.ExpiresAt, &verificationRequest.Email, &verificationRequest.Nonce, &verificationRequest.RedirectURI, &verificationRequest.CreatedAt, &verificationRequest.UpdatedAt)
35+
if err != nil {
36+
return verificationRequest, err
37+
}
2738
return verificationRequest, nil
2839
}
2940

3041
// GetVerificationRequestByEmail to get verification request by email from database
3142
func (p *provider) GetVerificationRequestByEmail(email string, identifier string) (models.VerificationRequest, error) {
3243
var verificationRequest models.VerificationRequest
44+
query := fmt.Sprintf(`SELECT id, jwt_token, identifier, expires_at, email, nonce, redirect_uri, created_at, updated_at FROM %s WHERE email = '%s' AND identifier = '%s' LIMIT 1`, KeySpace+"."+models.Collections.VerificationRequest, email, identifier)
45+
err := p.db.Query(query).Consistency(gocql.One).Scan(&verificationRequest.ID, &verificationRequest.Token, &verificationRequest.Identifier, &verificationRequest.ExpiresAt, &verificationRequest.Email, &verificationRequest.Nonce, &verificationRequest.RedirectURI, &verificationRequest.CreatedAt, &verificationRequest.UpdatedAt)
46+
if err != nil {
47+
return verificationRequest, err
48+
}
3349

3450
return verificationRequest, nil
3551
}
3652

3753
// ListVerificationRequests to get list of verification requests from database
3854
func (p *provider) ListVerificationRequests(pagination model.Pagination) (*model.VerificationRequests, error) {
39-
return nil, nil
55+
var verificationRequests []*model.VerificationRequest
56+
57+
paginationClone := pagination
58+
totalCountQuery := fmt.Sprintf(`SELECT COUNT(*) FROM %s`, KeySpace+"."+models.Collections.VerificationRequest)
59+
err := p.db.Query(totalCountQuery).Consistency(gocql.One).Scan(&paginationClone.Total)
60+
if err != nil {
61+
return nil, err
62+
}
63+
64+
// there is no offset in cassandra
65+
// so we fetch till limit + offset
66+
// and return the results from offset to limit
67+
query := fmt.Sprintf(`SELECT id, jwt_token, identifier, expires_at, email, nonce, redirect_uri, created_at, updated_at FROM %s ORDER BY created_at DESC LIMIT %d`, KeySpace+"."+models.Collections.VerificationRequest, pagination.Limit+pagination.Offset)
68+
scanner := p.db.Query(query).Iter().Scanner()
69+
counter := int64(0)
70+
for scanner.Next() {
71+
if counter >= pagination.Offset {
72+
var verificationRequest models.VerificationRequest
73+
err := scanner.Scan(&verificationRequest.ID, &verificationRequest.Token, &verificationRequest.Identifier, &verificationRequest.ExpiresAt, &verificationRequest.Email, &verificationRequest.Nonce, &verificationRequest.RedirectURI, &verificationRequest.CreatedAt, &verificationRequest.UpdatedAt)
74+
if err != nil {
75+
return nil, err
76+
}
77+
verificationRequests = append(verificationRequests, verificationRequest.AsAPIVerificationRequest())
78+
}
79+
counter++
80+
}
81+
82+
return &model.VerificationRequests{
83+
VerificationRequests: verificationRequests,
84+
Pagination: &paginationClone,
85+
}, nil
4086
}
4187

4288
// DeleteVerificationRequest to delete verification request from database
4389
func (p *provider) DeleteVerificationRequest(verificationRequest models.VerificationRequest) error {
90+
query := fmt.Sprintf("DELETE FROM %s WHERE id = '%s'", KeySpace+"."+models.Collections.VerificationRequest, verificationRequest.ID)
91+
err := p.db.Query(query).Exec()
92+
if err != nil {
93+
return err
94+
}
4495
return nil
4596
}

0 commit comments

Comments
 (0)