diff --git a/cmd/secret_santa/main.go b/cmd/secret_santa/main.go index 7493a36..62746e5 100644 --- a/cmd/secret_santa/main.go +++ b/cmd/secret_santa/main.go @@ -1,15 +1,21 @@ package main import ( + "flag" "fmt" - "github.com/joho/godotenv" "log" "secret-santa/internal/config" "secret-santa/internal/email" "secret-santa/internal/processor" + + "github.com/joho/godotenv" ) +var yFlag = flag.Bool("y", false, "Send mails directly") + func main() { + flag.Parse() + err := godotenv.Load(".env") if err != nil { log.Fatal("Error loading .env file") @@ -24,6 +30,6 @@ func main() { return } - processor := processor.Processor{Config: conf} + processor := processor.Processor{Config: conf, AskBeforeSending: !*yFlag} processor.Process() } diff --git a/internal/processor/processor.go b/internal/processor/processor.go index 074c735..d0f2443 100644 --- a/internal/processor/processor.go +++ b/internal/processor/processor.go @@ -4,10 +4,12 @@ import ( "fmt" "math/rand" "secret-santa/internal/config" + "strings" ) type Processor struct { - Config *config.Config + Config *config.Config + AskBeforeSending bool } var userMapping UserMap = make(map[config.User]config.User) @@ -22,6 +24,15 @@ func (processor Processor) Process() { } } fmt.Printf("Succed after %v tries\n", i) + if processor.AskBeforeSending { + fmt.Printf("Summary:\n\n%v\n", userMapping.String()) + fmt.Println("Send mails? (y/n)") + var input string + fmt.Scanln(&input) + if strings.ToLower(input) != "y" { + return + } + } fmt.Println("Sending mails...") userMapping.sendMails(processor.Config.EmailConfig, processor.Config.SummaryEmail) } diff --git a/internal/processor/user_map.go b/internal/processor/user_map.go index 190041e..7460ebc 100644 --- a/internal/processor/user_map.go +++ b/internal/processor/user_map.go @@ -8,10 +8,36 @@ import ( type UserMap map[config.User]config.User +func (userMap UserMap) getLongetsName() int { + longestName := 0 + for k := range userMap { + if len(k.Name) > longestName { + longestName = len(k.Name) + } + } + return longestName +} + +func AddSpaces(s string, totalLen int) string { + for i := len(s); i < totalLen; i++ { + s += " " + } + return s +} + func (userMap UserMap) String() string { + maxLen := userMap.getLongetsName()*2 + 5 + userMappingListString := "" + for k, v := range userMap { + userMappingListString += fmt.Sprintf(" %v (%v has drawn %v)\n", AddSpaces(fmt.Sprintf(" %v => %v", k.Name, v.Name), maxLen), k.Name, v.Name) + } + return userMappingListString +} + +func (userMap UserMap) StringHTML() string { userMappingListString := "" for k, v := range userMap { - userMappingListString += fmt.Sprintf("

%v => %v (%v hat %v gezogen)

\n", k.Name, v.Name, k.Name, v.Name) + userMappingListString += fmt.Sprintf("

%v => %v (%v has drawn %v)

\n", k.Name, v.Name, k.Name, v.Name) } return userMappingListString } @@ -47,7 +73,7 @@ func (userMap UserMap) sendSummaryMail(conf config.EmailConfig, summaryMail stri Receiver: summaryMail, Content: email.Content{ Subject: conf.Subject + " | Summary", - Body: userMap.String(), + Body: userMap.StringHTML(), }, } err := mail.SendMail()