Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ func NewServices(config APIConfig, repos repository.Repositories) service.Servic
platform := service.NewPlatform(platformRepos)

transaction := service.NewTransaction(repos, config.Redis)
user := service.NewUser(repos, auth, fingerprint)
user := service.NewUser(repos, auth, fingerprint, device)

return service.Services{
Auth: auth,
Expand Down
34 changes: 7 additions & 27 deletions pkg/service/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,11 @@ package service

import (
"os"
"time"

"github.com/String-xyz/string-api/pkg/internal/common"
"github.com/String-xyz/string-api/pkg/internal/unit21"
"github.com/String-xyz/string-api/pkg/model"
"github.com/String-xyz/string-api/pkg/repository"
"github.com/lib/pq"
"github.com/pkg/errors"
"github.com/rs/zerolog/log"
)
Expand Down Expand Up @@ -39,10 +37,11 @@ type user struct {
repos repository.Repositories
auth Auth
fingerprint Fingerprint
device Device
}

func NewUser(repos repository.Repositories, auth Auth, fprint Fingerprint) User {
return &user{repos, auth, fprint}
func NewUser(repos repository.Repositories, auth Auth, fprint Fingerprint, device Device) User {
return &user{repos, auth, fprint, device}
}

func (u user) GetStatus(userID string) (model.UserOnboardingStatus, error) {
Expand Down Expand Up @@ -98,30 +97,11 @@ func (u user) Create(request model.WalletSignaturePayloadSigned) (UserCreateResp
return resp, err
}

var device model.Device

// create device only if there is a visitor
visitorID := request.Fingerprint.VisitorID
requestID := request.Fingerprint.RequestID
if visitorID != "" && requestID != "" {
visitor, err := u.fingerprint.GetVisitor(visitorID, requestID)
if err == nil {
// if fingerprint successfully retrieved, create device, otherwise continue without device
now := time.Now()

device, err = u.repos.Device.Create(model.Device{
Fingerprint: visitorID,
UserID: user.ID,
Type: visitor.Type,
IpAddresses: pq.StringArray{visitor.IPAddress},
Description: visitor.UserAgent,
LastUsedAt: now,
ValidatedAt: &now,
})
if err != nil {
return resp, common.StringError(err)
}
}
device, err := u.device.CreateDeviceIfNeeded(user.ID, request.Fingerprint.VisitorID, request.Fingerprint.RequestID)

if err != nil && errors.Cause(err).Error() != "not found" {
return resp, common.StringError(err)
}

jwt, err := u.auth.GenerateJWT(user.ID, device)
Expand Down