diff options
| author | Ivan Chen <ivan@tagg.id> | 2021-02-01 16:01:03 -0500 |
|---|---|---|
| committer | Ivan Chen <ivan@tagg.id> | 2021-02-01 16:01:03 -0500 |
| commit | 8d1013e86cf2d66671c337d49a80da157802ad86 (patch) | |
| tree | 656b1656068bb6636919359d4faaf7051994ff74 /src/services/MomentService.ts | |
| parent | 951d85348acef13ec7830629205c30ad5f766bee (diff) | |
| parent | 7a09cc96bf1fe468a612bb44362bbef24fccc773 (diff) | |
Merge branch 'master' into TMA-546-Onboarding-Page
Diffstat (limited to 'src/services/MomentService.ts')
| -rw-r--r-- | src/services/MomentService.ts | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/services/MomentService.ts b/src/services/MomentService.ts new file mode 100644 index 00000000..2354d18e --- /dev/null +++ b/src/services/MomentService.ts @@ -0,0 +1,118 @@ +import AsyncStorage from '@react-native-community/async-storage'; +import RNFetchBlob from 'rn-fetch-blob'; +import {MOMENTS_ENDPOINT, MOMENT_THUMBNAIL_ENDPOINT} from '../constants'; +import {MomentType} from '../types'; +import {checkImageUploadStatus} from '../utils'; + +export const postMoment: ( + fileName: string, + uri: string, + caption: string, + category: string, + userId: string, +) => Promise<number | undefined> = 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<MomentType[]> = 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: false, + 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; + } +}; |
