Merge branch 'develop' into kostia/fix/bug_fix

This commit is contained in:
Kostiantyn Stoliarskyi 2023-06-15 15:59:21 +03:00
commit 7c9f92a2d4
6 changed files with 50 additions and 34 deletions

View File

@ -6,7 +6,7 @@
{% block content %} {% block content %}
<div <div
class="pt-1 relative pr-5 shadow-md sm:rounded-lg mt-1 h-box flex"> class="pt-1 relative shadow-md sm:rounded-lg mt-1 h-box flex">
{% if not current_user.is_authenticated %} {% if not current_user.is_authenticated %}
<!-- prettier-ignore --> <!-- prettier-ignore -->
<div class="mx-auto my-auto h-full w-full p-2"> <div class="mx-auto my-auto h-full w-full p-2">
@ -31,7 +31,7 @@
{% endif %} {% endif %}
{% for book in books %} {% for book in books %}
<!-- prettier-ignore --> <!-- prettier-ignore -->
<dl class="bg-white dark:bg-gray-900 h-max w-full p-5 text-gray-900 divide-y divide-gray-200 dark:text-white dark:divide-gray-700 m-3 border-2 border-gray-200 border-solid rounded-lg dark:border-gray-700"> <dl class="bg-white dark:bg-gray-900 h-max p-5 text-gray-900 divide-y divide-gray-200 dark:text-white dark:divide-gray-700 m-3 border-2 border-gray-200 border-solid rounded-lg dark:border-gray-700">
<dt class="mb-2"><a class="flex flex-col pb-4" href="{{url_for('book.collection_view',book_id=book.id)}}">{{book.label}}</a></dt> <dt class="mb-2"><a class="flex flex-col pb-4" href="{{url_for('book.collection_view',book_id=book.id)}}">{{book.label}}</a></dt>
<dd class="flex flex-col md:flex-row text-lg font-semibold text-gray-500 md:text-lg dark:text-gray-400"> <dd class="flex flex-col md:flex-row text-lg font-semibold text-gray-500 md:text-lg dark:text-gray-400">
{% if book.versions %} {% if book.versions %}

View File

@ -6,7 +6,7 @@
{% block content %} {% block content %}
<div <div
class="pt-1 relative pr-5 shadow-md sm:rounded-lg mt-1 h-box flex"> class="pt-1 relative shadow-md sm:rounded-lg mt-1 h-box flex">
{% if not current_user.is_authenticated %} {% if not current_user.is_authenticated %}
<!-- prettier-ignore --> <!-- prettier-ignore -->
<div class="mx-auto my-auto h-full w-full p-2"> <div class="mx-auto my-auto h-full w-full p-2">

View File

@ -11,7 +11,7 @@
{% endif %} {% endif %}
<div class="pt-1 relative pr-5 shadow-md sm:rounded-lg mt-1 h-box flex"> <div class="pt-1 relative shadow-md sm:rounded-lg mt-1 h-box flex flex-col">
{% if not current_user.is_authenticated %} {% if not current_user.is_authenticated %}
<div class="mx-auto my-auto h-full w-full p-2"> <div class="mx-auto my-auto h-full w-full p-2">
<button type="button" id="connectWalletBtn" class="w-full h-full text-black dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-100 font-medium rounded-lg text-sm px-4 py-2.5 justify-center text-center inline-flex items-center border border-gray-200 dark:border-gray-700"> <button type="button" id="connectWalletBtn" class="w-full h-full text-black dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-100 font-medium rounded-lg text-sm px-4 py-2.5 justify-center text-center inline-flex items-center border border-gray-200 dark:border-gray-700">
@ -25,28 +25,29 @@
{% if current_user.is_authenticated and not books.total %} {% if current_user.is_authenticated and not books.total %}
<div class="mx-auto my-auto h-full w-full p-2"> <div class="mx-auto my-auto h-full w-full p-2">
<button type="button" data-modal-target="add-book-modal" data-modal-toggle="add-book-modal" class="w-full h-full text-black dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-100 font-medium rounded-lg text-sm px-4 py-2.5 justify-center text-center inline-flex items-center border border-gray-200 dark:border-gray-700"> <button type="button" data-modal-target="add-book-modal" data-modal-toggle="add-book-modal" class="w-full h-full text-black dark:text-white focus:ring-4 focus:outline-none focus:ring-blue-100 font-medium rounded-lg text-sm px-4 py-2.5 justify-center text-center inline-flex items-center border border-gray-200 dark:border-gray-700">
<div class="my-auto"> <div class="my-auto flex items-center space-x-2">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /> </svg> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6"> <path stroke-linecap="round" stroke-linejoin="round" d="M12 4.5v15m7.5-7.5h-15" /> </svg>
New book <span>New book</span>
</div> </div>
</button> </button>
</div> </div>
{% endif %} {% endif %}
<!-- prettier-ignore --> <!-- prettier-ignore -->
<div class="flex flex-col w-full"> {% if current_user.is_authenticated and books.total %}
{% if current_user.is_authenticated and books.total %} <div class="flex flex-col w-full">
<div class="flex justify-between mt-1"> <div class="flex justify-between mt-1">
<h1 class=" text-lg font-extrabold dark:text-white ml-4">My library</h1> <h1 class=" text-lg font-extrabold dark:text-white ml-4">My library</h1>
{% if current_user.is_authenticated %} {% if current_user.is_authenticated %}
{% include 'book/components/header_buttons.html' %} {% include 'book/components/header_buttons.html' %}
{% endif %} {% endif %}
</div>
</div> </div>
{% endif %} {% endif %}
{% for book in books if not book.is_deleted %} {% for book in books if not book.is_deleted %}
<!-- prettier-ignore --> <!-- prettier-ignore -->
<dl class="bg-white dark:bg-gray-900 h-max w-full p-5 text-gray-900 divide-y divide-gray-200 dark:text-white dark:divide-gray-700 m-3 border-2 border-gray-200 border-solid rounded-lg dark:border-gray-700"> <dl class="bg-white dark:bg-gray-900 h-max p-5 text-gray-900 divide-y divide-gray-200 dark:text-white dark:divide-gray-700 m-3 border-2 border-gray-200 border-solid rounded-lg dark:border-gray-700">
<dt class="mb-2 flex"> <dt class="mb-2 flex">
{% if book.original_book %} {% if book.original_book %}
<a href="{{ url_for('book.collection_view', book_id=book.original_book.id ) }}" target="_blank" class="flex pb-4"> <a href="{{ url_for('book.collection_view', book_id=book.original_book.id ) }}" target="_blank" class="flex pb-4">

