Skip to content
This repository was archived by the owner on Dec 8, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion CodeChallenge/api/vote.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@ def vote_confirm():
return jsonify(status="error",
reason="vote not found - try voting again, or contestant may have been disqualified.")

if v.confirmed:
return jsonify(status="success",
reason="vote already confirmed")

delete_votes = Vote.query \
.filter(Vote.voter_email == v.voter_email,
Vote.id != v.id) \
Expand All @@ -206,7 +210,7 @@ def vote_confirm():

msg.html = render_template("challenge_vote_submitted.html",
username=v.answer.user.username,
votes=votes,
votes=int(votes),
rank=rank)

mail.send(msg)
Expand Down
23 changes: 13 additions & 10 deletions CodeChallenge/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,19 @@ def drop_all():

def ranking(answer_id: int) -> Tuple[int, int]:
return db.session.execute("""
SELECT votes, placing FROM (
SELECT
answer_id,
COUNT(*) AS votes,
RANK() OVER (
ORDER BY COUNT(*) DESC
) placing
FROM vote
GROUP BY answer_id) ranking
WHERE ranking.answer_id = :answer_id
select rainv.num_votes, rainv.rank
from (
select @rownum := @rownum + 1 as 'rank',
prequery.answer_id,
prequery.num_votes
from (select @rownum := 0) sqlvars,
(select answer_id,
count(*) as num_votes
from vote
group by answer_id
order by count(*) desc) prequery
) as rainv
where answer_id = :answer_id
""", {'answer_id': answer_id}).first()


Expand Down
343 changes: 343 additions & 0 deletions CodeChallenge/templates/challenge_daily_voting.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,343 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width"/>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>CodeWizardsHQ Code Challenge Daily Voting Email</title>
<style>
/* -------------------------------------
GLOBAL
A very basic CSS reset
------------------------------------- */
* {
margin: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
box-sizing: border-box;
font-size: 14px;
}

img {
max-width: 100%;
}

body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100% !important;
height: 100%;
line-height: 1.6em;
/* 1.6em * 14px = 22.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
/*line-height: 22px;*/
}

/* Let's make sure all tables have defaults */
table td {
vertical-align: top;
}

/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
body {
background-color: #353535;
}

.body-wrap {
background-color: #353535;
width: 100%;
}

.container {
display: block !important;
max-width: 600px !important;
margin: 0 auto !important;
/* makes it centered */
clear: both !important;
}

.content {
max-width: 600px;
margin: 0 auto;
display: block;
padding: 20px;
}

/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background-color: #fff;
border-radius: 3px;
}

.content-wrap {
padding: 40px;
}

.content-block {
padding: 0 0 20px;
}

.header {
width: 100%;
margin-bottom: 20px;
background-color: #353535;
padding: 20px;
color: #fff;
}

.header h3 {
color: #fff;
}

.footer {
width: 100%;
clear: both;
color: #999;
padding: 20px;
}

.footer p, .footer a, .footer td {
color: #999;
font-size: 12px;
}

/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1, h2, h3 {
font-family: "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
color: #27ae82;
margin: 20px 0 0;
line-height: 1.2em;
font-weight: 600;
}

h1 {
font-size: 32px;
/* 1.2em * 32px = 38.4px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
/*line-height: 38px;*/
}

h2 {
font-size: 24px;
/* 1.2em * 24px = 28.8px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
/*line-height: 29px;*/
}

h3 {
font-size: 18px;
/* 1.2em * 18px = 21.6px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
/*line-height: 22px;*/
}

h4 {
font-size: 14px;
font-weight: 600;
}

p, ul, ol {
margin-bottom: 10px;
font-weight: normal;
}

p li, ul li, ol li {
margin-left: 5px;
list-style-position: inside;
}

/* -------------------------------------
LINKS & BUTTONS
------------------------------------- */
a {
color: #348eda;
text-decoration: underline;
}

.btn-primary {
text-decoration: none;
color: #FFF !important;
background-color: #00774f;
border: solid #00774f;
border-width: 10px 20px;
line-height: 2em;
/* 2em * 14px = 28px, use px to get airier line-height also in Thunderbird, and Yahoo!, Outlook.com, AOL webmail clients */
/*line-height: 28px;*/
font-weight: bold;
text-align: center;
cursor: pointer;
display: inline-block;
border-radius: 5px;
text-transform: capitalize;
}

/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}

.first {
margin-top: 0;
}

.aligncenter {
text-align: center;
}

.alignright {
text-align: right;
}

.alignleft {
text-align: left;
}

.clear {
clear: both;
}

.social {
max-width: 25px;
display: inline-block;
}

/* -------------------------------------
ALERTS
Change the class depending on warning email, good email or bad email
------------------------------------- */
.alert {
font-size: 10px;
color: #fff;
font-weight: 500;
padding: 10px;
text-align: center;
border-radius: 3px 3px 0 0;
}

.alert a {
color: #fff;
text-decoration: none;
font-weight: 500;
font-size: 10px;
}

.alert.alert-warning {
background-color: #353535;
}

.alert.alert-bad {
background-color: #D0021B;
}

.alert.alert-good {
background-color: #0fad80;
}

/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 640px) {
body {
padding: 0 !important;
}

h1, h2, h3, h4 {
font-weight: 800 !important;
margin: 20px 0 5px !important;
}

h1 {
font-size: 22px !important;
}

h2 {
font-size: 18px !important;
}

h3 {
font-size: 16px !important;
}

.container {
padding: 0 !important;
width: 100% !important;
}

.content {
padding: 0 !important;
}

.content-wrap {
padding: 10px !important;
}

}

/*# sourceMappingURL=styles.css.map */

</style>
</head>

<body itemscope itemtype="http://schema.org/EmailMessage">

<table class="body-wrap">
<tr>
<td></td>
<td class="container" width="650">
<div class="content">
<table class="main aligncenter" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="header aligncenter">
<img src="https://challenge.codewizardshq.com/images/logo-small.png">
</td>
</tr>
<tr>
<td class="content-wrap">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block">
<h1>{{votes}} Votes</h1>
<h3>Rank {{rank}}</h3>
<br/>
<p>
{{name}}, you are ranked number {{rank}} with {{votes}} votes in The Dragon Quest.
</p>
<p>
Every vote counts towards winning the grand prize. You are only X votes away from the next highest challenger!
</p>
<h4>
Share your code challenge link to win: <br/>
{{challenge_link}}
</h4>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="alert alert-warning">
Share With Friends
<br/>
<a href="https://www.facebook.com/events/501020200554546/"><img class="social" src="https://codewizardshq.com/wp-content/uploads/2020/01/challenge_icon_fb.jpg"></a>
<a href="https://twitter.com/CodeWizardsHQ"><img class="social" src="https://codewizardshq.com/wp-content/uploads/2020/01/challenge_icon_twitter.jpg"></a>
<a href="mailto:?"><img class="social" src="https://codewizardshq.com/wp-content/uploads/2020/01/challenge_icon_email.jpg"></a>
</td>
</tr>
</table>
<div class="footer">
<table width="100%">
<tr>
<td class="aligncenter content-block"><a href="%unsubscribe_url%">Unsubscribe</a> from code challenge updates.</td>
</tr>
</table>
</div>
</div>
</td>
<td></td>
</tr>
</table>
</body>
</html>