From 635dfcd114532315f5012e40608672d2dec8a188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80?= Date: Wed, 3 Apr 2024 02:40:41 +0300 Subject: [PATCH 1/3] [feat] users by event --- backend/project/api/users/urls.py | 8 +++++++- backend/project/api/users/views.py | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/backend/project/api/users/urls.py b/backend/project/api/users/urls.py index 2708ef3..5e6f3a9 100644 --- a/backend/project/api/users/urls.py +++ b/backend/project/api/users/urls.py @@ -5,6 +5,7 @@ from api.users.views import ( DownloadUsersFromExcelView, RegisterUsersFromExcelView, UserViewSet, + UsersByEvent, ) app_name = "users" @@ -15,6 +16,11 @@ router.register("", UserViewSet) urlpatterns = [ path("", include(router.urls)), + path( + "by-event//", + UsersByEvent.as_view(), + name="users-by-event", + ), path( "upload/excel//", RegisterUsersFromExcelView.as_view(), @@ -24,5 +30,5 @@ urlpatterns = [ "download/excel//", DownloadUsersFromExcelView.as_view(), name="excel-download", - ) + ), ] diff --git a/backend/project/api/users/views.py b/backend/project/api/users/views.py index a67fd2a..eacd739 100644 --- a/backend/project/api/users/views.py +++ b/backend/project/api/users/views.py @@ -18,6 +18,22 @@ class UserViewSet(ModelViewSet): serializer_class = UserSerializer +class UsersByEvent(APIView): + def get(self, _, event_id): + try: + event = Event.objects.get(pk=event_id) + except Event.DoesNotExist: + return Response( + {"error": "Event does not exist"}, + status=status.HTTP_404_NOT_FOUND, + ) + + users = event.users.all() + serializer = UserSerializer(users, many=True) + + return Response(serializer.data) + + class RegisterUsersFromExcelView(APIView): def post(self, request, event_id): try: From 4d6997457b2d754febd758240818ef30edecb063 Mon Sep 17 00:00:00 2001 From: cue Date: Wed, 3 Apr 2024 03:48:00 +0300 Subject: [PATCH 2/3] add delete fix style --- frontend/src/components/pages/Admin/Admin.tsx | 25 ++++++++++++++ .../pages/AdminEventPage/AdminEventAPI.ts | 34 ++++++++++++++++++- .../components/pages/Main/Main.module.less | 8 +++++ frontend/src/components/pages/Main/Main.tsx | 8 ++--- .../pages/SkillTree/SkillTree.module.less | 21 ++++++++++++ .../components/pages/SkillTree/SkillTree.tsx | 12 +++---- frontend/src/i18n.ts | 6 ++-- 7 files changed, 99 insertions(+), 15 deletions(-) diff --git a/frontend/src/components/pages/Admin/Admin.tsx b/frontend/src/components/pages/Admin/Admin.tsx index 6d2fdf7..86e2f6e 100644 --- a/frontend/src/components/pages/Admin/Admin.tsx +++ b/frontend/src/components/pages/Admin/Admin.tsx @@ -8,9 +8,31 @@ import less from "./Admin.module.less"; import PlayerCard from "../../entities/PlayerCard/PlayerCard"; import { useTranslation } from "react-i18next"; import CreateTeam from "../../widgets/CreateTeams/CreateTeams"; +import { UserList } from "../AdminEventPage/AdminEventAPI"; +import { useEffect, useState } from "react"; const AdminPage = () => { const { t } = useTranslation(); + + + const [players, setPlayerList] = useState([]); + + + + useEffect(() => { + +var index = window.location.pathname.indexOf("/dash/admin/") + "/dash/admin/".length; + +var result = window.location.pathname.substring(index); + + UserList(result) + .then((data) => { + setPlayerList(data); + }) + .catch((error) => { + console.error("Возникла ошибка с получением:", error); + }); + }, []); return ( @@ -21,6 +43,9 @@ const AdminPage = () => { + {players.map((event) => ( +
{event.first_name}
+ ))} diff --git a/frontend/src/components/pages/AdminEventPage/AdminEventAPI.ts b/frontend/src/components/pages/AdminEventPage/AdminEventAPI.ts index 672b244..681fc03 100644 --- a/frontend/src/components/pages/AdminEventPage/AdminEventAPI.ts +++ b/frontend/src/components/pages/AdminEventPage/AdminEventAPI.ts @@ -1,5 +1,5 @@ import { FormEvent } from "react"; -import { API_BASE, API_EVENT } from "../../app/APIurl"; +import { API_BASE, API_EVENT, API_USERS } from "../../app/APIurl"; export const submitAddEvent = (e: FormEvent) => { e.preventDefault(); @@ -56,6 +56,8 @@ export const eventList = () => { console.error('Возникла ошибка с получением:', error); }); } + +//удалить ивент export const deleteEvent = (id:string) => { fetch(`${API_BASE}${API_EVENT}${id}`, { method: "DELETE", @@ -74,3 +76,33 @@ export const deleteEvent = (id:string) => { console.error('Возникла ошибка с удалением:', error); }); } + +//получение списка юзеров +export const UserList = (id:string) => { + +return fetch(`${API_BASE}${API_EVENT}${id}/${API_USERS}`, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, +}) +.then(response => { + + console.log(response.status); + + if (response.ok) { + console.log('Получил:', response.headers.get('Location')); + return response.json(); + } else { + + throw new Error('Код ошибки: ' + response.status); + } +}) +.then(data => { + console.log('Успешно:', data); + return data +}) +.catch(error => { + console.error('Возникла ошибка с получением:', error); +}); +} diff --git a/frontend/src/components/pages/Main/Main.module.less b/frontend/src/components/pages/Main/Main.module.less index 751f44a..dec8899 100644 --- a/frontend/src/components/pages/Main/Main.module.less +++ b/frontend/src/components/pages/Main/Main.module.less @@ -51,6 +51,14 @@ justify-content:space-between; padding: 0; } +.model-content{ + display: flex; + flex-direction: column; + justify-content:center; + +} + + @media (max-width: 820px) { .general-left{ width: 100%; diff --git a/frontend/src/components/pages/Main/Main.tsx b/frontend/src/components/pages/Main/Main.tsx index 0957f12..492dd58 100644 --- a/frontend/src/components/pages/Main/Main.tsx +++ b/frontend/src/components/pages/Main/Main.tsx @@ -51,7 +51,7 @@ const Main = () => {
{event.title} - Дата начала: {event.start_date} + Start Date: {event.start_date}
{false && ( @@ -62,10 +62,10 @@ const Main = () => { {t("respondRequest")} - +

{t("entrance")}

- +
submitRegister(event, navigate)}>
@@ -76,8 +76,6 @@ const Main = () => {
- -
diff --git a/frontend/src/components/pages/SkillTree/SkillTree.module.less b/frontend/src/components/pages/SkillTree/SkillTree.module.less index 63086a3..64fd32e 100644 --- a/frontend/src/components/pages/SkillTree/SkillTree.module.less +++ b/frontend/src/components/pages/SkillTree/SkillTree.module.less @@ -5,6 +5,7 @@ } .left{ width: 50%; +padding: 20px; } .right{ width: 50%; @@ -12,4 +13,24 @@ width: 50%; } .card{ margin: 10px; + padding: 10px; +} +.input-form{ + display: flex; + flex-direction: column; + gap: 8px; +} +.title{ + padding: 0; +} +.up{ + display: flex; + flex-direction: column; +} +.header{ + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 0; } \ No newline at end of file diff --git a/frontend/src/components/pages/SkillTree/SkillTree.tsx b/frontend/src/components/pages/SkillTree/SkillTree.tsx index d6d46f2..8d268c8 100644 --- a/frontend/src/components/pages/SkillTree/SkillTree.tsx +++ b/frontend/src/components/pages/SkillTree/SkillTree.tsx @@ -9,7 +9,7 @@ import { Link } from "react-router-dom"; import { ToastAction } from "../../shared/ui/toast"; import { useToast } from "../../shared/ui/use-toast"; import { buttonVariants } from "../../ui/button"; -import { addEvent, submitRegister } from "../../widgets/Header/AuthAPI"; +import { addEvent, deleteEvent, submitRegister } from "../../widgets/Header/AuthAPI"; import { Card, CardContent, @@ -53,7 +53,7 @@ const SkillTree = () => {