Started implementation of basic frontend for ToDoList App

This commit is contained in:
Marcin-Ramotowski
2025-04-12 19:49:47 +02:00
parent 7062e14396
commit 1ed7f308a3
17 changed files with 4075 additions and 0 deletions

44
frontend/src/api/api.ts Normal file
View File

@ -0,0 +1,44 @@
import axios from "axios";
import Cookies from "js-cookie";
const API_URL = "http://localhost:5000";
const api = axios.create({
baseURL: API_URL,
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
withCredentials: true,
});
// User login
export const login = async (username: string, password: string) => {
try {
const response = await api.post("/login", { username, password });
const userId = response.data.user_id;
Cookies.set("user_id", String(userId), { secure: true, sameSite: "Strict" });
return { userId };
} catch (error) {
throw new Error("Incorrect username or password.");
}
};
// Get user tasks
export const getTasks = async () => {
const userId = Cookies.get("user_id");
if (!userId) throw new Error("No user_id in cookies.");
const response = await api.get(`/tasks/user/${userId}`);
return response.data;
};
// Logout
export const logout = async () => {
await api.get("/logout"); // API usunie JWT
Cookies.remove("access_token_cookie");
Cookies.remove("user_id");
};

22
frontend/src/api/auth.ts Normal file
View File

@ -0,0 +1,22 @@
import axios from "axios";
import Cookies from "js-cookie";
const API_URL = "http://localhost:5000";
export const logout = async () => {
try {
await axios.get(`${API_URL}/logout`, { withCredentials: true });
} catch (error) {
console.error("Error during logout:", error);
}
// Remove JWT token from cookies
document.cookie = "access_token_cookie=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
localStorage.removeItem("user_id");
};
export const getCsrfToken = () => {
const value = Cookies.get("csrf_access_token");
const header = {"X-CSRF-TOKEN": value}
return header;
};

26
frontend/src/api/tasks.ts Normal file
View File

@ -0,0 +1,26 @@
import axios from "axios";
import { getCsrfToken } from "./auth";
const API_URL = "http://localhost:5000";
// Get user tasks
export const getUserTasks = async (userId: number) => {
const response = await axios.get(`${API_URL}/tasks/user/${userId}`, {withCredentials: true, headers: getCsrfToken()});
return response.data;
};
// Create new task
export const createTask = async (taskData: {
title: string;
description: string;
due_date: string;
done: boolean;
}) => {
const response = await axios.post(`${API_URL}/tasks`, taskData, {withCredentials: true, headers: getCsrfToken()});
return response.data;
};
// Delete task
export const deleteTask = async (taskId: number) => {
await axios.delete(`${API_URL}/tasks/${taskId}`, {withCredentials: true, headers: getCsrfToken()});
};