diff --git a/src/util/Util.js b/src/util/Util.js index 72ad7f1..f868626 100644 --- a/src/util/Util.js +++ b/src/util/Util.js @@ -16,23 +16,41 @@ export const setSession = (user) => { sessionStorage.setItem('user', JSON.stringify(user)); }; -export const fetchUser = async () => { +export const fetchUser = async (force = false) => { + const user = getUser(); + if (!force && user) return user; + const result = await fetch('/api/user'); if (result.status === 200) { const data = await result.json(); setSession(data); return data; } + return null; }; -export const post = (url, body) => { - return fetch(url, { +const parseResponse = async (response) => { + const { headers: rawHeaders, status } = response; + const headers = [...rawHeaders].reduce((acc, [key, val]) => { + acc[key.toLowerCase()] = val; + return acc; + }, {}); + const success = status >= 200 && status < 400; + const base = { success, status }; + if (headers['content-type']?.includes('application/json')) { + const data = await response.json(); + return {...base, ...data}; + } + return { ...base, message: await response.text() }; +}; + +export const post = async (url, body) => { + const response = await fetch(url, { method: 'post', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) }); - - + return parseResponse(response); }; \ No newline at end of file