initial commit (backend)

This commit is contained in:
2026-09-20 11:45:58 +00:00
commit 033adf023e
65 changed files with 28292 additions and 0 deletions
+75
View File
@@ -0,0 +1,75 @@
"""
Загрузка предложений по уровням (A1, A2, B1).
Каждый уровень загружается из отдельного CSV файла.
Нумерация предложений начинается с 1 для каждого уровня.
"""
import asyncio
import asyncpg
import csv
from config import DB_CONFIG
def load_sentences_from_csv(filename):
"""Загружает предложения из CSV файла (формат: polish,english,russian,ukrainian)."""
sentences = []
with open(filename, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
sentences.append({
"sentence_pl": row["polish"].strip(),
"translation_ru": row.get("russian", ""),
"translation_uk": row.get("ukrainian", ""),
"translation_en": row.get("english", ""),
})
return sentences
async def main():
conn = await asyncpg.connect(**DB_CONFIG)
level_files = [
("A1", "sentences_a1.csv"),
("A2", "sentences_a2.csv"),
("B1", "sentences_b1.csv"),
]
total_added = 0
for level, filename in level_files:
print(f"\n{'='*50}")
print(f"Загружаю предложения уровня {level} из {filename}")
print(f"{'='*50}")
sentences = load_sentences_from_csv(filename)
# Удаляем старые предложения этого уровня
await conn.execute("DELETE FROM sentences WHERE level = $1", level)
# Нумерация начинается с 1 для каждого уровня
max_num = 0
added = 0
for s in sentences:
max_num += 1
words_count = len(s["sentence_pl"].split())
difficulty = 1 if words_count <= 4 else 2 if words_count <= 6 else 3
await conn.execute(
"""INSERT INTO sentences (sentence_number, sentence_pl, translation_ru, translation_uk, translation_en, difficulty, level)
VALUES ($1, $2, $3, $4, $5, $6, $7)""",
max_num, s["sentence_pl"],
s["translation_ru"], s["translation_uk"], s["translation_en"],
difficulty, level
)
added += 1
print(f"{level} #{max_num}: {s['sentence_pl'][:60]}...")
total_added += added
print(f"Добавлено {added} предложений уровня {level}")
await conn.close()
print(f"\n🎉 Готово! Всего добавлено {total_added} предложений")
if __name__ == "__main__":
asyncio.run(main())