View File

@ -1,6 +1,6 @@
from flask import render_template, flash, redirect, url_for, request from flask import render_template, flash, redirect, url_for, request
from flask_login import login_required, current_user from flask_login import login_required, current_user
from sqlalchemy import and_, or_, func from sqlalchemy import and_, or_, func, distinct
from app.controllers import ( from app.controllers import (
register_book_verify_route, register_book_verify_route,
@ -32,8 +32,10 @@ def my_library():
db.session.query( db.session.query(
m.Book, m.Book,
m.Book.created_at.label("created_at"), m.Book.created_at.label("created_at"),
func.count(m.Interpretation.id).label("interpretations_count"), func.count(distinct(m.Interpretation.id)).label(
func.count(m.BookStar.id).label("stars_count"), "interpretations_count"
),
func.count(distinct(m.BookStar.id)).label("stars_count"),
) )
.join( .join(
m.BookStar, m.BookStar,
@ -49,6 +51,7 @@ def my_library():
m.BookVersion.book_id == m.Book.id, m.BookVersion.book_id == m.Book.id,
m.BookVersion.is_deleted == False, # noqa: E712 m.BookVersion.is_deleted == False, # noqa: E712
), ),
full=True,
) )
.join( .join(
m.Section, m.Section,
@ -210,8 +213,10 @@ def favorite_books():
db.session.query( db.session.query(
m.Book, m.Book,
m.Book.created_at.label("created_at"), m.Book.created_at.label("created_at"),
func.count(m.Interpretation.id).label("interpretations_count"), func.count(distinct(m.Interpretation.id)).label(
func.count(m.BookStar.id).label("stars_count"), "interpretations_count"
),
func.count(distinct(m.BookStar.id)).label("stars_count"),
) )
.join( .join(
m.BookStar, m.BookStar,
@ -275,14 +280,24 @@ def my_contributions():
m.Interpretation, m.Interpretation,
m.Interpretation.score.label("score"), m.Interpretation.score.label("score"),
m.Interpretation.created_at.label("created_at"), m.Interpretation.created_at.label("created_at"),
func.count(m.Comment.interpretation_id).label("comments_count"), func.count(distinct(m.Comment.interpretation_id)).label(
"comments_count"
),
) )
.join( .join(
m.Comment, m.Comment.interpretation_id == m.Interpretation.id, full=True m.Comment,
and_(
m.Comment.interpretation_id == m.Interpretation.id,
m.Comment.is_deleted == False, # noqa: E712
),
full=True,
) )
.join( .join(
m.InterpretationVote, m.InterpretationVote,
m.InterpretationVote.interpretation_id == m.Interpretation.id, and_(
m.InterpretationVote.interpretation_id == m.Interpretation.id,
m.Interpretation.is_deleted == False, # noqa: E712
),
full=True, full=True,
) )
.filter( .filter(
@ -301,7 +316,7 @@ def my_contributions():
), ),
), ),
m.Interpretation.is_deleted == False, # noqa: E712 m.Interpretation.is_deleted == False, # noqa: E712
m.Interpretation.copy_of == None, # noqa: E711 m.Interpretation.copy_of == 0,
) )
.group_by(m.Interpretation.id) .group_by(m.Interpretation.id)
) )

