dlidstrom/Snittlistan

Mailutskick

Closed this issue · 0 comments

Se också #157

  • Tool ska kunna göra migreringarna från command line.
  • Visa på uttagningssidan att ett Mail kommer skickas och när. Gör möjligt att stoppa. Lägg också till en knapp för att maila alla i uttagningen.
  • Skicka efter 10 minuter, ge tid att ändra. Informera på sidan. Skicka bara ett mail efter 10 minuter, oavsett om en ändring gjorts. Behöver DelayedTask.
    • associera mailet med säsong och omgång. Dvs en task som har de värdena. Den ska sändas efter 10 minuter så att man hinner göra ändringar om det behövs. Men hur gör man om man också vill skicka ut andra lag? RosterMail entitet där det finns en unik nyckel (se partial unique).
  • Publicera inte ett meddelande direkt. Meddelanden som ska publiceras sparas istället i en utkorg i databasen. Sedan måste man köra igång en tråd direkt efter avslutat anrop som gör själva publiceringen. Om den tråden misslyckas så har vi ett kommando i verktygslådan som plockar upp såna ut korgar och publicera dem regelbundet. HostingEnvironment.QueueBackgroundWorkItem(ct => SendMailAsync(user.Email));
  • Skicka endast om datumet på händelsen (match till exempel) är i framtiden
  • Nytt subcommand och task handler för att trigga sändning av delayed tasks från Tool/Task
  • Flytta skickade delayed tasks till sent tasks (ny tabell för arkivering, används också för andra skickade tasks)
  • Skicka vid laguttagning (inte om preliminär, använd Javascript för att toggla readonly på checkboxarna beroende på om preliminär är bockad eller ej). Skicka till spelaren i To och Reply-To UK. Då kan man ha länk till acceptera om spelaren inte gjort det. Ska man maila till alla så kan man göra det genom Snittlistan där det ska finnas en knapp för det.
  • Skicka till alla som fått Mail nån gång. Dvs gör en lista på de som fått mailet och skicka till alla de, plus nya. Uppdatera lista.
  • Reply-To går till den som gjorde ändringen
  • Hur gör man när det är flera matcher för A-laget? Skriv att man bara behöver skicka Mail när man uppdaterat sista matchen. Då går alla lag ut per mail.
  • Ange i mailet om man inte accepterat. Då kan man göra det i en snabblänk
  • Välj att skicka med en kommentar
  • Börja med beta, dvs bara till mig
  • Alla Mail från Snittlistan bör ha en footer som anger varifrån mailet kommer
  • Skicka Mail när man lägger upp frånvaro
  • HttpContext.Current.Item data is live for single HTTP request/response whereas HttpContext.Current.Session data is live throughout user’s session
  • Alternativ 1: skicka enbart matchen som redigeras
  • Alternativ 2: skicka till alla A-lagets matcher i samma omgång
  • Låt det finnas en textruta som man kan använda för att skicka med i mailet. Kan vara så att det här tar bort behovet av DelayedTask.
  • Textrutan som fanns ska behålla historiken, dvs när man tittar på uttagningen så ska man se vilka meddelanden som gått ut tidigare.
  • Ha en rate limit på alla mail som skickas, per användare och per mail-typ.
user_id mail_type allowance rate per_seconds last_date
user-1 logon_mail 0.7 1 1 11:15:23
user-1 roster_updated 0.7 1 600 11:15:23
user-2 roster_updated 0.1 1 600 11:15:23

när nästa kommer så räknas allowance upp enligt allowance += (now - last_date).seconds * rate / per_seconds. Så om now är 11:23:23 så blir det:

user_id mail_type allowance rate per_seconds last_date
user-1 logon_mail 0.7 + 480 * (1 / 1) = 481.7, reduceras till 1 1 1 11:15:23
user-1 roster_updated 0.7 + 480 * (1 / 600) = 1.5, reduceras till 1 1 600 11:15:23
user-2 roster_updated 0.1 + 480 * (1 / 600) = 0.9 (inget mail går ut den här gången) 1 600 11:15:23

last_date uppdateras när det skickas ut ett mail. Alla mail har egen extra information, så gör command handlers för varje typ av mail. Däremot kan logiken som hanterar rate vara i en basklass till alla mail command handlers. rate och per_seconds kan gå in till konstruktorn av basklassen.

Sender: messages-noreply@bounce.linkedin.com
From: John Doe via LinkedIn <member@linkedin.com>
Reply-To: John Doe <John.Doe@gmail.com>
To: My Name <My.Name@gmail.com>