-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpasscode_repository.go
55 lines (49 loc) · 1.6 KB
/
passcode_repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package dynamodb
import (
"context"
"github.com/aws/aws-sdk-go/service/dynamodb"
"time"
)
type PasscodeRepository struct {
Database *dynamodb.DynamoDB
tableName string
idName string
passcodeName string
expiredAtName string
}
func NewPasscodeRepository(db *dynamodb.DynamoDB, tableName string, options ...string) *PasscodeRepository {
var keyName, passcodeName, expiredAtName string
if len(options) >= 1 && len(options[0]) > 0 {
expiredAtName = options[0]
} else {
expiredAtName = "expiredAt"
}
if len(options) >= 2 && len(options[1]) > 0 {
keyName = options[1]
} else {
keyName = "id"
}
if len(options) >= 3 && len(options[2]) > 0 {
passcodeName = options[2]
} else {
passcodeName = "passcode"
}
return &PasscodeRepository{db, tableName, keyName, passcodeName, expiredAtName}
}
func (p *PasscodeRepository) Save(ctx context.Context, id string, passcode string, expiredAt time.Time) (int64, error) {
pass := make(map[string]interface{})
pass[p.idName] = id
pass[p.passcodeName] = passcode
pass[p.expiredAtName] = expiredAt
return UpsertOne(ctx, p.Database, p.tableName, []string{p.idName}, pass)
}
func (p *PasscodeRepository) Load(ctx context.Context, id string) (string, time.Time, error) {
ok, data, err := FindOneAndReturnMapData(ctx, p.Database, p.tableName, []string{p.idName}, id)
if err != nil || !ok {
return "", time.Now(), err
}
return data[p.passcodeName].(string), data[p.passcodeName].(time.Time), nil
}
func (p *PasscodeRepository) Delete(ctx context.Context, id string) (int64, error) {
return DeleteOne(ctx, p.Database, p.tableName, []string{p.idName}, id)
}