diff --git a/frontend/src/api/dtos/ChangeUserPasswordRequestDto.ts b/frontend/src/api/dtos/ChangeUserPasswordRequest.ts similarity index 65% rename from frontend/src/api/dtos/ChangeUserPasswordRequestDto.ts rename to frontend/src/api/dtos/ChangeUserPasswordRequest.ts index bd4627d..e7f822e 100644 --- a/frontend/src/api/dtos/ChangeUserPasswordRequestDto.ts +++ b/frontend/src/api/dtos/ChangeUserPasswordRequest.ts @@ -1,7 +1,7 @@ /** * DTO for changing user password */ -export class ChangeUserPasswordRequestDto { +export class ChangeUserPasswordRequest { userId?: string; password?: string; } \ No newline at end of file diff --git a/frontend/src/api/dtos/CreateUserRequestDto.ts b/frontend/src/api/dtos/CreateUserRequest.ts similarity index 52% rename from frontend/src/api/dtos/CreateUserRequestDto.ts rename to frontend/src/api/dtos/CreateUserRequest.ts index 68d4012..7eb229f 100644 --- a/frontend/src/api/dtos/CreateUserRequestDto.ts +++ b/frontend/src/api/dtos/CreateUserRequest.ts @@ -1,9 +1,9 @@ -import { UserDto } from "./UserDto.js"; +import {UserDto} from "./UserDto.js"; /** * DTO used for user creation */ -export class CreateUserRequestDto { +export class CreateUserRequest { userData?: UserDto; password?: string; } \ No newline at end of file diff --git a/frontend/src/api/dtos/CreateUserResponse.ts b/frontend/src/api/dtos/CreateUserResponse.ts new file mode 100644 index 0000000..09408c1 --- /dev/null +++ b/frontend/src/api/dtos/CreateUserResponse.ts @@ -0,0 +1,5 @@ +import { UserDto } from "./UserDto.js"; + +export class CreateUserResponse{ + userData?: UserDto; +} \ No newline at end of file diff --git a/frontend/src/api/dtos/LoginRequestDto.ts b/frontend/src/api/dtos/LoginRequest.ts similarity index 71% rename from frontend/src/api/dtos/LoginRequestDto.ts rename to frontend/src/api/dtos/LoginRequest.ts index a3da6ee..70d1e09 100644 --- a/frontend/src/api/dtos/LoginRequestDto.ts +++ b/frontend/src/api/dtos/LoginRequest.ts @@ -1,7 +1,7 @@ /** * Defines a login request */ -export class LoginRequestDto { +export class LoginRequest { userName?: string; password?: string; } \ No newline at end of file diff --git a/frontend/src/api/dtos/LoginResponse.ts b/frontend/src/api/dtos/LoginResponse.ts new file mode 100644 index 0000000..1e571ed --- /dev/null +++ b/frontend/src/api/dtos/LoginResponse.ts @@ -0,0 +1,10 @@ +import {UserDto} from "./UserDto.js"; + +/** + * Response to a successful login + */ +export class LoginResponse { + userData?: UserDto; + token?: string; + expiryDate?: Date; +} \ No newline at end of file diff --git a/frontend/src/api/dtos/LoginResponseDto.ts b/frontend/src/api/dtos/LoginResponseDto.ts deleted file mode 100644 index fdb5a39..0000000 --- a/frontend/src/api/dtos/LoginResponseDto.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { UserDto } from "./UserDto.js"; - -/** - * Response to a successful login - */ -export class LoginResponseDto { - userData?: UserDto; - token?: string; - expiryDate? : Date; -} \ No newline at end of file diff --git a/frontend/src/api/points/AuthPoint.ts b/frontend/src/api/points/AuthPoint.ts index bf34abd..603eb1c 100644 --- a/frontend/src/api/points/AuthPoint.ts +++ b/frontend/src/api/points/AuthPoint.ts @@ -1,6 +1,6 @@ -import type { LoginRequestDto } from "../dtos/LoginRequestDto"; -import type { LoginResponseDto } from "../dtos/LoginResponseDto"; -import { postJson } from "../utils/requests"; +import type {LoginRequest} from "../dtos/LoginRequest.ts"; +import type {LoginResponse} from "../dtos/LoginResponse.ts"; +import {postJson} from "../utils/requests"; /** @@ -16,11 +16,11 @@ const AUTH_URL = `${BASE_URL}/auth` /** - * Create new Recipe - * @param recipe Recipe to create - * @returns Saved recipe + * Login to recipe app + * @param loginRequest Login Requets + * @returns LoginResponse */ -export async function login(requestDto: LoginRequestDto): Promise { - const res = await postJson(`${AUTH_URL}/login`, JSON.stringify(requestDto), false); - return res.json(); +export async function login(loginRequest: LoginRequest): Promise { + const res = await postJson(`${AUTH_URL}/login`, JSON.stringify(loginRequest), false); + return res.json(); } diff --git a/frontend/src/api/points/UserPoint.ts b/frontend/src/api/points/UserPoint.ts index 4be5eb8..0614c2a 100644 --- a/frontend/src/api/points/UserPoint.ts +++ b/frontend/src/api/points/UserPoint.ts @@ -1,7 +1,8 @@ import {apiClient} from "../apiClient"; import type {UserDto} from "../dtos/UserDto"; -import type {CreateUserRequestDto} from "../dtos/CreateUserRequestDto"; -import type {ChangeUserPasswordRequestDto} from "../dtos/ChangeUserPasswordRequestDto"; +import type {CreateUserRequest} from "../dtos/CreateUserRequest.ts"; +import type {ChangeUserPasswordRequest} from "../dtos/ChangeUserPasswordRequest.ts"; +import type {CreateUserResponse} from "../dtos/CreateUserResponse.ts"; export async function fetchCurrentUser(): Promise { return apiClient.get("/user/me"); @@ -11,7 +12,7 @@ export async function fetchAllUsers(): Promise { return apiClient.get("/user/list"); } -export async function createUser(dto: CreateUserRequestDto): Promise { +export async function createUser(dto: CreateUserRequest): Promise { return apiClient.post("/user/create", dto); } @@ -19,6 +20,6 @@ export async function updateUser(dto: UserDto): Promise { return apiClient.post("/user/update", dto); } -export async function changePassword(dto: ChangeUserPasswordRequestDto) { +export async function changePassword(dto: ChangeUserPasswordRequest) { return apiClient.post("/user/change-password", dto); } diff --git a/frontend/src/components/LoginPage.tsx b/frontend/src/components/LoginPage.tsx index 9f6f054..445544b 100644 --- a/frontend/src/components/LoginPage.tsx +++ b/frontend/src/components/LoginPage.tsx @@ -1,7 +1,7 @@ import {useState} from "react"; import Button from "./basics/Button"; -import type {LoginRequestDto} from "../api/dtos/LoginRequestDto"; -import type {LoginResponseDto} from "../api/dtos/LoginResponseDto"; +import type {LoginRequest} from "../api/dtos/LoginRequest.ts"; +import type {LoginResponse} from "../api/dtos/LoginResponse.ts"; import {login} from "../api/points/AuthPoint"; import {getRecipeListUrl} from "../routes"; import {useNavigate} from "react-router-dom"; @@ -20,14 +20,14 @@ export default function LoginPage() { * Login */ const executeLogin = async () => { - const dto: LoginRequestDto = { + const dto: LoginRequest = { userName, password, }; try { console.log("Trying to log in with " + dto.userName); - const loginResponse: LoginResponseDto = await login(dto); + const loginResponse: LoginResponse = await login(dto); localStorage.setItem("session", JSON.stringify(loginResponse)); console.log("Successfully logged in as " + loginResponse.userData?.userName); setErrorMessage(null); diff --git a/frontend/src/components/SettingsMenu.tsx b/frontend/src/components/SettingsMenu.tsx index a99c6e3..7541e28 100644 --- a/frontend/src/components/SettingsMenu.tsx +++ b/frontend/src/components/SettingsMenu.tsx @@ -1,7 +1,7 @@ // src/components/basics/SettingsMenu.tsx import {X} from "lucide-react"; import {useNavigate} from "react-router-dom"; -import type {LoginResponseDto} from "../api/dtos/LoginResponseDto"; +import type {LoginResponse} from "../api/dtos/LoginResponse.ts"; import {getUserUrl} from "../routes.ts"; /** @@ -15,7 +15,7 @@ type SettingsMenuProps = { export function SettingsMenu({onClose}: SettingsMenuProps) { const navigate = useNavigate(); const storedSession = localStorage.getItem("session"); - const loginData: LoginResponseDto | null = storedSession + const loginData: LoginResponse | null = storedSession ? JSON.parse(storedSession) : null; const user = loginData?.userData; diff --git a/frontend/src/components/users/UserManagementPage.tsx b/frontend/src/components/users/UserManagementPage.tsx index 9977ee4..1355214 100644 --- a/frontend/src/components/users/UserManagementPage.tsx +++ b/frontend/src/components/users/UserManagementPage.tsx @@ -16,6 +16,7 @@ import ButtonLink from "../basics/ButtonLink.tsx"; import {getRecipeListUrl} from "../../routes.ts"; import TextLinkButton from "../basics/TextLinkButton.tsx"; import SelectField from "../basics/SelectField.tsx"; +import type {CreateUserResponse} from "../../api/dtos/CreateUserResponse.ts"; /** * UserManagementPage @@ -70,9 +71,12 @@ export default function UserManagementPage() { try { if (!selectedUser.id) { //@todo check passwords! - const created = await createUser({userData: selectedUser, password}); - setUsers([...users, created]); - setSelectedUser(created); + const response: CreateUserResponse = await createUser({userData: selectedUser, password}); + const userDto = response.userData; + if (userDto) { + setUsers([...users, userDto]); + setSelectedUser(userDto); + } } else { const updated = await updateUser(selectedUser); setUsers(users.map(u => (u.id === updated.id ? updated : u)));