Skip to content

Commit

Permalink
feat: [API 0.9.0] Send notificationsToken in signup / signin
Browse files Browse the repository at this point in the history
  • Loading branch information
kachnitel committed Jan 7, 2020
1 parent f4c445b commit 6d78792
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 45 deletions.
12 changes: 1 addition & 11 deletions src/PushNotifications.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Notifications } from 'expo'
import * as Permissions from 'expo-permissions'
import NotificationsProvider from './providers/NotificationsProvider'

export default class PushNotifications {
getToken = async () => {
Expand All @@ -18,16 +17,7 @@ export default class PushNotifications {
return
}

let token = await Notifications.getExpoPushTokenAsync()
return token
}

updateToken = async () => {
let token = await this.getToken()
if (token) {
let provider = new NotificationsProvider()
provider.setToken(token)
}
return Notifications.getExpoPushTokenAsync()
}

/**
Expand Down
7 changes: 0 additions & 7 deletions src/providers/NotificationsProvider.js

This file was deleted.

4 changes: 4 additions & 0 deletions src/providers/RidersProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ export default class RidersProvider {
return ApiConnection.post('signup', data)
}

signIn = (data) => {
return ApiConnection.post('signin', data)
}

loadFriends = () => {
return ApiConnection.get('api/users/friends')
}
Expand Down
32 changes: 8 additions & 24 deletions src/screens/SignInScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ import {
import { observer, inject } from 'mobx-react'
import * as SecureStore from 'expo-secure-store'
import Authentication from '../Authentication'
import ApiConnection from '../ApiConnection'
import BulletList from '../components/lists/BulletList'
import TerrainIcon from '../components/icons/TerrainIcon'
import Colors from '../../constants/Colors'
import Layout from '../../constants/Layout'
import Button from '../components/form/Button'
import { logger } from '../Logger'
import VersionTag from '../components/VersionTag'
import { User } from '../stores/UserStore.mobx'

export default
@inject('UserStore')
Expand All @@ -41,20 +41,13 @@ class SignInScreen extends React.Component {
this.props.ApplicationStore.updateAccessToken(token.access_token)

this.setState({ loadingMessage: 'Signing in...' })
try {
var signInResult = await ApiConnection.post('signin')
} catch (error) {
logger.error('POST to signin failed', {
error: error
})
throw new Error('Sign in failed')
}

if (signInResult.success) {
this.handleSignIn(signInResult.user, token)
let user = await this.props.UserStore.signIn()

if (user) {
this.handleSignIn(user, token)
} else {
this.setState({ loadingMessage: 'Getting user info...' })
console.log(await auth.getUserInfo(token.access_token))
this.props.navigation.navigate('SignUp', {
user: await auth.getUserInfo(token.access_token),
token: token
Expand All @@ -66,22 +59,13 @@ class SignInScreen extends React.Component {
* Set current user ID in ApplicationStore and redirect to App
* @memberof SignInScreen
*/
handleSignIn = (signInResponse, token) => {
if (!Number.isInteger(signInResponse.id)) {
logger.info('Authentication error:', {
signInResponse: signInResponse,
token: token
})
throw new Error('Invalid user ID:' + signInResponse.id)
}

handleSignIn = (user: User, token) => {
// On successful login save tokens
SecureStore.setItemAsync('refreshToken', token.refresh_token)

this.props.UserStore.upsert(signInResponse)
this.props.ApplicationStore.updateUserId(signInResponse.id)
this.props.ApplicationStore.updateUserId(user.id)
// Signed in
logger.info(`User ${signInResponse.id} signed in`)
logger.info(`User ${user.id} signed in`)
this.props.navigation.navigate('App')
}

Expand Down
29 changes: 26 additions & 3 deletions src/stores/UserStore.mobx.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { BaseEntity } from './BaseEntity'
import { BaseCollectionStore } from './BaseCollectionStore'
import ApplicationStore from './ApplicationStore.mobx'
import PushNotifications from '../PushNotifications'
import { logger } from '../Logger'

export default class UserStore extends BaseCollectionStore {
provider: RidersProvider
Expand All @@ -16,8 +17,6 @@ export default class UserStore extends BaseCollectionStore {

autorun(async (reaction) => {
if (this.applicationStore.accessToken && this.applicationStore.userId && !this.loaded) {
let notifications = new PushNotifications()
notifications.updateToken()
// FIXME: rather pointless since it no longer waits for user here
this.updateLoaded(true)
}
Expand Down Expand Up @@ -65,6 +64,27 @@ export default class UserStore extends BaseCollectionStore {
this.updateFriendRequests(friends.requests.received.map((userData) => userData.id))
}

async signUp (user: User) {
return user.saveNew()
}

async signIn () {
try {
var signInResponse = await this.provider.signIn({
notificationsToken: await (new PushNotifications()).getToken()
})
} catch (error) {
logger.error('POST to signin failed', {
error: error.data
})
throw new Error('Sign in failed')
}

return signInResponse.success
? this.upsert(signInResponse.user)
: false
}

/**
* Search users by name
*
Expand Down Expand Up @@ -204,7 +224,10 @@ export class User extends BaseEntity {
if (this.tempPicture && this.tempPicture.isWeb) {
data.picture = this.tempPicture.uri
}
let userResponse = await this.store.provider.signUp(data)
let userResponse = await this.store.provider.signUp({
userInfo: data,
notificationsToken: await (new PushNotifications()).getToken()
})

this.populateFromApiResponse(userResponse)

Expand Down

0 comments on commit 6d78792

Please sign in to comment.