From 0570f1fa41bc9d41303ade2cf54592a4670cb87b Mon Sep 17 00:00:00 2001 From: Ivan Chen Date: Tue, 26 Jan 2021 18:09:32 -0500 Subject: renamed services to have consistent naming and added common service --- src/services/CommonService.ts | 22 ++++ src/services/ExploreService.ts | 59 ++++++++++ src/services/ExploreServices.ts | 60 ----------- src/services/MomentService.ts | 209 ++++++++++++++++++++++++++++++++++++ src/services/MomentServices.ts | 209 ------------------------------------ src/services/UserFriendsService.ts | 149 +++++++++++++++++++++++++ src/services/UserFriendsServices.ts | 149 ------------------------- src/services/index.ts | 7 +- 8 files changed, 443 insertions(+), 421 deletions(-) create mode 100644 src/services/CommonService.ts create mode 100644 src/services/ExploreService.ts delete mode 100644 src/services/ExploreServices.ts create mode 100644 src/services/MomentService.ts delete mode 100644 src/services/MomentServices.ts create mode 100644 src/services/UserFriendsService.ts delete mode 100644 src/services/UserFriendsServices.ts (limited to 'src') diff --git a/src/services/CommonService.ts b/src/services/CommonService.ts new file mode 100644 index 00000000..4f9fb47a --- /dev/null +++ b/src/services/CommonService.ts @@ -0,0 +1,22 @@ +import RNFetchBlob from 'rn-fetch-blob'; + +export const loadImageFromURL = async (url: string) => { + try { + if (!url) { + return undefined; + } + const response = await RNFetchBlob.config({ + fileCache: true, + appendExt: 'jpg', + }).fetch('GET', url); + const status = response.info().status; + if (status === 200) { + return response.path(); + } else { + return undefined; + } + } catch (error) { + console.log(error); + return undefined; + } +}; diff --git a/src/services/ExploreService.ts b/src/services/ExploreService.ts new file mode 100644 index 00000000..980258be --- /dev/null +++ b/src/services/ExploreService.ts @@ -0,0 +1,59 @@ +import AsyncStorage from '@react-native-community/async-storage'; +import {ALL_USERS_ENDPOINT, DISCOVER_ENDPOINT} from '../constants'; +import {EMPTY_EXPLORE_SECTIONS} from '../store/initialStates'; +import {ExploreSectionType, ProfilePreviewType} from '../types'; + +export const getAllTaggUsers = async (token: string) => { + try { + const response = await fetch(ALL_USERS_ENDPOINT, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + const status = response.status; + if (status === 200) { + const response_data = await response.json(); + return response_data; + } else { + console.log( + 'Something went wrong! 😭', + 'Not able to retrieve tagg users list', + ); + } + } catch (error) { + console.log( + 'Something went wrong! 😭', + 'Not able to retrieve tagg users list', + error, + ); + } +}; + +export const getAllExploreSections = async () => { + try { + const token = await AsyncStorage.getItem('token'); + const response = await fetch(DISCOVER_ENDPOINT, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + if (response.status !== 200) { + return EMPTY_EXPLORE_SECTIONS; + } + const data = await response.json(); + const exploreSections: Record = { + 'New to Tagg': data.categories.new_to_tagg, + 'People You May Know': data.categories.people_you_may_know, + 'Trending on Tagg': data.categories.trending_on_tagg, + "Brown '21": data.categories.brown_21, + "Brown '22": data.categories.brown_22, + "Brown '23": data.categories.brown_23, + }; + + return exploreSections; + } catch (error) { + console.log('Unable to fetch explore data'); + } +}; diff --git a/src/services/ExploreServices.ts b/src/services/ExploreServices.ts deleted file mode 100644 index ca4f1b69..00000000 --- a/src/services/ExploreServices.ts +++ /dev/null @@ -1,60 +0,0 @@ -import AsyncStorage from '@react-native-community/async-storage'; -import {getDeviceToken} from 'react-native-device-info'; -import {ALL_USERS_ENDPOINT, DISCOVER_ENDPOINT} from '../constants'; -import {EMPTY_EXPLORE_SECTIONS} from '../store/initialStates'; -import {ExploreSectionType, ProfilePreviewType} from '../types'; - -export const getAllTaggUsers = async (token: string) => { - try { - const response = await fetch(ALL_USERS_ENDPOINT, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - const status = response.status; - if (status === 200) { - const response_data = await response.json(); - return response_data; - } else { - console.log( - 'Something went wrong! 😭', - 'Not able to retrieve tagg users list', - ); - } - } catch (error) { - console.log( - 'Something went wrong! 😭', - 'Not able to retrieve tagg users list', - error, - ); - } -}; - -export const getAllExploreSections = async () => { - try { - const token = await AsyncStorage.getItem('token'); - const response = await fetch(DISCOVER_ENDPOINT, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - if (response.status !== 200) { - return EMPTY_EXPLORE_SECTIONS; - } - const data = await response.json(); - const exploreSections: Record = { - 'New to Tagg': data.categories.new_to_tagg, - 'People You May Know': data.categories.people_you_may_know, - 'Trending on Tagg': data.categories.trending_on_tagg, - "Brown '21": data.categories.brown_21, - "Brown '22": data.categories.brown_22, - "Brown '23": data.categories.brown_23, - }; - - return exploreSections; - } catch (error) { - console.log('Unable to fetch explore data'); - } -}; diff --git a/src/services/MomentService.ts b/src/services/MomentService.ts new file mode 100644 index 00000000..7bad6d4c --- /dev/null +++ b/src/services/MomentService.ts @@ -0,0 +1,209 @@ +import AsyncStorage from '@react-native-community/async-storage'; +import {Alert} from 'react-native'; +import RNFetchBlob from 'rn-fetch-blob'; +import { + COMMENTS_ENDPOINT, + MOMENTS_ENDPOINT, + MOMENT_THUMBNAIL_ENDPOINT, +} from '../constants'; +import {ERROR_FAILED_TO_COMMENT} from '../constants/strings'; +import {MomentType} from '../types'; +import {checkImageUploadStatus} from '../utils'; + +//Get all comments for a moment +export const getMomentComments = async ( + momentId: string, + callback: Function, +) => { + try { + const token = await AsyncStorage.getItem('token'); + const response = await fetch(COMMENTS_ENDPOINT + '?moment_id=' + momentId, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + const status = response.status; + if (status === 200) { + const comments = await response.json(); + callback(comments); + } else { + console.log('Could not load comments'); + } + } catch (error) { + console.log('Could not load comments', error); + } +}; + +export const postMomentComment = async ( + commenter: string, + comment: string, + momentId: string, +) => { + try { + const token = await AsyncStorage.getItem('token'); + const request = new FormData(); + request.append('moment_id', momentId); + request.append('commenter', commenter); + request.append('comment', comment); + const response = await fetch(COMMENTS_ENDPOINT, { + method: 'POST', + headers: { + Authorization: 'Token ' + token, + }, + body: request, + }); + if (response.status !== 200) { + throw 'server error'; + } + return await response.json(); + } catch (error) { + Alert.alert(ERROR_FAILED_TO_COMMENT); + return undefined; + } +}; + +//Get count of comments for a moment +export const getMomentCommentsCount = async ( + momentId: string, + callback: Function, +) => { + try { + const token = await AsyncStorage.getItem('token'); + const response = await fetch(COMMENTS_ENDPOINT + `${momentId}/`, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + const status = response.status; + if (status === 200) { + const response_data = await response.json(); + callback(response_data.count); + } else { + console.log( + 'Something went wrong! 😭', + 'Not able to retrieve comments count', + ); + } + } catch (error) { + console.log( + 'Something went wrong! 😭', + 'Not able to retrieve comments count', + error, + ); + } +}; + +export const postMoment: ( + fileName: string, + uri: string, + caption: string, + category: string, + userId: string, +) => Promise = async ( + fileName, + uri, + caption, + category, + userId, +) => { + try { + const request = new FormData(); + //Manipulating filename to end with .jpg instead of .heic + if (fileName.endsWith('.heic') || fileName.endsWith('.HEIC')) { + fileName = fileName.split('.')[0] + '.jpg'; + } + request.append('image', { + uri: uri, + name: fileName, + type: 'image/jpg', + }); + request.append('moment', category); + request.append('user_id', userId); + request.append('captions', JSON.stringify({image: caption})); + const token = await AsyncStorage.getItem('token'); + let response = await fetch(MOMENTS_ENDPOINT, { + method: 'POST', + headers: { + 'Content-Type': 'multipart/form-data', + Authorization: 'Token ' + token, + }, + body: request, + }); + let statusCode = response.status; + let data = await response.json(); + if (statusCode === 200 && checkImageUploadStatus(data.moments)) { + return data.profile_completion_stage; + } + } catch (err) { + console.log(err); + } + return undefined; +}; + +export const loadMoments: ( + userId: string, + token: string, +) => Promise = async (userId, token) => { + let moments: MomentType[] = []; + try { + const response = await fetch(MOMENTS_ENDPOINT + '?user_id=' + userId, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + const status = response.status; + if (status === 200) { + const data = await response.json(); + moments = data; + } else { + console.log('Could not load moments!'); + return []; + } + } catch (err) { + console.log(err); + return []; + } + return moments; +}; + +export const deleteMoment = async (momentId: string) => { + try { + const token = await AsyncStorage.getItem('token'); + + const response = await fetch(MOMENTS_ENDPOINT + `${momentId}/`, { + method: 'DELETE', + headers: { + Authorization: 'Token ' + token, + }, + }); + return response.status === 200; + } catch (error) { + console.log(error); + console.log('Unable to delete moment', momentId); + return false; + } +}; + +export const loadMomentThumbnail = async (momentId: string) => { + try { + const token = await AsyncStorage.getItem('token'); + const response = await RNFetchBlob.config({ + fileCache: true, + appendExt: 'jpg', + }).fetch('GET', MOMENT_THUMBNAIL_ENDPOINT + `${momentId}/`, { + Authorization: 'Token ' + token, + }); + const status = response.info().status; + if (status === 200) { + return response.path(); + } else { + return undefined; + } + } catch (error) { + console.log(error); + return undefined; + } +}; diff --git a/src/services/MomentServices.ts b/src/services/MomentServices.ts deleted file mode 100644 index 7bad6d4c..00000000 --- a/src/services/MomentServices.ts +++ /dev/null @@ -1,209 +0,0 @@ -import AsyncStorage from '@react-native-community/async-storage'; -import {Alert} from 'react-native'; -import RNFetchBlob from 'rn-fetch-blob'; -import { - COMMENTS_ENDPOINT, - MOMENTS_ENDPOINT, - MOMENT_THUMBNAIL_ENDPOINT, -} from '../constants'; -import {ERROR_FAILED_TO_COMMENT} from '../constants/strings'; -import {MomentType} from '../types'; -import {checkImageUploadStatus} from '../utils'; - -//Get all comments for a moment -export const getMomentComments = async ( - momentId: string, - callback: Function, -) => { - try { - const token = await AsyncStorage.getItem('token'); - const response = await fetch(COMMENTS_ENDPOINT + '?moment_id=' + momentId, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - const status = response.status; - if (status === 200) { - const comments = await response.json(); - callback(comments); - } else { - console.log('Could not load comments'); - } - } catch (error) { - console.log('Could not load comments', error); - } -}; - -export const postMomentComment = async ( - commenter: string, - comment: string, - momentId: string, -) => { - try { - const token = await AsyncStorage.getItem('token'); - const request = new FormData(); - request.append('moment_id', momentId); - request.append('commenter', commenter); - request.append('comment', comment); - const response = await fetch(COMMENTS_ENDPOINT, { - method: 'POST', - headers: { - Authorization: 'Token ' + token, - }, - body: request, - }); - if (response.status !== 200) { - throw 'server error'; - } - return await response.json(); - } catch (error) { - Alert.alert(ERROR_FAILED_TO_COMMENT); - return undefined; - } -}; - -//Get count of comments for a moment -export const getMomentCommentsCount = async ( - momentId: string, - callback: Function, -) => { - try { - const token = await AsyncStorage.getItem('token'); - const response = await fetch(COMMENTS_ENDPOINT + `${momentId}/`, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - const status = response.status; - if (status === 200) { - const response_data = await response.json(); - callback(response_data.count); - } else { - console.log( - 'Something went wrong! 😭', - 'Not able to retrieve comments count', - ); - } - } catch (error) { - console.log( - 'Something went wrong! 😭', - 'Not able to retrieve comments count', - error, - ); - } -}; - -export const postMoment: ( - fileName: string, - uri: string, - caption: string, - category: string, - userId: string, -) => Promise = async ( - fileName, - uri, - caption, - category, - userId, -) => { - try { - const request = new FormData(); - //Manipulating filename to end with .jpg instead of .heic - if (fileName.endsWith('.heic') || fileName.endsWith('.HEIC')) { - fileName = fileName.split('.')[0] + '.jpg'; - } - request.append('image', { - uri: uri, - name: fileName, - type: 'image/jpg', - }); - request.append('moment', category); - request.append('user_id', userId); - request.append('captions', JSON.stringify({image: caption})); - const token = await AsyncStorage.getItem('token'); - let response = await fetch(MOMENTS_ENDPOINT, { - method: 'POST', - headers: { - 'Content-Type': 'multipart/form-data', - Authorization: 'Token ' + token, - }, - body: request, - }); - let statusCode = response.status; - let data = await response.json(); - if (statusCode === 200 && checkImageUploadStatus(data.moments)) { - return data.profile_completion_stage; - } - } catch (err) { - console.log(err); - } - return undefined; -}; - -export const loadMoments: ( - userId: string, - token: string, -) => Promise = async (userId, token) => { - let moments: MomentType[] = []; - try { - const response = await fetch(MOMENTS_ENDPOINT + '?user_id=' + userId, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - const status = response.status; - if (status === 200) { - const data = await response.json(); - moments = data; - } else { - console.log('Could not load moments!'); - return []; - } - } catch (err) { - console.log(err); - return []; - } - return moments; -}; - -export const deleteMoment = async (momentId: string) => { - try { - const token = await AsyncStorage.getItem('token'); - - const response = await fetch(MOMENTS_ENDPOINT + `${momentId}/`, { - method: 'DELETE', - headers: { - Authorization: 'Token ' + token, - }, - }); - return response.status === 200; - } catch (error) { - console.log(error); - console.log('Unable to delete moment', momentId); - return false; - } -}; - -export const loadMomentThumbnail = async (momentId: string) => { - try { - const token = await AsyncStorage.getItem('token'); - const response = await RNFetchBlob.config({ - fileCache: true, - appendExt: 'jpg', - }).fetch('GET', MOMENT_THUMBNAIL_ENDPOINT + `${momentId}/`, { - Authorization: 'Token ' + token, - }); - const status = response.info().status; - if (status === 200) { - return response.path(); - } else { - return undefined; - } - } catch (error) { - console.log(error); - return undefined; - } -}; diff --git a/src/services/UserFriendsService.ts b/src/services/UserFriendsService.ts new file mode 100644 index 00000000..f2e15824 --- /dev/null +++ b/src/services/UserFriendsService.ts @@ -0,0 +1,149 @@ +//Abstracted common friends api calls out here + +import {Alert} from 'react-native'; +import {FriendshipStatusType} from 'src/types'; +import {FRIENDS_ENDPOINT} from '../constants'; +import {ERROR_SOMETHING_WENT_WRONG_REFRESH} from '../constants/strings'; + +export const loadFriends = async (userId: string, token: string) => { + try { + const response = await fetch(FRIENDS_ENDPOINT + `?user_id=${userId}`, { + method: 'GET', + headers: { + Authorization: 'Token ' + token, + }, + }); + if (response.status === 200) { + const body = await response.json(); + return body; + } else { + throw new Error(await response.json()); + } + } catch (error) { + console.log(error); + } +}; + +export const friendOrUnfriendUser = async ( + user: string, + friend: string, + token: string, + friendship_status: FriendshipStatusType, +) => { + try { + let body; + let method = ''; + let endpoint = FRIENDS_ENDPOINT; + + switch (friendship_status) { + case 'no_record': + method = 'POST'; + body = JSON.stringify({ + requested: friend, + }); + break; + case 'requested': + method = 'DELETE'; + endpoint += `${friend}/`; + body = JSON.stringify({ + reason: 'cancelled', + }); + break; + case 'friends': + method = 'DELETE'; + endpoint += `${friend}/`; + body = JSON.stringify({ + reason: 'unfriended', + }); + } + + const response = await fetch(endpoint, { + method: method, + headers: { + 'Content-Type': 'application/json', + Authorization: 'Token ' + token, + }, + body: body, + }); + const status = response.status; + if (Math.floor(status / 100) === 2) { + return true; + } else { + console.log(await response.json()); + Alert.alert( + 'Something went wrong! 😭', + "Would you believe me if I told you that I don't know what happened?", + ); + return false; + } + } catch (error) { + console.log(error); + Alert.alert( + 'Something went wrong! 😭', + "Would you believe me if I told you that I don't know what happened?", + ); + return false; + } +}; + +export const declineFriendRequestService = async ( + user_id: string, + token: string | null, +) => { + try { + const response = await fetch(FRIENDS_ENDPOINT + `${user_id}/`, { + method: 'DELETE', + headers: { + Authorization: 'Token ' + token, + }, + body: JSON.stringify({ + reason: 'declined', + }), + }); + const status = response.status; + if (Math.floor(status / 100) === 2) { + return true; + } else { + console.log(await response.json()); + Alert.alert(ERROR_SOMETHING_WENT_WRONG_REFRESH); + return false; + } + } catch (error) { + console.log(error); + Alert.alert(ERROR_SOMETHING_WENT_WRONG_REFRESH); + return false; + } +}; + +export const acceptFriendRequestService = async ( + requester_id: string, + token: string | null, +) => { + try { + const response = await fetch(FRIENDS_ENDPOINT + `${requester_id}/`, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Token ' + token, + }, + }); + const status = response.status; + if (Math.floor(status / 100) === 2) { + return true; + } else { + console.log(await response.json()); + Alert.alert( + 'Something went wrong! 😭', + "Would you believe me if I told you that I don't know what happened?", + ); + return false; + } + } catch (error) { + console.log(error); + Alert.alert( + 'Something went wrong! 😭', + "Would you believe me if I told you that I don't know what happened?", + ); + return false; + } +}; diff --git a/src/services/UserFriendsServices.ts b/src/services/UserFriendsServices.ts deleted file mode 100644 index f2e15824..00000000 --- a/src/services/UserFriendsServices.ts +++ /dev/null @@ -1,149 +0,0 @@ -//Abstracted common friends api calls out here - -import {Alert} from 'react-native'; -import {FriendshipStatusType} from 'src/types'; -import {FRIENDS_ENDPOINT} from '../constants'; -import {ERROR_SOMETHING_WENT_WRONG_REFRESH} from '../constants/strings'; - -export const loadFriends = async (userId: string, token: string) => { - try { - const response = await fetch(FRIENDS_ENDPOINT + `?user_id=${userId}`, { - method: 'GET', - headers: { - Authorization: 'Token ' + token, - }, - }); - if (response.status === 200) { - const body = await response.json(); - return body; - } else { - throw new Error(await response.json()); - } - } catch (error) { - console.log(error); - } -}; - -export const friendOrUnfriendUser = async ( - user: string, - friend: string, - token: string, - friendship_status: FriendshipStatusType, -) => { - try { - let body; - let method = ''; - let endpoint = FRIENDS_ENDPOINT; - - switch (friendship_status) { - case 'no_record': - method = 'POST'; - body = JSON.stringify({ - requested: friend, - }); - break; - case 'requested': - method = 'DELETE'; - endpoint += `${friend}/`; - body = JSON.stringify({ - reason: 'cancelled', - }); - break; - case 'friends': - method = 'DELETE'; - endpoint += `${friend}/`; - body = JSON.stringify({ - reason: 'unfriended', - }); - } - - const response = await fetch(endpoint, { - method: method, - headers: { - 'Content-Type': 'application/json', - Authorization: 'Token ' + token, - }, - body: body, - }); - const status = response.status; - if (Math.floor(status / 100) === 2) { - return true; - } else { - console.log(await response.json()); - Alert.alert( - 'Something went wrong! 😭', - "Would you believe me if I told you that I don't know what happened?", - ); - return false; - } - } catch (error) { - console.log(error); - Alert.alert( - 'Something went wrong! 😭', - "Would you believe me if I told you that I don't know what happened?", - ); - return false; - } -}; - -export const declineFriendRequestService = async ( - user_id: string, - token: string | null, -) => { - try { - const response = await fetch(FRIENDS_ENDPOINT + `${user_id}/`, { - method: 'DELETE', - headers: { - Authorization: 'Token ' + token, - }, - body: JSON.stringify({ - reason: 'declined', - }), - }); - const status = response.status; - if (Math.floor(status / 100) === 2) { - return true; - } else { - console.log(await response.json()); - Alert.alert(ERROR_SOMETHING_WENT_WRONG_REFRESH); - return false; - } - } catch (error) { - console.log(error); - Alert.alert(ERROR_SOMETHING_WENT_WRONG_REFRESH); - return false; - } -}; - -export const acceptFriendRequestService = async ( - requester_id: string, - token: string | null, -) => { - try { - const response = await fetch(FRIENDS_ENDPOINT + `${requester_id}/`, { - method: 'PATCH', - headers: { - 'Content-Type': 'application/json', - Authorization: 'Token ' + token, - }, - }); - const status = response.status; - if (Math.floor(status / 100) === 2) { - return true; - } else { - console.log(await response.json()); - Alert.alert( - 'Something went wrong! 😭', - "Would you believe me if I told you that I don't know what happened?", - ); - return false; - } - } catch (error) { - console.log(error); - Alert.alert( - 'Something went wrong! 😭', - "Would you believe me if I told you that I don't know what happened?", - ); - return false; - } -}; diff --git a/src/services/index.ts b/src/services/index.ts index 56cefddd..9289cfb1 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -1,11 +1,12 @@ export * from './UserProfileService'; export * from './SocialLinkingService'; -export * from './MomentServices'; -export * from './ExploreServices'; -export * from './UserFriendsServices'; +export * from './MomentService'; +export * from './ExploreService'; +export * from './UserFriendsService'; export * from './ReportingService'; export * from './BlockUserService'; export * from './MomentCategoryService'; export * from './NotificationService'; export * from './FCMService'; export * from './WaitlistUserService'; +export * from './CommonService'; -- cgit v1.2.3-70-g09d2