This repository was archived by the owner on Jan 3, 2026. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathfunction_bibliotheque.py
More file actions
139 lines (137 loc) · 11.6 KB
/
Copy pathfunction_bibliotheque.py
File metadata and controls
139 lines (137 loc) · 11.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from flask import Flask, render_template, request, redirect, url_for, jsonify, flash, make_response
from flask_login import LoginManager, login_user, logout_user, login_required, current_user
from flask_jwt_extended import verify_jwt_in_request, get_jwt_identity
from dataclass import *
from sqlalchemy import orm, or_, and_, select, join, outerjoin, func, desc
from config import *
def bibliotheque_app(session, idtype, idfiltre, numstart, client):
if type(numstart) == int:
isadulte = False
verify_jwt_in_request(optional=True)
if current_user.is_authenticated:
isadulte = current_user.adulte
if get_jwt_identity() is not None:
isadulte = session.execute(select(Utilisateurs.adulte).where(Utilisateurs.pseudo == get_jwt_identity())).scalar()
# if idtype correspond to a type media in the database
if session.query(Types_Media).filter_by(nom_types_media=idtype).first() is not None or idtype == "all":
if idtype == "all":
idtype = session.execute(select(Types_Media.nom_types_media).select_from(Types_Media).distinct(Types_Media.nom_types_media)).all()
idtype = [row[0] for row in idtype]
if idfiltre in ["", "date-ajout", "date-sortie", "top-consultation", "top-note", "top-favoris", "sur-mediatise", "sous-mediatise", "sur-note", "sous-note"]:
#transform idtype into a list for the query compatibility (based on filter all)
if type(idtype) != list:
idtype = [idtype]
if idfiltre == "" or idfiltre == "date-ajout":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte)\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.distinct(Produits_Culturels.id_produits_culturels)\
.order_by(Produits_Culturels.id_produits_culturels.desc())\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "date-sortie":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte)\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.order_by(Produits_Culturels.date_sortie.desc())\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "top-consultation":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Fiches.consultation)\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.order_by(Fiches.consultation.desc())\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "top-note":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Notes.id_notes, func.avg(Notes.note).label('moyenne_notes'))\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Fiches.id_fiches == Notes.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Notes.id_notes)\
.order_by(desc('moyenne_notes'))\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "top-favoris":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, func.count(Avis.id_avis).filter(Avis.favori == True).label('nombre_favori'))\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Fiches.id_fiches == Avis.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image,Fiches.id_fiches, Fiches.adulte, Avis.id_avis)\
.order_by(desc('nombre_favori'))\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "sur-mediatise":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, func.count(Avis.id_avis).filter(Avis.avis_popularite == 1).label('nombre_sur_mediatise'))\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Fiches.id_fiches == Avis.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image,Fiches.id_fiches, Fiches.adulte, Avis.id_avis) \
.order_by(desc('nombre_sur_mediatise'))\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "sous-mediatise":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, func.count(Avis.id_avis).filter(Avis.avis_popularite == -1).label('nombre_sous_mediatise')) \
.select_from(Produits_Culturels) \
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Fiches.id_fiches == Avis.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Avis.id_avis) \
.order_by(desc('nombre_sous_mediatise')) \
.limit(12).offset(numstart)) \
.all()
elif idfiltre == "sur-note":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, func.count(Avis.id_avis).filter(Avis.avis_cote == 1).label('nombre_sur_note'))\
.select_from(Produits_Culturels)\
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Fiches.id_fiches == Avis.id_fiches) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Avis.id_avis)\
.order_by(desc('nombre_sur_note'))\
.limit(12).offset(numstart))\
.all()
elif idfiltre == "sous-note":
bibliotheque = session.execute(select(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, func.count(Avis.id_avis).filter(Avis.avis_cote == -1).label('nombre_sous_note')) \
.select_from(Produits_Culturels) \
.filter(Produits_Culturels.id_fiches == Fiches.id_fiches) \
.filter(Produits_Culturels.verifie == True) \
.filter(Fiches.id_fiches == Avis.id_fiches) \
.filter(Produits_Culturels.nom_types_media.in_(idtype)) \
.group_by(Produits_Culturels.id_produits_culturels, Fiches.nom, Produits_Culturels.date_sortie, Fiches.url_image, Fiches.id_fiches, Fiches.adulte, Avis.id_avis) \
.order_by(desc('nombre_sous_note')) \
.limit(12).offset(numstart)) \
.all()
else:
return make_response(jsonify({'message': 'filtre inconnu'}), 400)
if not isadulte:
bibliotheque = [b for b in bibliotheque if b.adulte == False]
if client == "app":
return make_response(jsonify({'bibliotheque': [{'nom': b.nom, 'date': b.date_sortie, 'url_image': b.url_image, 'id': b.id_produits_culturels, 'adulte': b.adulte, 'consultation': b.consultation if idfiltre == "top-consultation" else None, 'note': round(b.moyenne_notes, 2) if idfiltre == "top-note" and b.moyenne_notes else None, 'favoris': b.nombre_favori if idfiltre == 'top-favoris' and b.nombre_favori else None, 'sur-mediatise': b.nombre_sur_mediatise if idfiltre == 'sur-mediatise' and b.nombre_sur_mediatise else None, 'sous-mediatise' : b.nombre_sous_mediatise if idfiltre == 'sous-mediatise' and b.nombre_sous_mediatise else None, 'sur-note': b.nombre_sur_note if idfiltre == 'sur-note' and b.nombre_sur_note else None, 'sous-note': b.nombre_sous_note if idfiltre == 'sous-note' and b.nombre_sous_note else None} for b in bibliotheque]}), 200)
if len(idtype) > 1:
idtype = "all"
else:
idtype = idtype[0]
if numstart == 0:
return render_template('public/bibliotheque.html', bibliotheque=bibliotheque, idtype=idtype, idfiltre=idfiltre, numstart=numstart)
else:
return render_template('public/infine-scroll-bibliotheque.html', bibliotheque=bibliotheque, idtype=idtype, idfiltre=idfiltre, numstart=numstart)
else:
return make_response(jsonify({'message': 'filtre inconnu'}), 400)
else:
return make_response(jsonify({'message': 'type inconnu'}), 400)
else:
return make_response(jsonify({'message': 'cette valeur doit être un nombre entier'}), 400)