Работающий функционал

This commit is contained in:
astakhovp committed 2026-10-10 20:41:32 +03:00
1 parent 3b1df81c41
commit 04138d36b1
14 files changed
+2879 -933

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env python3
"""Модуль для работы с сериями"""
from db_utils import get_cursor
def get_series_by_letter(letter=''):
"""Возвращает серии по первой букве"""
conn, cur = get_cursor()
if letter:
cur.execute("""
SELECT s.id, s.name, s.name_hash,
COUNT(DISTINCT b.id) as books_count
FROM series s
LEFT JOIN books b ON b.series_id = s.id
WHERE s.name ILIKE %s
GROUP BY s.id, s.name, s.name_hash
ORDER BY s.name
LIMIT 100
""", (letter + '%',))
else:
cur.execute("""
SELECT DISTINCT lower(substring(name, 1, 1)) as letter,
COUNT(*) as cnt
FROM series
WHERE name ~ '^[а-яА-Яa-zA-Z]'
GROUP BY lower(substring(name, 1, 1))
ORDER BY letter
""")
result = cur.fetchall()
conn.close()
return result
def get_series_by_hash(series_hash):
"""Возвращает серию по хешу"""
conn, cur = get_cursor()
cur.execute("""
SELECT id, name, name_hash
FROM series
WHERE name_hash = %s
""", (series_hash,))
series = cur.fetchone()
conn.close()
return series
def get_series_books(series_id):
"""Возвращает все книги серии"""
conn, cur = get_cursor()
cur.execute("""
SELECT b.id, b.title, b.language, b.series_number,
string_agg(DISTINCT a.full_name, ', ' ORDER BY ba.position) as authors
FROM books b
JOIN book_authors ba ON ba.book_id = b.id
JOIN authors a ON a.id = ba.author_id
WHERE b.series_id = %s
GROUP BY b.id, b.title, b.language, b.series_number
ORDER BY b.series_number NULLS LAST, b.title
""", (series_id,))
books = cur.fetchall()
conn.close()
return books