Skip to content

Commit

Permalink
Merge pull request #16 from vklachkov/front-refactor
Browse files Browse the repository at this point in the history
Front refactor
  • Loading branch information
vklachkov authored Sep 25, 2024
2 parents adc8ebd + 4a888c8 commit 381a7f0
Show file tree
Hide file tree
Showing 97 changed files with 2,138 additions and 1,474 deletions.
6 changes: 0 additions & 6 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,6 @@ name: Deploy

on:
workflow_dispatch:
pull_request:
branches: [ "develop" ]
types: [closed]
paths:
- "frontend/**"
- ".github/workflows/**"

env:
REGISTRY: ghcr.io
Expand Down
2 changes: 1 addition & 1 deletion backend/mail/code.html
Original file line number Diff line number Diff line change
Expand Up @@ -149,4 +149,4 @@
</table>
</div>
</body>
</html>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE participants
DROP COLUMN deleted_by;
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ALTER TABLE participants
ADD deleted_by INTEGER DEFAULT NULL;

ALTER TABLE participants
ADD CONSTRAINT fk_deleted_by FOREIGN KEY (deleted_by) REFERENCES adults(id);
15 changes: 15 additions & 0 deletions backend/migrations/2024-09-21-165603_fix-question/up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
UPDATE participants
SET answers = answers - 'Расскажи о своих навыках? что ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками Что ты умеешь делать лучше других?' || jsonb_build_object('Расскажи о своих навыках – что ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками? Что ты умеешь делать лучше других?', answers->'Расскажи о своих навыках? что ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками Что ты умеешь делать лучше других?')
WHERE answers ? 'Расскажи о своих навыках? что ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками Что ты умеешь делать лучше других?';

UPDATE participants
SET answers = answers - 'Расскажи о своих достижениях о проектах которые ты реализовал раньше и какую роль ты в этих проектах выполнял' || jsonb_build_object('Расскажи о своих достижениях – о проектах, которые ты реализовал раньше и какую роль ты в этих проектах выполнял?', answers->'Расскажи о своих достижениях о проектах которые ты реализовал раньше и какую роль ты в этих проектах выполнял')
WHERE answers ? 'Расскажи о своих достижениях о проектах которые ты реализовал раньше и какую роль ты в этих проектах выполнял';

UPDATE participants
SET answers = answers - 'Расскажи о трех самых ярких конкурсах в которых ты принимал участие' || jsonb_build_object('Расскажи о трех самых ярких конкурсах, в которых ты принимал участие', answers->'Расскажи о трех самых ярких конкурсах в которых ты принимал участие')
WHERE answers ? 'Расскажи о трех самых ярких конкурсах в которых ты принимал участие';

UPDATE participants
SET answers = answers - 'Как ты думаешь почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать чтобы как можно скорее достичь новых горизонтов в космосе?' || jsonb_build_object('Как ты думаешь, почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну, не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать, чтобы как можно скорее достичь новых горизонтов в космосе?', answers->'Как ты думаешь почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать чтобы как можно скорее достичь новых горизонтов в космосе?')
WHERE answers ? 'Как ты думаешь почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать чтобы как можно скорее достичь новых горизонтов в космосе?';
35 changes: 35 additions & 0 deletions backend/scripts/copy_participants_from_prod.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import json
import sys
import requests

source_host = sys.argv[1]
source_login = sys.argv[2]
source_password = sys.argv[3]
target_host = sys.argv[4]
target_login = sys.argv[5]
target_password = sys.argv[6]

source_login_request = requests.post(f'{source_host}/api/v1/login', json={'name': source_login, 'password': source_password})
if source_login_request.status_code != 200:
print(f'Failed to login on source. Status code: {source_login_request.status_code}')
sys.exit(1)

target_login_request = requests.post(f'{target_host}/api/v1/login', json={'name': target_login, 'password': target_password})
if target_login_request.status_code != 200:
print(f'Failed to login on target. Status code: {target_login_request.status_code}')
sys.exit(1)

