Compare commits

..

6 Commits

Author SHA1 Message Date
9e35fa4d7d fix current user endpoint
All checks were successful
Build Docker / deploy (push) Successful in 39s
Build Docker / build (push) Successful in 1m8s
2026-04-19 21:06:46 +03:00
d206d9421a fix id text area
All checks were successful
Build Docker / deploy (push) Successful in 40s
Build Docker / build (push) Successful in 1m3s
2026-04-19 20:59:19 +03:00
d35bcbe53a fix form
All checks were successful
Build Docker / deploy (push) Successful in 45s
Build Docker / build (push) Successful in 58s
2026-04-19 20:46:20 +03:00
e4690f6e2d fix class name
All checks were successful
Build Docker / deploy (push) Successful in 43s
Build Docker / build (push) Successful in 1m5s
2026-04-19 20:36:40 +03:00
472bf3c662 Merge pull request 'final' (#1) from dev into main
All checks were successful
Build Docker / deploy (push) Successful in 1m2s
Build Docker / build (push) Successful in 1m18s
Reviewed-on: #1
2026-04-19 17:27:42 +00:00
d58bfbb7c1 final 2026-04-19 20:25:06 +03:00
15 changed files with 166 additions and 20 deletions

View File

@@ -1,12 +1,15 @@
VENV=source ./.venv/bin/activate; #VENV=source ./.venv/bin/activate;
ALEMBIC=alembic -c ./server/backend/database/alembic/alembic.ini #ALEMBIC=alembic -c ./server/backend/database/alembic/alembic.ini
VENV= .venv\Scripts\activate #Windows
ALEMBIC=alembic -c server\backend\database\alembic\alembic.ini
.PHONY: run run_debug migrate_head migrate_down migrate_history migrate_current migrate_heads migrate_stamp migrate .PHONY: run run_debug migrate_head migrate_down migrate_history migrate_current migrate_heads migrate_stamp migrate
run: run:
$(VENV) python run.py --user_name admin $(VENV) python run.py --user_name admin
run_debug: run_debug:
$(VENV) python run.py --mode debug --user_name admin $(VENV) python run.py --mode debug --user_name admin
migrate_head: migrate_head:
$(VENV) $(ALEMBIC) upgrade head $(VENV) $(ALEMBIC)
migrate_down: migrate_down:
$(VENV) $(ALEMBIC) downgrade -1 $(VENV) $(ALEMBIC) downgrade -1
migrate_history: migrate_history:

View File

@@ -8,9 +8,9 @@ security = HTTPBearer(auto_error=False)
async def get_current_user( async def get_current_user(
credentials: HTTPAuthorizationCredentials = Depends(security), credentials: HTTPAuthorizationCredentials = Depends(security),
token_cookie: str = Cookie(default=None) token: str = Cookie(default=None)
): ):
token = credentials.credentials if credentials else token_cookie token = credentials.credentials if credentials else token
if not token: if not token:
raise HTTPException(status_code=401, detail="Not authenticated") raise HTTPException(status_code=401, detail="Not authenticated")
user = decodeJWT(token) user = decodeJWT(token)

View File

@@ -0,0 +1 @@
DoubleRus encoding by Diai; unfinished

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

@@ -0,0 +1,81 @@
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.woff") format("woff");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.eot") format("eot");
font-weight: 400;
font-style: normal;
font-display: swap;
}
body {
font-family: "MurreyC";
background: url('./image/bg.png') no-repeat 100% 100% fixed;
background-size: cover;
margin: 0;
padding: 0;
}
.glass-container {
position: fixed;
inset: 0;
backdrop-filter: blur(16px);
background: rgba(255,255,255,0.1); /* обязательно */
}
.login-box {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
background: url('./image/hamster.png') no-repeat 50% 50%;
padding-top: 50px;
}
form {
display: flex;
flex-direction: column;
}
h2 {
font-weight: 900;
font-size: 50px;
text-decoration: underline;
margin: 0;
padding: 0;
}
input {
width: 320px;
height: 50px;
padding: 0 20px;
border-radius: 25px;
border: 1px solid #000;
background-color: #ffffff;
outline: none;
font-size: 30px;
}
button {
margin-top: 10px;
font-size: 30px;
background-color: #3a1f09;
padding: 10px 15px;
border-radius: 33px;
transition: all .1s;
color: #e5b97e;
box-shadow: #3a1f09 2px 4px 10px 2px;
cursor: pointer;
}
button:hover {
background-color: #f0c590;
color: #b06029;
transform: scale(1.015);
}

View File

@@ -9,10 +9,10 @@
<body> <body>
<div class="glass-container"> <div class="glass-container">
<div class="login-box"> <div class="login-box">
<h2>Login</h2> <h2>Введите код</h2>
<form id="loginForm"> <form id="loginForm">
<input type="password" id="password" name="password" required placeholder="Code"> <input type="password" id="password" name="password" required placeholder="Код">
<button type="submit">Login</button> <button type="submit">Войти</button>
</form> </form>
</div> </div>
</div> </div>

