frontend: introduce other api {response,payload} types
Pedro Lucas Porcellis porcellis@eletrotupi.com · 5 months ago
2cac61aec19417cac5972c03ed16933d7f291846 Browse filesParents
bc168d7Changed files
2
Additions
+20
Deletions
-5
frontend/lib/api/client.ts
1 1
import * as SecureStore from 'expo-secure-store';
2 2
import {
3 3
User,
4 4
AuthResponse,
5 5
VerifyTokenResponse,
87 87
88 88
await this.storeToken(response.token);
89 89
return response;
90 90
}
91 91
92 -
async signup(data: SignUpPayload): Promise<AuthResponse> {
92 +
async signup(user: SignUpPayload): Promise<AuthResponse> {
93 93
const response = await this.request<AuthResponse>('/users', {
94 94
method: 'POST',
95 -
body: JSON.stringify(data),
95 +
body: JSON.stringify({ user }),
96 96
});
97 97
98 98
await this.storeToken(response.token);
99 99
return response;
100 100
}
133 133
method: 'PUT',
134 134
body: JSON.stringify({ user })
135 135
})
136 136
}
137 137
138 -
async avatar(formData: FormData): Promise<void> {
138 +
async avatar(formData: FormData): Promise<User> {
139 139
return await this.request(`/users/me/avatar`, {
140 140
method: 'POST',
141 141
body: formData,
142 142
headers: {
143 143
'Content-Type': 'multipart/form-data',
150 150
method: 'DELETE'
151 151
});
152 152
}
153 153
154 154
// Mood-related
155 -
async createMoodEntry(moodEntry): Promise<void> {
155 +
async createMoodEntry(mood: MoodEntryPayload): Promise<MoodEntryResponse> {
156 156
return await this.request(`/moods`, {
157 157
method: 'POST',
158 158
body: JSON.stringify({ mood: moodEntry })
159 159
})
160 160
}
161 161
}
162 162
163 163
export const apiClient = new ApiClient();
frontend/lib/api/types.ts
1 1
export interface User {
2 2
id: number;
3 3
email: string;
4 4
firstName: string;
5 5
lastName?: string;
50 50
export interface MoodComponentPayload {
51 51
component: string;
52 52
intensity: string;
53 53
};
54 54
55 -
56 55
export interface MoodEntryPayload {
57 56
annotation: string;
58 57
moment: Date;
59 58
selectedMood: string;
60 59
anxietyLevel: number;
61 60
energyLevel: number;
62 61
stressLevel: number;
63 62
moodComponents: MoodComponentPayload[]
64 63
};
65 64
65 +
export interface MoodComponentResponse {
66 +
id: number;
67 +
component: string;
68 +
intensity: string;
69 +
}
70 +
71 +
export interface MoodEntryResponse {
72 +
id: number;
73 +
annotation: string;
74 +
moment: Date;
75 +
selectedMood: string;
76 +
anxietyLevel: number;
77 +
energyLevel: number;
78 +
stressLevel: number;
79 +
moodComponents: MoodComponentResponse[];
80 +
}
66 81
67 82
// Generic stuff
68 83
export interface PaginatedResponse<T> {
69 84
entries: T[];
70 85
total: number;
71 86
page: number;
72 87
nextPage: number | null;
73 88
};