gamble & news
This commit is contained in:
@ -1,5 +1,5 @@
|
|||||||
import { relations } from "drizzle-orm";
|
import { relations } from "drizzle-orm";
|
||||||
import { datetime, int, mysqlTable, varchar } from "drizzle-orm/mysql-core";
|
import { datetime, int, mysqlTable, text, varchar } from "drizzle-orm/mysql-core";
|
||||||
|
|
||||||
export const personTable = mysqlTable('person', {
|
export const personTable = mysqlTable('person', {
|
||||||
personId: int('personId').primaryKey().autoincrement(),
|
personId: int('personId').primaryKey().autoincrement(),
|
||||||
@ -24,3 +24,9 @@ export const pointsRelations = relations(pointsTable, ({ one }) => ({
|
|||||||
references: [personTable.personId],
|
references: [personTable.personId],
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
export const newsTable = mysqlTable('news', {
|
||||||
|
newsId: int('newsId').primaryKey().autoincrement(),
|
||||||
|
text: text('text').notNull(),
|
||||||
|
countdownTo: datetime('countdownTo')
|
||||||
|
});
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
const deltaX: number = 10;
|
const deltaX: number = 12;
|
||||||
const ymax: number = 1;
|
const ymax: number = 1;
|
||||||
|
|
||||||
function f(a: number, x: number): number {
|
function f(a: number, x: number): number {
|
||||||
return Math.exp(-1 * Math.pow((x - a), 2) / 20);
|
return Math.exp(-1 * Math.pow((x - a), 2) / 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
// helper function
|
// helper function
|
||||||
|
|||||||
20
src/index.ts
20
src/index.ts
@ -95,9 +95,10 @@ app.get("/gamble/:id", async (req, res) => {
|
|||||||
if (person.gambleTime == null) {
|
if (person.gambleTime == null) {
|
||||||
sendError(res, 423, "Gamble není dostupný");
|
sendError(res, 423, "Gamble není dostupný");
|
||||||
} else {
|
} else {
|
||||||
sendError(res, 423, "Gamble bude dostupný až ve " + getNextGambleTime(person.gambleTime).toLocaleString('cs', {
|
sendError(res, 423, "Gamble nelze, gej nebudeš až v " + new Date(getNextGambleTime(person.gambleTime).getTime()).toLocaleString('cs', {
|
||||||
hour: "2-digit",
|
hour: "2-digit",
|
||||||
minute: "2-digit",
|
minute: "2-digit",
|
||||||
|
timeZone: "Europe/Prague"
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -136,12 +137,12 @@ app.post("/gamble/:id", upload.none(), async (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isGambleAvailable(person.gambleTime)) {
|
if (!isGambleAvailable(person.gambleTime)) {
|
||||||
sendError(res, 423, "Nelze zadat další gamble");
|
sendError(res, 423, "Další gamble nelze");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (person.secret != req.body['secret']) {
|
if (person.secret != req.body['secret']) {
|
||||||
sendError(res, 423, "Nesprávé heslo");
|
sendError(res, 423, "Nesprávé heslo. Also tvoje máma je gej.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,6 +188,7 @@ app.get("/person/:id", async (req, res) => {
|
|||||||
|
|
||||||
if (!isDetailAvailable(person.gambleTime)) {
|
if (!isDetailAvailable(person.gambleTime)) {
|
||||||
sendError(res, 404, "Detail bude dostupný až po dalším gamblu");
|
sendError(res, 404, "Detail bude dostupný až po dalším gamblu");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let points = await db.query.pointsTable.findMany({
|
let points = await db.query.pointsTable.findMany({
|
||||||
@ -202,6 +204,18 @@ app.get("/person/:id", async (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.get('/api/news', async (req, res) => {
|
||||||
|
let news = await db.query.newsTable.findFirst({
|
||||||
|
orderBy: sql`RAND()`
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!news) {
|
||||||
|
res.json(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json(news);
|
||||||
|
});
|
||||||
|
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
console.log(`Listening on port ${port}...`);
|
console.log(`Listening on port ${port}...`);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -29,7 +29,7 @@
|
|||||||
<script>
|
<script>
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href='/';
|
window.location.href='/';
|
||||||
}, 5*60*1000);
|
}, 2*60*1000);
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -24,6 +24,49 @@
|
|||||||
</div>
|
</div>
|
||||||
<% }); %>
|
<% }); %>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="text-center">
|
||||||
|
<div><strong>Hlášení dne:</strong></div>
|
||||||
|
<div id="news-text" class="display-3 mb-3 fw-normal"></div>
|
||||||
|
<div id="news-countdown" class="display-6 fw-bold"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script>
|
||||||
|
let news = null;
|
||||||
|
|
||||||
|
async function downloadData() {
|
||||||
|
news = await fetch(`/api/news`)
|
||||||
|
.then(response => response.json())
|
||||||
|
console.log(news);
|
||||||
|
}
|
||||||
|
|
||||||
|
setInterval(() => {
|
||||||
|
if (news == null) {
|
||||||
|
document.getElementById('news-text').innerText = "";
|
||||||
|
document.getElementById('news-countdown').innerText = "";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById('news-text').innerText = news.text;
|
||||||
|
if (news.countdownTo == null) {
|
||||||
|
document.getElementById('news-countdown').innerText = "";
|
||||||
|
} else {
|
||||||
|
newsDate = new Date(news.countdownTo);
|
||||||
|
|
||||||
|
// 2*60*60*1000 = timezone offset
|
||||||
|
const timeUntil = new Date(Math.abs(newsDate.getTime() - 2*60*60*1000 - Date.now()))
|
||||||
|
|
||||||
|
document.getElementById('news-countdown').innerText = timeUntil.toLocaleString('cs', {
|
||||||
|
timeZone: "Etc/UTC",
|
||||||
|
hour: "2-digit",
|
||||||
|
minute: "2-digit",
|
||||||
|
second: "2-digit",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
setInterval(downloadData, 60000);
|
||||||
|
|
||||||
|
downloadData()
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@ -64,7 +64,7 @@
|
|||||||
<script>
|
<script>
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href='/';
|
window.location.href='/';
|
||||||
}, 5*60*1000);
|
}, 2*60*1000);
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user