View File

@ -3,7 +3,7 @@ from flask import (
render_template, render_template,
request, request,
) )
from sqlalchemy import and_, func from sqlalchemy import and_, func, distinct
from app import models as m, db from app import models as m, db
from app.logger import log from app.logger import log
from app.controllers.sorting import sort_by from app.controllers.sorting import sort_by
@ -20,7 +20,7 @@ def get_all():
m.Interpretation, m.Interpretation,
m.Interpretation.score.label("score"), m.Interpretation.score.label("score"),
m.Interpretation.created_at.label("created_at"), m.Interpretation.created_at.label("created_at"),
func.count(m.Comment.interpretation_id).label("comments_count"), func.count(distinct(m.Comment.interpretation_id)).label("comments_count"),
) )
.join( .join(
m.Comment, m.Comment,
@ -53,8 +53,8 @@ def explore_books():
db.session.query( db.session.query(
m.Book, m.Book,
m.Book.created_at.label("created_at"), m.Book.created_at.label("created_at"),
func.count(m.Interpretation.id).label("interpretations_count"), func.count(distinct(m.Interpretation.id)).label("interpretations_count"),
func.count(m.BookStar.id).label("stars_count"), func.count(distinct(m.BookStar.id)).label("stars_count"),
) )
.join( .join(
m.BookStar, m.BookStar,

View File

@ -18,7 +18,7 @@ def search_interpretations():
log(log.INFO, "Starting to build query for interpretations") log(log.INFO, "Starting to build query for interpretations")
interpretations = m.Interpretation.query.order_by(m.Interpretation.id).filter( interpretations = m.Interpretation.query.order_by(m.Interpretation.id).filter(
(func.lower(m.Interpretation.plain_text).like(f"%{q}%")), (func.lower(m.Interpretation.plain_text).like(f"%{q}%")),
m.Interpretation.copy_of == None, # noqa: E711 m.Interpretation.copy_of == 0,
) )
log(log.INFO, "Get count of interpretations") log(log.INFO, "Get count of interpretations")
count = interpretations.count() count = interpretations.count()
@ -55,18 +55,18 @@ def search_books():
and_( and_(
func.lower(m.Collection.label).like(f"%{q}%"), func.lower(m.Collection.label).like(f"%{q}%"),
m.Collection.is_deleted == False, # noqa: E712 m.Collection.is_deleted == False, # noqa: E712
m.Collection.copy_of == None, # noqa: E711 m.Collection.copy_of == 0,
m.Collection.is_root == False, # noqa: E712 m.Collection.is_root == False, # noqa: E712
), ),
and_( and_(
func.lower(m.Section.label).like(f"%{q}%"), func.lower(m.Section.label).like(f"%{q}%"),
m.Section.copy_of == None, # noqa: E711 m.Section.copy_of == 0,
m.Section.is_deleted == False, # noqa: E712 m.Section.is_deleted == False, # noqa: E712
), ),
and_( and_(
func.lower(m.Interpretation.plain_text).like(f"%{q}%"), func.lower(m.Interpretation.plain_text).like(f"%{q}%"),
m.Interpretation.is_deleted == False, # noqa: E712 m.Interpretation.is_deleted == False, # noqa: E712
m.Interpretation.copy_of == None, # noqa: E711 m.Interpretation.copy_of == 0,
m.Section.is_deleted == False, # noqa: E712 m.Section.is_deleted == False, # noqa: E712
), ),
), ),
@ -157,7 +157,7 @@ def tag_search_interpretations():
func.lower(m.Tag.name) == (tag_name), func.lower(m.Tag.name) == (tag_name),
m.InterpretationTag.tag_id == m.Tag.id, m.InterpretationTag.tag_id == m.Tag.id,
m.Interpretation.id == m.InterpretationTag.interpretation_id, m.Interpretation.id == m.InterpretationTag.interpretation_id,
m.Interpretation.copy_of == None, # noqa: E711 m.Interpretation.copy_of == 0,
m.Interpretation.is_deleted == False, # noqa: E712 m.Interpretation.is_deleted == False, # noqa: E712
) )
) )
@ -221,7 +221,7 @@ def quick_search():
m.Interpretation.query.order_by(m.Interpretation.id) m.Interpretation.query.order_by(m.Interpretation.id)
.filter( .filter(
(func.lower(m.Interpretation.plain_text).like(f"%{search_query}%")), (func.lower(m.Interpretation.plain_text).like(f"%{search_query}%")),
m.Interpretation.copy_of == None, # noqa: E711 m.Interpretation.copy_of == 0,
m.Interpretation.is_deleted == False, # noqa: E712, m.Interpretation.is_deleted == False, # noqa: E712,
) )
.limit(2) .limit(2)