99from ..auth import Users
1010from ..mail import mail
1111from ..mailgun import mg_validate
12- from ..models import Answer , db , Vote , Question
12+ from ..models import Answer , db , Vote , Question , ranking
1313
1414bp = Blueprint ("voteapi" , __name__ , url_prefix = "/api/v1/vote" )
1515
@@ -49,12 +49,13 @@ def get_contestants():
4949 Users .studentfirstname ,
5050 Users .studentlastname ,
5151 Users .username ,
52- func .concat (Users .studentfirstname , func .right (Users .studentlastname , 1 ))
52+ func .concat (Users .studentfirstname , func .right (Users .studentlastname , 1 )),
53+ Answer .disqualified
5354 ) \
5455 .join (Answer .question ) \
5556 .join (Answer .user ) \
5657 .outerjoin (Answer .votes ) \
57- .filter (Question .rank == core .max_rank (), Answer .correct ) \
58+ .filter (Question .rank == core .max_rank (), Answer .correct , Answer . disqualified . is_ ( None ) ) \
5859 .group_by (Answer .id )
5960
6061 if desc is not None :
@@ -186,6 +187,10 @@ def vote_confirm():
186187 return jsonify (status = "error" ,
187188 reason = "vote not found - try voting again, or contestant may have been disqualified." )
188189
190+ if v .confirmed :
191+ return jsonify (status = "success" ,
192+ reason = "vote already confirmed" )
193+
189194 delete_votes = Vote .query \
190195 .filter (Vote .voter_email == v .voter_email ,
191196 Vote .id != v .id ) \
@@ -199,6 +204,18 @@ def vote_confirm():
199204
200205 db .session .commit ()
201206
207+ msg = Message (subject = "Vote confirmation successful!" ,
208+ recipients = [v .voter_email ])
209+
210+ votes , rank = v .ranking ()
211+
212+ msg .html = render_template ("challenge_vote_submitted.html" ,
213+ username = v .answer .user .username ,
214+ votes = int (votes ),
215+ rank = rank )
216+
217+ mail .send (msg )
218+
202219 return jsonify (status = "success" ,
203220 reason = "vote confirmed" )
204221
@@ -230,7 +247,7 @@ def search():
230247 .join (Answer .question ) \
231248 .join (Answer .user ) \
232249 .outerjoin (Answer .votes ) \
233- .filter (Question .rank == core .max_rank (), Answer .correct ,
250+ .filter (Question .rank == core .max_rank (), Answer .correct , Answer . disqualified . is_ ( None ),
234251 or_ (Users .username .ilike (keyword ), Users .studentfirstname .ilike (keyword ),
235252 Users .studentlastname .ilike (keyword ))) \
236253 .group_by (Answer .id )\
0 commit comments