Работающий функционал
This commit is contained in:
1 parent
3b1df81c41
commit
04138d36b1
14 files changed
+2879
-933
No files matched your search
@@ -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
|
||||
Reference in new issue
Block a user