participants_request = requests.get(f'{source_host}/api/v1/org/participants', cookies=source_login_request.cookies)
if participants_request.status_code != 200:
print(f'Failed to fetch participants. Status code: {participants_request.status_code}')
sys.exit(1)

participants = json.loads(participants_request.content)

for participant in participants:
participant['jury_id'] = None

create_request = requests.post(f'{target_host}/api/v1/org/participant', json=participant, cookies=target_login_request.cookies)
if create_request.status_code != 200:
print(f'Failed to create participant. Status code: {create_request.status_code}')
sys.exit(1)
39 changes: 39 additions & 0 deletions backend/scripts/get_participants_stats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import json
import sys
import requests

host = sys.argv[1]
login = sys.argv[2]
password = sys.argv[3]

login_request = requests.post(f"{host}/api/v1/login", json={"name": login, "password": password})
if login_request.status_code != 200:
print(f"Failed to login. Status code: {login_request.status_code}")
sys.exit(1)

participants_request = requests.get(f"{host}/api/v1/org/participants", cookies=login_request.cookies)
if participants_request.status_code != 200:
print(f"Failed to fetch participants. Status code: {participants_request.status_code}")
sys.exit(1)

participants = json.loads(participants_request.content)

applications_per_district = {}
total = len(participants)

for participant in participants:
district = participant["info"]["district"]

if district in applications_per_district:
applications_per_district[district] += 1
else:
applications_per_district[district] = 1

print("Количество заявок по регионам", end="\n\n")
for district, participants in applications_per_district.items():
print(f"{district}: {participants}")

print()

print(f"Всего регионов: {len(applications_per_district)} шт.")
print(f"Всего заявок: {total} шт.")
9 changes: 9 additions & 0 deletions backend/scripts/parse_participants_emails.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import sys
import json

file = sys.argv[1]

with open(file, "r") as file:
participants = json.loads(file.read())
for participant in participants:
print(f"Участник {participant["info"]["name"]}, почта {participant["info"]["email"]}, код участника {participant["code"]}")
2 changes: 1 addition & 1 deletion backend/scripts/send_participants_codes.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,4 @@
for error in service_response["errors"]:
print(f"Ошибка при отправке. Код {error["code"]}: {error["detail"]}")
else:
print(f"Запрос на отправку доставлен. Статус сообщения: {service_response["status"]}")
print(f"Запрос на отправку доставлен. Статус сообщения: {service_response["status"]}")
34 changes: 0 additions & 34 deletions backend/scripts/upload_participants.py

This file was deleted.

