mirror of
https://gitlab.com/PronounsPage/PronounsPage.git
synced 2025-08-03 11:07:00 -04:00
206 lines
14 KiB
TypeScript
206 lines
14 KiB
TypeScript
/* eslint-disable @stylistic/max-len, camelcase */
|
||
import './setup.ts';
|
||
|
||
import SQL from 'sql-template-strings';
|
||
import { ulid, decodeTime } from 'ulid';
|
||
|
||
import { newDate } from '../src/helpers.ts';
|
||
|
||
import dbConnection from './db.ts';
|
||
import mailer from './mailer.ts';
|
||
|
||
import { loadTranslator } from '~/server/data.ts';
|
||
|
||
const CAMPAIGNS = [
|
||
{
|
||
name: 'spis-2023',
|
||
sendAt: new Date(2023, 1, 1, 9, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Ruszyła trzecia edycja Niebinarnego Spisu Powszechnego!',
|
||
text: `Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.
|
||
|
||
Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na https://zaimki.pl/spis i wypełnić formularz 😉
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.</p>
|
||
<p>Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na <a href="https://zaimki.pl/spis">zaimki.pl/spis</a> i wypełnić formularz 😉</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/spis" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/spis
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
{
|
||
name: 'spis-2023-raport',
|
||
sendAt: new Date(2023, 3, 12, 12, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Przedstawiamy raport z trzeciej edycji Niebinarnego Spisu Powszechnego!',
|
||
text: `Już po raz trzeci przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.
|
||
|
||
W tym roku udało nam się zebrać rekordową liczbę odpowiedzi, aż 3022! Rozszerzyłośmy też ankietę o kilka dodatkowych pytań i porównałośmy wyniki z dwiema poprzednimi edycjami. Zaowocowało to najbardziej rozbudowanym raportem o niebinarszczyźnie!
|
||
|
||
Report dostępny jest pod adresem https://zaimki.pl/blog/spis-2023 – serdecznie zapraszamy do lektury 😉
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Już po raz trzeci przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.</p>
|
||
<p>W tym roku udało nam się zebrać rekordową liczbę odpowiedzi, aż 3022! Rozszerzyłośmy też ankietę o kilka dodatkowych pytań i porównałośmy wyniki z dwiema poprzednimi edycjami. Zaowocowało to najbardziej rozbudowanym raportem o niebinarszczyźnie!</p>
|
||
<p>Report dostępny jest pod adresem <a href="https://zaimki.pl/blog/spis-2023" target="_blank" rel="noopener">zaimki.pl/blog/spis-2023</a> – serdecznie zapraszamy do lektury 😉</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/blog/spis-2023" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/blog/spis-2023
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
{
|
||
name: 'spis-2024',
|
||
sendAt: new Date(2024, 1, 1, 9, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Ruszyła czwarta edycja Niebinarnego Spisu Powszechnego!',
|
||
text: `Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.
|
||
|
||
Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na https://zaimki.pl/spis i wypełnić formularz 😉
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.</p>
|
||
<p>Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na <a href="https://zaimki.pl/spis">zaimki.pl/spis</a> i wypełnić formularz 😉</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/spis" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/spis
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
{
|
||
name: 'spis-2024-raport',
|
||
sendAt: new Date(2024, 3, 15, 0, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Przedstawiamy raport z czwartej edycji Niebinarnego Spisu Powszechnego!',
|
||
text: `Już po raz czwarty przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.
|
||
|
||
W tym roku ponownie udało nam się zebrać rekordową liczbę odpowiedzi, aż 3091! Rozszerzyłośmy ankietę o pytania o orientację romantyczną i proces tranzycji, dodałośmy też wykresy porównujące dane z poprzednimi latami, a także przygotowałośmy skróconą wersję raportu!
|
||
|
||
Report dostępny jest pod adresem https://zaimki.pl/blog/spis-2024, a wersja skrócona pod https://zaimki.pl/blog/spis-2024-skrocony – serdecznie zapraszamy do lektury 😉
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Już po raz czwarty przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.</p>
|
||
<p>W tym roku ponownie udało nam się zebrać rekordową liczbę odpowiedzi, aż 3091! Rozszerzyłośmy ankietę o pytania o orientację romantyczną i proces tranzycji, dodałośmy też wykresy porównujące dane z poprzednimi latami, a także przygotowałośmy skróconą wersję raportu!</p>
|
||
<p>Report dostępny jest pod adresem <a href="https://zaimki.pl/blog/spis-2024" target="_blank" rel="noopener">zaimki.pl/blog/spis-2024</a>, a wersja skrócona pod <a href="https://zaimki.pl/blog/spis-2024-skrocony" target="_blank" rel="noopener">zaimki.pl/blog/spis-2024-skrocony</a> – serdecznie zapraszamy do lektury 😉</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/blog/spis-2024" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/blog/spis-2024
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
{
|
||
name: 'spis-2025',
|
||
sendAt: new Date(2025, 1, 1, 9, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Ruszyła piąta edycja Niebinarnego Spisu Powszechnego! 💛🤍💜🖤',
|
||
text: `Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.
|
||
|
||
Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na https://zaimki.pl/spis i wypełnić formularz 😉
|
||
|
||
W tym roku rozszerzyłośmy ankietę o pytania o używane imiona i ich odmianę.
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Jak co roku, luty jest miesiącem, w którym zbieramy dane na temat języka używanego przez polskojęzyczne osoby niebinarne.</p>
|
||
<p>Serdecznie zapraszamy do udziału w Niebinarnym Spisie Powszechnym! By wesprzeć naszą społeczność, wystarczy wejść na <a href="https://zaimki.pl/spis">zaimki.pl/spis</a> i wypełnić formularz 😉</p>
|
||
<p>W tym roku rozszerzyłośmy ankietę o pytania o używane imiona i ich odmianę.</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/spis" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/spis
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
{
|
||
name: 'spis-2025-raport',
|
||
sendAt: new Date(2025, 5, 29, 0, 0, 0),
|
||
type: 'census',
|
||
locales: ['pl'],
|
||
subject: 'Przedstawiamy raport z piątej edycji Niebinarnego Spisu Powszechnego!',
|
||
text: `Już po raz piąty przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.
|
||
|
||
Report dostępny jest pod adresem https://zaimki.pl/blog/spis-2025, a wersja skrócona pod https://zaimki.pl/blog/spis-2025-skrocony – serdecznie zapraszamy do lektury 😉
|
||
|
||
(Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, wejdź na https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census)
|
||
`,
|
||
html: `
|
||
<p>Już po raz piąty przeprowadziłośmy Niebinarny Spis Powszechny – największe badanie języka, jakim posługują się polskojęzyczne osoby niebinarne.</p>
|
||
<p>Report dostępny jest pod adresem <a href="https://zaimki.pl/blog/spis-2025" target="_blank" rel="noopener">zaimki.pl/blog/spis-2025</a>, a wersja skrócona pod <a href="https://zaimki.pl/blog/spis-2025-skrocony" target="_blank" rel="noopener">zaimki.pl/blog/spis-2025-skrocony</a> – serdecznie zapraszamy do lektury 😉</p>
|
||
<p style="text-align: center; padding-top: 16px; padding-bottom: 16px;">
|
||
<a href="https://zaimki.pl/blog/spis-2025" target="_blank" rel="noopener" style="background-color: #C71585; color: #fff; padding: 8px 16px; border: none; border-radius: 6px;text-decoration: none">
|
||
zaimki.pl/blog/spis-2025
|
||
</a>
|
||
</p>
|
||
<p style="color: #999; font-size: 10px;">Ta wiadomość wysyłana jest do osób, które zapisały się na przypominajkę. Jeśli chcesz z niej zrezygnować, <a href="https://zaimki.pl/api/subscription/unsubscribe?email={{emailEncoded}}&type=census">kliknij tutaj</a>.</p>
|
||
`,
|
||
},
|
||
];
|
||
|
||
async function calculate() {
|
||
const db = await dbConnection();
|
||
const translator = await loadTranslator('_');
|
||
|
||
const sent: Record<string, unknown[]> = {};
|
||
for (const { subscription_id, campaign } of await db.all(SQL`SELECT * FROM subscription_messages`)) {
|
||
if (sent[subscription_id] === undefined) {
|
||
sent[subscription_id] = [];
|
||
}
|
||
sent[subscription_id].push(campaign);
|
||
}
|
||
|
||
const now = newDate();
|
||
|
||
for (const { id, locale, type, email } of await db.all(SQL`SELECT * FROM subscriptions`)) {
|
||
const campaign = CAMPAIGNS.filter((n) => {
|
||
return n.type === type &&
|
||
now >= n.sendAt &&
|
||
decodeTime(id) <= n.sendAt.getTime() && // don't send to people who signed up after send date
|
||
(n.locales === undefined || n.locales.includes(locale)) &&
|
||
!(sent[id] || []).includes(n.name)
|
||
;
|
||
})?.[0];
|
||
|
||
if (!campaign) {
|
||
continue;
|
||
}
|
||
|
||
console.log(`Sending to ${email}`);
|
||
|
||
await mailer(email, campaign, translator, {
|
||
emailEncoded: encodeURIComponent(email),
|
||
});
|
||
|
||
await db.get(SQL`INSERT INTO subscription_messages (id, subscription_id, campaign)
|
||
VALUES (${ulid()}, ${id}, ${campaign.name})`);
|
||
}
|
||
|
||
await db.close();
|
||
}
|
||
|
||
calculate();
|