Skip to content
18 changes: 18 additions & 0 deletions src/api/auth/login.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import axios from 'axios';
import { AUTH_URL } from '@/constants/urls';
import useAuthStore from '@/store/authStore';

export default async function handleLogin(email: string, password: string) {
try {
const response = await axios.post(`${AUTH_URL}/login`, { email, password });
const { accessToken } = response.data;

const { setAccessToken } = useAuthStore.getState();
setAccessToken(accessToken);

return true;
} catch (error) {
console.error('๋กœ๊ทธ์ธ ์‹คํŒจ:', error);
return false;
}
}
Empty file added src/api/auth/signup.ts
Empty file.
37 changes: 37 additions & 0 deletions src/store/authStore.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { create } from 'zustand';

interface AuthState {
accessToken: string | null;
setAccessToken: (token: string) => void;
removeAccessToken: () => void;
}

type SetState = <T>(fn: (state: T) => T) => void;

function setAccessTokenFn(set: SetState, token: string) {
set(function (state: AuthState) {
return { ...state, accessToken: token };
});
}

function removeAccessTokenFn(set: SetState) {
set(function (state: AuthState) {
return { ...state, accessToken: null };
});
}

function createAuthStore(set: SetState) {
return {
accessToken: null,
setAccessToken: function (token: string) {
setAccessTokenFn(set, token);
},
removeAccessToken: function () {
removeAccessTokenFn(set);
},
};
}

const useAuthStore = create<AuthState>(createAuthStore);

export default useAuthStore;