Работающий функционал
This commit is contained in:
1 parent
3b1df81c41
commit
04138d36b1
14 files changed
+2879
-933
No files matched your search
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Модуль для работы с жанрами"""
|
||||
from db_utils import get_cursor
|
||||
|
||||
|
||||
def get_root_genres():
|
||||
"""Возвращает корневые жанры с количеством книг"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.id, g.code, g.title_ru, g.title_en,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.is_root = TRUE
|
||||
GROUP BY g.id, g.code, g.title_ru, g.title_en
|
||||
ORDER BY books_count DESC
|
||||
""")
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
|
||||
|
||||
def get_subgenres(root_code):
|
||||
"""Возвращает поджанры для корневого жанра"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.id, g.code, g.title_ru, g.title_en,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.root_code = %s AND g.is_root = FALSE
|
||||
GROUP BY g.id, g.code, g.title_ru, g.title_en
|
||||
ORDER BY books_count DESC
|
||||
""", (root_code,))
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
|
||||
|
||||
def get_genre_books(genre_id, limit=100, offset=0):
|
||||
"""Возвращает книги жанра"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT b.id, b.title, b.language, b.added_date,
|
||||
string_agg(DISTINCT a.full_name, ', ' ORDER BY ba.position) as authors
|
||||
FROM books b
|
||||
JOIN book_genres bg ON bg.book_id = b.id
|
||||
JOIN book_authors ba ON ba.book_id = b.id
|
||||
JOIN authors a ON a.id = ba.author_id
|
||||
WHERE bg.genre_id = %s
|
||||
GROUP BY b.id, b.title, b.language, b.added_date
|
||||
ORDER BY b.added_date DESC NULLS LAST
|
||||
LIMIT %s OFFSET %s
|
||||
""", (genre_id, limit, offset))
|
||||
|
||||
books = cur.fetchall()
|
||||
conn.close()
|
||||
return books
|
||||
|
||||
|
||||
def get_custom_genres():
|
||||
"""Возвращает кастомные жанры (не из genres.xml)"""
|
||||
conn, cur = get_cursor()
|
||||
|
||||
cur.execute("""
|
||||
SELECT g.code, g.parent_code, g.root_code,
|
||||
COUNT(DISTINCT bg.book_id) as books_count
|
||||
FROM genres g
|
||||
LEFT JOIN book_genres bg ON bg.genre_id = g.id
|
||||
WHERE g.is_custom = TRUE
|
||||
GROUP BY g.code, g.parent_code, g.root_code
|
||||
ORDER BY books_count DESC
|
||||
""")
|
||||
|
||||
genres = cur.fetchall()
|
||||
conn.close()
|
||||
return genres
|
||||
Reference in new issue
Block a user