11package cassandradb
22
33import (
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
2431func (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
3142func (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
3854func (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
4389func (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