57 changes: 46 additions & 11 deletions backend/src/api/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::{
};
use anyhow::{bail, Context};
use axum::{
extract::{Path, State},
extract::{Path, Query, State},
http::StatusCode,
response::IntoResponse,
routing::{delete, get, patch, post},
Expand Down Expand Up @@ -39,7 +39,10 @@ pub fn v1(datasource: Arc<DataSource>, tokens: Arc<BackendTokens>) -> Router {
Router::new()
.route("/participants", get(all_participants))
.route("/participant", post(create_participant))
.route("/participant/:id", get(get_participant))
.route(
"/participant/:id",
get(get_participant).delete(delete_participant),
)
.route("/participant/:id/info", patch(patch_participant_info))
.route("/participant/:id/command", post(set_participant_command))
.route("/adults", get(adults))
Expand Down Expand Up @@ -121,24 +124,24 @@ async fn new_application_webhook(

let answers = HashMap::from([
(
"Расскажи о своих навыках? что ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками Что ты умеешь делать лучше других?".to_owned(),
"Расскажи о своих навыкахчто ты умеешь в инженерной или научной деятельности и на каком уровне ты владеешь этими навыками? Что ты умеешь делать лучше других?".to_owned(),
get("Расскажи_о_своих_навыках__что_ты_умеешь_в_инженерной_или_научной_деятельности_и_на_каком_уровне_ты_владеешь_этими_навыками_Что_ты_умеешь_делать_лучше_других").to_owned(),
),
(
"Расскажи о своих достижениях о проектах которые ты реализовал раньше и какую роль ты в этих проектах выполнял".to_owned(),
"Расскажи о своих достижениях о проектах, которые ты реализовал раньше и какую роль ты в этих проектах выполнял?".to_owned(),
get("Расскажи_о_своих_достижениях__о_проектах_которые_ты_реализовал_раньше_и_какую_роль_ты_в_этих_проектах_выполнял").to_owned(),
),
(
"Расскажи о трех самых ярких конкурсах в которых ты принимал участие".to_owned(),
"Расскажи о трех самых ярких конкурсах, в которых ты принимал участие".to_owned(),
get("Расскажи_о_трех_самых_ярких_конкурсах_в_которых_ты_принимал_участие").to_owned(),
),
(
"Как ты думаешь почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать чтобы как можно скорее достичь новых горизонтов в космосе?".to_owned(),
"Как ты думаешь, почему человек летает в космос не дальше орбиты МКС? Почему космические агентства до сих пор не освоили Луну, не долетели до Марса и не научились приземляться на астероиды? Какие направления науки и технологий надо усиленно развивать, чтобы как можно скорее достичь новых горизонтов в космосе?".to_owned(),
get("Как_ты_думаешь_почему_человек_летает_в_космос_не_дальше_орбиты_МКС_Почему_космические_агентства_до_сих_пор_не_освоили_Луну_не_долетели_до_Марса_и_не_научились_приземляться_на_астероиды_Какие_направления_науки_и_технологий_надо_усиленно_развивать_чтобы_как_можно_скорее_достичь_новых_горизонтов_в_космосе").to_owned(),
),
]);

let id = match state.datasource.create_participant(info, answers).await {
let id = match state.datasource.create_participant(None, None, info, answers, None).await {
Ok((id, _)) => id,
Err(err) => {
tracing::error!("Failed to create participant from webhook: {err}");
Expand Down Expand Up @@ -235,17 +238,35 @@ fn get_name(name: &str) -> String {

async fn all_participants(
State(state): State<Arc<BackendState>>,
Query(GetParticipantsQuery {
search,
sort,
order,
}): Query<GetParticipantsQuery>,
) -> Result<Json<Vec<Participant>>> {
Ok(Json(state.datasource.get_all_participants().await?))
Ok(Json(
state
.datasource
.get_all_participants(search, sort, order)
.await?,
))
}

async fn create_participant(
State(state): State<Arc<BackendState>>,
Json(NewParticipantPayload { info, answers }): Json<NewParticipantPayload>,
Json(payload): Json<NewParticipantPayload>,
) -> Result<()> {
let NewParticipantPayload {
code,
jury,
info,
answers,
rates,
} = payload;

state
.datasource
.create_participant(info, answers)
.create_participant(code, jury, info, answers, rates)
.await
.map(|_| ())
.map_err(Into::into)
Expand All @@ -264,6 +285,19 @@ async fn get_participant(
}
}

async fn delete_participant(
auth_session: auth::AuthSession,
State(state): State<Arc<BackendState>>,
Path(id): Path<ParticipantId>,
) -> Result<()> {
let authed_user_id = auth_session.user.unwrap().0.id;
state
.datasource
.delete_participant(id, authed_user_id)
.await
.map_err(Into::into)
}

async fn patch_participant_info(
State(state): State<Arc<BackendState>>,
Path(id): Path<ParticipantId>,
Expand Down Expand Up @@ -325,13 +359,14 @@ async fn delete_adult(
async fn jury_participants(
auth_session: auth::AuthSession,
State(state): State<Arc<BackendState>>,
Query(GetJuryParticipantsQuery { order }): Query<GetJuryParticipantsQuery>,
) -> Result<Json<Vec<AnonymousParticipant>>> {
let jury_id = auth_session.user.as_ref().unwrap().0.id;

Ok(Json(
state
.datasource
.get_all_participants()
.get_all_participants(None, Sort::Id, order)
.await?
.into_iter()
.filter(|p| {
Expand Down
Loading

0 comments on commit 381a7f0

Please sign in to comment.