diff --git a/.DS_Store b/.DS_Store index e94f1dc493a77b4692091a208521f3dc355226d0..56b57d9d4b1db36bebe668bc6b5bcf285956a798 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c098953bc4a43c534bfe2b878038aacb0dbcb03 --- /dev/null +++ b/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,4 @@ +// Referring to the auth.ts we just created +import {handlers} from "@/shared/api/model/auth/auth"; + +export const {GET, POST} = handlers \ No newline at end of file diff --git a/app/api/file/upload/route.ts b/app/api/file/upload/route.ts new file mode 100644 index 0000000000000000000000000000000000000000..3878f82c6f807a488a19167c6caf9288d7a9b8f9 --- /dev/null +++ b/app/api/file/upload/route.ts @@ -0,0 +1,116 @@ +import {NextRequest, NextResponse} from "next/server"; +import {auth} from "@/shared/api/model/auth/auth"; +import {ApiResponse} from "@/shared/types/types"; +import {errorMessages} from "@/shared/config"; + +export async function POST(req: NextRequest) { + + try { + const session = await auth(); + + const url = process.env.DB_HOST + `/upload/` + + const referer = req.headers.get("referer"); + const isHost = referer?.includes(String(process.env.HOST)) ?? false; + + if(!isHost) { + return NextResponse.json( + {message: "Доступ ограничен", status: 400}, + {status: 400} + ); + } + + + const body = await req.formData(); + + const response = await fetch(url, { + method: "POST", + headers: { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-expect-error + Authorization: `Bearer ${session?.accessToken || ""}`, + }, + cache: "no-store", + body, + }); + + + + if (!response.ok) { + const contentType = response.headers.get("Content-Type"); + const customMessage = errorMessages[response.status] || `Ошибка ${response.status}`; + + if (response.status === 204) { + return NextResponse.json({ + message: "Операция выполнена успешно (204 No Content).", + status: response.status, + data: null, + }, { + status: response.status, + }); + } + + if (contentType && contentType.includes("text/html")) { + const errorHtml = await response.text(); + return NextResponse.json({ + message: `Ошибка на сервере (${response.status}). Возможно, проблема на стороне API.`, + status: response.status, + data: errorHtml, + }, { + status: response.status, + }); + } + + try { + const data = await response.json(); + return NextResponse.json({ + message: data?.success || data?.error || customMessage, // Используем серверное сообщение или дефолтное + status: response.status, + data, + }, { + status: response.status, + }); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (error) { + return NextResponse.json({ + message: customMessage, + status: response.status, + }, { + status: response.status, + }); + } + } + + try { + const data = await response.json(); + return NextResponse.json({ + message: data?.success || data?.error || "Успешный ответ", + status: response.status, + data, + }, { + status: response.status, + }); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + } catch (error) { + return NextResponse.json({ + message: "Запрос выполнен, но данных нет.", + status: response.status, + data: null, + }, { + status: response.status, + }); + } + + + } catch (error) { + return NextResponse.json( + { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-ignore + message: error.message || "Internal Server Error", + status: 500, + }, + {status: 500} + ); + } +} diff --git a/app/faq/page.tsx b/app/faq/page.tsx new file mode 100644 index 0000000000000000000000000000000000000000..c2b01efdc2c5a655d8feffba1d90c40eb71cd304 --- /dev/null +++ b/app/faq/page.tsx @@ -0,0 +1,3 @@ +export const dynamic = 'force-static'; + +export {default} from "@/views/faq" \ No newline at end of file diff --git a/package.json b/package.json index 5498b508c19ea2297459042336e62bba639092eb..e055d28fe4dbd6cc0c8d2f7d68a7a1e539fad06d 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,13 @@ "lint": "next lint" }, "dependencies": { + "@tanstack/react-query": "^5.66.4", + "@tanstack/react-query-devtools": "^5.66.4", "@types/react-scroll": "^1.8.10", "@types/sanitize-html": "^2.13.0", "clsx": "^2.1.1", "next": "15.1.7", + "next-auth": "^5.0.0-beta.25", "react": "^19.0.0", "react-device-detect": "^2.2.3", "react-dom": "^19.0.0", diff --git a/public/.DS_Store b/public/.DS_Store index 921de0787afa7c12efc6f449a07e485df3d40f75..a026e8f67b943f33ade002e2a82ba3252c942562 100644 Binary files a/public/.DS_Store and b/public/.DS_Store differ diff --git a/public/media/about/b-f-sm.png b/public/media/about/b-f-sm.png index a82848496d4c50dfcb68c4f69b87dd82e26dd8e8..67797713de3a63933f3ae995719f7fee9f9dedd9 100644 Binary files a/public/media/about/b-f-sm.png and b/public/media/about/b-f-sm.png differ diff --git a/public/media/cards/main-card.jpg b/public/media/cards/main-card.jpg index c4ab771459a17163235266bec81c9a6787d93e34..961ea0f3a43a205828015d9dd670e21d409e7c67 100644 Binary files a/public/media/cards/main-card.jpg and b/public/media/cards/main-card.jpg differ diff --git a/public/media/cards/q-1.png b/public/media/cards/q-1.png deleted file mode 100644 index c1fe13ba243db93a26efab394dad1bcedab03dce..0000000000000000000000000000000000000000 Binary files a/public/media/cards/q-1.png and /dev/null differ diff --git a/public/media/cards/quiz/1.jpg b/public/media/cards/quiz/1.jpg index 1c3d2a5bad8c1a11c06811d5f0498875c46e2ce7..bbc16be6e8f0e6bd208adcaadfd8c1394bcc5e71 100644 Binary files a/public/media/cards/quiz/1.jpg and b/public/media/cards/quiz/1.jpg differ diff --git a/public/media/cards/quiz/2.jpg b/public/media/cards/quiz/2.jpg index 88e4cc3b82c4fe474c5853f63d8849062f2af613..51a5b636d64240efaf22877d9b716c3d284db98d 100644 Binary files a/public/media/cards/quiz/2.jpg and b/public/media/cards/quiz/2.jpg differ diff --git a/public/media/cards/quiz/3.jpg b/public/media/cards/quiz/3.jpg index 658a82a90234ef3ad66d0511274ba8349ea42b99..2c7500f01e75762de00b88fcc78f52f05a2c4523 100644 Binary files a/public/media/cards/quiz/3.jpg and b/public/media/cards/quiz/3.jpg differ diff --git a/public/media/cards/quiz/4.jpg b/public/media/cards/quiz/4.jpg index 7ccd5822e8397a607f19451522c6dc50fba3d28a..799b498054027ae7b007ada838cee1c4773d24a4 100644 Binary files a/public/media/cards/quiz/4.jpg and b/public/media/cards/quiz/4.jpg differ diff --git a/public/media/cards/quiz/5.jpg b/public/media/cards/quiz/5.jpg index 4d0231cf1805c02fa24292a3bc495d565f00e9ae..c4bd9934e2774824e4698be65c2a3bf07aaf28b4 100644 Binary files a/public/media/cards/quiz/5.jpg and b/public/media/cards/quiz/5.jpg differ diff --git a/public/media/cards/quiz/6.jpg b/public/media/cards/quiz/6.jpg index bdd059ecc1d84f318d94e53ea6380562394cdce2..99ba28f104789b10c4b3b7d5e56da2d6fef20e52 100644 Binary files a/public/media/cards/quiz/6.jpg and b/public/media/cards/quiz/6.jpg differ diff --git a/public/media/cards/quiz/7.jpg b/public/media/cards/quiz/7.jpg index 469dbc94861f283841e012c2506192a87d01afe4..9b4ef297dea3fd3ca8c3a9ad8b93a93c8b1cf833 100644 Binary files a/public/media/cards/quiz/7.jpg and b/public/media/cards/quiz/7.jpg differ diff --git a/public/media/cards/quiz/8.jpg b/public/media/cards/quiz/8.jpg index f24b4a8720a5a141b053015c5ddc6580093aa0b3..cb372087dfd5cfdd39d1e9270bb78b24800b6b0f 100644 Binary files a/public/media/cards/quiz/8.jpg and b/public/media/cards/quiz/8.jpg differ diff --git a/public/media/faq/b-f-lg.png b/public/media/faq/b-f-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2c3cb9d58049b8325afac0867c814b782c5ca4 Binary files /dev/null and b/public/media/faq/b-f-lg.png differ diff --git a/public/media/faq/b-f-sm.png b/public/media/faq/b-f-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..67797713de3a63933f3ae995719f7fee9f9dedd9 Binary files /dev/null and b/public/media/faq/b-f-sm.png differ diff --git a/public/media/faq/b-r-sm.png b/public/media/faq/b-r-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1fdba3db539ccffef800810530356802368a57 Binary files /dev/null and b/public/media/faq/b-r-sm.png differ diff --git a/public/media/faq/top-slime.png b/public/media/faq/top-slime.png new file mode 100644 index 0000000000000000000000000000000000000000..dfc7e10c1fd4fd1d17358ede35303e61702e6ecd Binary files /dev/null and b/public/media/faq/top-slime.png differ diff --git a/public/media/home/b-f-sm.png b/public/media/home/b-f-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..1c652b16669e69a834730b877907e95d36a74e33 Binary files /dev/null and b/public/media/home/b-f-sm.png differ diff --git a/public/media/home/b-lg.png b/public/media/home/b-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..feec58552f757b248a8dffc4f3266836626b3c5d Binary files /dev/null and b/public/media/home/b-lg.png differ diff --git a/public/media/home/b-sm.png b/public/media/home/b-sm.png index 70a275f56b7b72a6471665c768352842945e33e7..23ec585577f4175b7659f8616ac0e4e00ceef9d4 100644 Binary files a/public/media/home/b-sm.png and b/public/media/home/b-sm.png differ diff --git a/public/media/home/f-lg.png b/public/media/home/f-lg.png index ebee7e08ea18d2ddcde219a596462434c869bf4a..1a7bfc9837005e7c0dcbbe282e4a381bdd247c23 100644 Binary files a/public/media/home/f-lg.png and b/public/media/home/f-lg.png differ diff --git a/public/media/home/f-sm.png b/public/media/home/f-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..2d125c65f2f67592f1e8b496015c5804dd9f04e7 Binary files /dev/null and b/public/media/home/f-sm.png differ diff --git a/public/media/home/h-lg.png b/public/media/home/h-lg.png index b768648dc33ab0f0c619d338e1d0944a161afa5d..9b348d77208d4246e7eae26e1add927658ac34a2 100644 Binary files a/public/media/home/h-lg.png and b/public/media/home/h-lg.png differ diff --git a/public/media/layout/footer-desktop.png b/public/media/layout/footer-desktop.png index 2451aa214ec09d90fdfb785572bc7658e14ac487..ee303566828e939a2849a8e894d1f0597bfd4745 100644 Binary files a/public/media/layout/footer-desktop.png and b/public/media/layout/footer-desktop.png differ diff --git a/public/media/prize/prize-lg.png b/public/media/prize/prize-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..f2da8b0d65fc3c390d95ec82b0df2014644a571a Binary files /dev/null and b/public/media/prize/prize-lg.png differ diff --git a/public/media/prize/prize-sm.png b/public/media/prize/prize-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..2c07787b078619e4b240d17c9a3fdda23d8651c7 Binary files /dev/null and b/public/media/prize/prize-sm.png differ diff --git a/public/media/prize/underline-lg.png b/public/media/prize/underline-lg.png new file mode 100644 index 0000000000000000000000000000000000000000..68cd3648ab5aecb9528a3702fbf28c1ff4b4af4d Binary files /dev/null and b/public/media/prize/underline-lg.png differ diff --git a/public/media/prize/underline-sm.png b/public/media/prize/underline-sm.png new file mode 100644 index 0000000000000000000000000000000000000000..03440df83ee492eda1a7c07c63f9b58624b77ba5 Binary files /dev/null and b/public/media/prize/underline-sm.png differ diff --git a/public/media/step/arrow-1.png b/public/media/step/arrow-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f7f1460cf0da804e12d55043d584b7c4b327a243 Binary files /dev/null and b/public/media/step/arrow-1.png differ diff --git a/public/media/step/arrow-2.png b/public/media/step/arrow-2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd4babc00e7567a003a90ceae7dc3cc11ea7ce37 Binary files /dev/null and b/public/media/step/arrow-2.png differ diff --git a/public/media/step/sketch.png b/public/media/step/sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..93408569b93d8e477eacbd51fe1c63edc2ff7c49 Binary files /dev/null and b/public/media/step/sketch.png differ diff --git a/public/media/utils/navlink-line-dark.png b/public/media/utils/navlink-line-dark.png index 271b953d125ee592b69f5f741ba78d01c2747e9e..95da6a7cd0c15da9f60907879de7a20816472cee 100644 Binary files a/public/media/utils/navlink-line-dark.png and b/public/media/utils/navlink-line-dark.png differ diff --git a/public/media/utils/package-sm.png b/public/media/utils/package-sm.png index 9e2bb2e02da17549dc3ba9b364eabca5aba05a2e..5b0570dbb9f557bfbe59459a78b23736e97f1c26 100644 Binary files a/public/media/utils/package-sm.png and b/public/media/utils/package-sm.png differ diff --git a/public/media/utils/package.png b/public/media/utils/package.png new file mode 100644 index 0000000000000000000000000000000000000000..87ae65649127a5f08b8f76ec84e3f6f691dcf433 Binary files /dev/null and b/public/media/utils/package.png differ diff --git a/public/rules/Rules_promotion_competition_Fruittella_Creative_family_competition.pdf b/public/rules/Rules_promotion_competition_Fruittella_Creative_family_competition.pdf index c346d5eb53eeadd9d098fa76677dce47277b141c..e4d68567642255688e54b2d57e34e61aeb136263 100644 Binary files a/public/rules/Rules_promotion_competition_Fruittella_Creative_family_competition.pdf and b/public/rules/Rules_promotion_competition_Fruittella_Creative_family_competition.pdf differ diff --git a/src/.DS_Store b/src/.DS_Store index 9889cc6d63ac5611d496389b7168f5b766e0e9ca..d6c9ed1b687afa49de69a70ca24a5ef341c0eb7b 100644 Binary files a/src/.DS_Store and b/src/.DS_Store differ diff --git a/src/app/appEntry.tsx b/src/app/appEntry.tsx index f9800f6c4eb539b55042e73904d6131d2ac9f8fb..9a7b2347482b8a913e8c7ea3c906c7d38d0a5a08 100644 --- a/src/app/appEntry.tsx +++ b/src/app/appEntry.tsx @@ -1,34 +1,53 @@ +import { Fragment, ReactNode } from "react"; +import { BaseLayout } from "@/app/layouts/base-layout"; -import {Fragment, ReactNode} from "react"; -import {BaseLayout} from "@/app/layouts/base-layout"; -import {CookieAlert} from "@/feature/cookie-alert"; -import {QuizDetailed} from "@/widgets/quiz-detailed/ui/QuizDetailed"; -import {VideoModal} from "@/widgets/video-modal"; +import { CookieAlert } from "@/feature/cookie-alert"; +import { NextAuthProvider } from "@/app/providers/NextAuthProvider"; +import { QuizDetailed } from "@/widgets/quiz-detailed/ui/QuizDetailed"; +import { UploadFile } from "@/widgets/upload-file"; +import { PreviewFile } from "@/widgets/preview-file"; +import { VideoModal } from "@/widgets/video-modal"; +import { QueryClientProvider } from "./providers/QueryClientProvider"; +import { ModalView } from "@/feature/modal-view"; +import { SignUp } from "@/widgets/sign-up"; +import { AuthError, UploadError, UploadSuccess } from "@/widgets/modal-status"; export default function RootLayout(props: Readonly<{ children: ReactNode }>) { + const { children } = props; - const {children} = props; + return ( + + + + + + + + - return ( - - - - - - - - + + + + + - - - - - - -