View File

@@ -15,7 +15,7 @@ document.addEventListener("DOMContentLoaded", () => {
window.location.href = '/'; window.location.href = '/';
}); });
document.querySelector(".form-info").addEventListener("submit", async (e) => { document.querySelector(".form-connect").addEventListener("submit", async (e) => {
e.preventDefault(); e.preventDefault();
const guestData = { const guestData = {

View File

@@ -20,7 +20,7 @@
<ul class="menu"> <ul class="menu">
<!-- 1 --> <!-- 1 -->
<li class="item"> <li class="item">
<a href="#heading" class="link"> <a href="#" class="link">
Добро пожаловать! Добро пожаловать!
</a> </a>
</li> </li>
@@ -87,8 +87,7 @@
</section> </section>
<aside> <aside>
<div class="time"> <div class="time">
<!-- отсчет до даты --> <p id="demo"></p>
00:00:00
</div> </div>
</aside> </aside>
<section class="people" id="people"> <section class="people" id="people">
@@ -438,6 +437,11 @@
<label>Фамилия <label>Фамилия
<input type="text" name="lastName" id="flname" required> <input type="text" name="lastName" id="flname" required>
</label> </label>
<label class="label_1">Комментарий
<textarea cols="1.5" rows="1" type="text" name="lastName" id="text_field" placeholder="Напишите здесь о ваших особых предпочтениях и аллергиях"></textarea>
</label>
</div> </div>
<!-- Средняя колонка --> <!-- Средняя колонка -->
@@ -466,13 +470,16 @@
<label class="option"><input type="checkbox" name="drink" value="tequila" id="ctequila"> Текила</label> <label class="option"><input type="checkbox" name="drink" value="tequila" id="ctequila"> Текила</label>
</div> </div>
</form>
<form class="form-connect">
<button type="submit" class="answer_btn" id="bsubmit"> <button type="submit" class="answer_btn" id="bsubmit">
Подтвердить участие Подтвердить участие
</button> </button>
</form> <button type="logout" class="answer_btn" id="logoutForm">
<button type="logout" class="answer_btn" id="logoutForm">
Выйти Выйти
</button> </button>
</form>
</div> </div>
</section> </section>
</main> </main>

View File

@@ -28,3 +28,32 @@ const swiper = new Swiper('.swiper', {
} }
}); });
// Set the date we're counting down to
var countDownDate = new Date("Aug 22, 2026 12:00:00").getTime();
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Display the result in the element with id="demo"
document.getElementById("demo").innerHTML = days + "д " + hours + "ч "
+ minutes + "м " + seconds + "с ";
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);

View File

@@ -440,8 +440,8 @@ h4 {
} }
.answer_wrapper { .answer_wrapper {
background: linear-gradient(135deg, #f3d9c6, #e8c3a4, #d9a77a); background: linear-gradient(135deg, #f3d9c6, #e8c3a4, #d9a77a);
padding: 60px; padding: 50px;
margin: 0 400px; margin: 0 300px;
border-radius: 25px; border-radius: 25px;
box-shadow: 0 15px 40px rgba(0,0,0,0.08); box-shadow: 0 15px 40px rgba(0,0,0,0.08);
margin-top: 20px; margin-top: 20px;
@@ -457,8 +457,15 @@ h4 {
.form-info { .form-info {
display: grid; display: grid;
grid-template-columns: 1fr 1fr 1fr; grid-template-columns: 2fr 1fr 1fr;
gap: 50px; gap: 50px;
margin-bottom: 40px;
}
.form-connect {
width: 100%;
display: flex;
flex-direction: column;
gap: 20px;
} }
.form_name { .form_name {
@@ -468,7 +475,18 @@ h4 {
gap: 20px; gap: 20px;
font-size: 36px; font-size: 36px;
font-weight: 700; font-weight: 700;
justify-content: space-between;
width: 500px;
} }
label {
display: flex;
justify-content: space-between;
}
.label_1 {
flex-direction: column;
gap: 20px;
}
.block_title { .block_title {
font-weight: 700; font-weight: 700;
@@ -483,6 +501,7 @@ h4 {
gap: 10px; gap: 10px;
margin-bottom: 12px; margin-bottom: 12px;
font-size: 30px; font-size: 30px;
justify-content: start;
} }
input[type="text"] { input[type="text"] {
@@ -501,7 +520,6 @@ input[type="checkbox"] {
.answer_btn { .answer_btn {
grid-column: 1 / -1; grid-column: 1 / -1;
margin-top: 40px;
padding: 18px 40px; padding: 18px 40px;
border-radius: 30px; border-radius: 30px;
border: none; border: none;
@@ -527,6 +545,13 @@ input[type="checkbox"] {
outline: none; outline: none;
font-size: 30px; font-size: 30px;
} }
textarea {
padding: 0 20px;
border-radius: 25px;
border: none;
background-color: #ffffff;
font-size: 30px;
}
/* -----------------------------FOOTER---------------------------------- */ /* -----------------------------FOOTER---------------------------------- */