From d3274924f04f9170d4f14ac19aba29e105db8a96 Mon Sep 17 00:00:00 2001 From: Leons Aleksandrovs <58330666+Skrazzo@users.noreply.github.com> Date: Wed, 2 Jul 2025 22:29:55 +0300 Subject: [PATCH] Cleaned up code --- README.md | 55 -------------------------------- Uzdevums.md | 55 ++++++++++++++++++++++++++++++++ frontend/src/routes/$userId.tsx | 2 +- frontend/src/routes/__root.tsx | 8 ----- preview 1.webp | Bin 0 -> 7836 bytes preview 2.webp | Bin 0 -> 5314 bytes 6 files changed, 56 insertions(+), 64 deletions(-) create mode 100644 Uzdevums.md create mode 100644 preview 1.webp create mode 100644 preview 2.webp diff --git a/README.md b/README.md index 985de08..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,55 +0,0 @@ -# Darbinieku darba laiku atskaite no SQLite datubāzes - -## Resursi - -Tev tiek dots **SQLite datubāzes fails**: `attendance.db` -Šajā datubāzē ir divas tabulas: - -### Tabulu struktūra - -**`Employees`** - -| id | username | -|:----|:-----------| -| 1 | janis | -| 2 | liga | -| 3 | juris | -| 4 | dace | - -**`Attendance`** - -| id | employee_id | date | hours_worked | -|:----|:-------------|:-------------|:----------------| -| 1 | 1 | 2024-06-29 | 4 | -| 2 | 1 | 2024-06-29 | 3.5 | -| 3 | 1 | 2024-06-28 | 8 | -| 4 | 2 | 2024-06-29 | 5 | -| 5 | 2 | 2024-06-29 | 2.5 | -| 6 | 2 | 2024-06-28 | 6.75 | -| 7 | 3 | 2024-06-30 | 6 | -| 8 | 3 | 2024-06-27 | 2 | -| 9 | 3 | 2024-06-27 | 7 | - ---- - -## 📌 Uzdevums - -Izveidot **WEB aplikāciju** (vēlams izmantot Python): - -### 📍 Sākuma lapa `/` -- Parāda sarakstu ar visiem darbinieku `username` -- Iespēja veikt **username meklēšanu** - ---- - -### 📍 Darbinieka skatījums -- Klikšķinot uz kāda darbinieka username, atveras lapa/skats, kur: - - Redzama **tabula ar divām kolonnām: `date`, `hours_worked`** - - Tabulā katrai dienai **tiek summētas visas nostrādātās stundas šajā datumā** - - 📌 *Piemērs*: - Ja vienā dienā ir divi ieraksti ar 4h un 3.5h — kopsumma būs **7.5** - - Tabula **sakārtota pēc `date` DESC** - ---- - - diff --git a/Uzdevums.md b/Uzdevums.md new file mode 100644 index 0000000..985de08 --- /dev/null +++ b/Uzdevums.md @@ -0,0 +1,55 @@ +# Darbinieku darba laiku atskaite no SQLite datubāzes + +## Resursi + +Tev tiek dots **SQLite datubāzes fails**: `attendance.db` +Šajā datubāzē ir divas tabulas: + +### Tabulu struktūra + +**`Employees`** + +| id | username | +|:----|:-----------| +| 1 | janis | +| 2 | liga | +| 3 | juris | +| 4 | dace | + +**`Attendance`** + +| id | employee_id | date | hours_worked | +|:----|:-------------|:-------------|:----------------| +| 1 | 1 | 2024-06-29 | 4 | +| 2 | 1 | 2024-06-29 | 3.5 | +| 3 | 1 | 2024-06-28 | 8 | +| 4 | 2 | 2024-06-29 | 5 | +| 5 | 2 | 2024-06-29 | 2.5 | +| 6 | 2 | 2024-06-28 | 6.75 | +| 7 | 3 | 2024-06-30 | 6 | +| 8 | 3 | 2024-06-27 | 2 | +| 9 | 3 | 2024-06-27 | 7 | + +--- + +## 📌 Uzdevums + +Izveidot **WEB aplikāciju** (vēlams izmantot Python): + +### 📍 Sākuma lapa `/` +- Parāda sarakstu ar visiem darbinieku `username` +- Iespēja veikt **username meklēšanu** + +--- + +### 📍 Darbinieka skatījums +- Klikšķinot uz kāda darbinieka username, atveras lapa/skats, kur: + - Redzama **tabula ar divām kolonnām: `date`, `hours_worked`** + - Tabulā katrai dienai **tiek summētas visas nostrādātās stundas šajā datumā** + - 📌 *Piemērs*: + Ja vienā dienā ir divi ieraksti ar 4h un 3.5h — kopsumma būs **7.5** + - Tabula **sakārtota pēc `date` DESC** + +--- + + diff --git a/frontend/src/routes/$userId.tsx b/frontend/src/routes/$userId.tsx index b027e62..53e6c07 100644 --- a/frontend/src/routes/$userId.tsx +++ b/frontend/src/routes/$userId.tsx @@ -3,7 +3,7 @@ import { API_BASE_URL } from "@/consts"; import type { UserInfo } from "@/types/api"; import { capitalizeFirstLetter } from "@/utils/capitalizeFirstLetter"; import { useQuery, type UseQueryResult } from "@tanstack/react-query"; -import { createFileRoute, useParams } from "@tanstack/react-router"; +import { createFileRoute } from "@tanstack/react-router"; export const Route = createFileRoute("/$userId")({ component: RouteComponent, diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx index cf7371f..ccbdb9e 100644 --- a/frontend/src/routes/__root.tsx +++ b/frontend/src/routes/__root.tsx @@ -1,10 +1,6 @@ import { Outlet, createRootRouteWithContext } from "@tanstack/react-router"; -import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"; - import Header from "../components/Header"; -import TanStackQueryLayout from "../integrations/tanstack-query/layout.tsx"; - import type { QueryClient } from "@tanstack/react-query"; interface MyRouterContext { @@ -15,11 +11,7 @@ export const Route = createRootRouteWithContext()({ component: () => ( <>
- - - - ), }); diff --git a/preview 1.webp b/preview 1.webp new file mode 100644 index 0000000000000000000000000000000000000000..cadc291377acf0acaa9288b61ae2c4066f296e41 GIT binary patch literal 7836 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 literal 0 HcmV?d00001 diff --git a/preview 2.webp b/preview 2.webp new file mode 100644 index 0000000000000000000000000000000000000000..d0c6917cb8f8cf29de989eebcb069276f04a5e2a GIT binary patch literal 5314 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