|
1 | 1 | const {WebClient} = require('@slack/web-api'); |
2 | 2 | const {Raffle} = require('./lib/raffle'); |
3 | | -const RaffleCandidateRepository = require('./lib/raffle-candidate-repository'); |
4 | 3 | const RafflePrizeRepository = require('./lib/raffle-prize-repository'); |
5 | 4 | const express = require('express'); |
6 | 5 | const path = require('path'); |
7 | 6 | const fs = require('fs'); |
| 7 | +const SlackChannelRepository = require("./lib/slack-channel-repository"); |
| 8 | +const SlackUserRepository = require("./lib/slack-user-repository"); |
| 9 | +const RaffleCandidateService = require("./lib/raffle-candidate-service"); |
8 | 10 |
|
9 | | -const token = process.env.SLACK_TOKEN; |
10 | | -if (!token) { |
11 | | - throw new Error('Missing envvar SLACK_TOKEN'); |
| 11 | +const readEnvOrFail = (key) => { |
| 12 | + const result = process.env[key]; |
| 13 | + if (!result) { |
| 14 | + throw new Error(`Missing envvar ${key}`); |
| 15 | + } |
| 16 | + return result; |
12 | 17 | } |
| 18 | + |
| 19 | +const checkEnvVarPath = (path, envVar) => { |
| 20 | + if (!fs.statSync(path).isFile()) { |
| 21 | + throw new Error(`${path} does not point to a regular file. Please review your ${envVar} envvar configuration`); |
| 22 | + } |
| 23 | +} |
| 24 | + |
| 25 | +const token = readEnvOrFail('SLACK_TOKEN'); |
| 26 | +const attendeeCsvPath = readEnvOrFail('ATTENDEE_CSV_FILE'); |
| 27 | +checkEnvVarPath(attendeeCsvPath, 'ATTENDEE_CSV_FILE'); |
13 | 28 | const port = process.env.PORT || 3000; |
14 | 29 | const prizeFilePath = process.env.PRIZE_FILE || `${__dirname}/samples/prizes.json`; |
15 | | -if (!fs.statSync(prizeFilePath).isFile()) { |
16 | | - throw new Error(`${prizeFilePath} does not point to a regular file. Please review your PRIZE_FILE envvar configuration`); |
17 | | -} |
| 30 | +checkEnvVarPath(prizeFilePath, 'PRIZE_FILE'); |
18 | 31 | const app = express(); |
19 | 32 | app.use(express.json()); |
20 | 33 |
|
21 | | -const candidateRepository = new RaffleCandidateRepository(new WebClient(token)); |
| 34 | +const slackClient = new WebClient(token); |
22 | 35 | const prizeRepository = new RafflePrizeRepository(prizeFilePath); |
| 36 | +const raffleCandidateService = new RaffleCandidateService(new SlackChannelRepository(slackClient), new SlackUserRepository(slackClient)); |
23 | 37 |
|
24 | 38 | (async () => { |
25 | 39 | const prizes = await prizeRepository.getPrizes(); |
26 | | - const initialCandidates = await candidateRepository.getUsers((user) => |
27 | | - !user.is_admin && |
28 | | - !user.is_bot && |
29 | | - user.id !== RaffleCandidateRepository.SLACKBOT_ID); |
| 40 | + const initialCandidates = await raffleCandidateService.findInitialCandidates(); |
30 | 41 | const raffle = new Raffle(initialCandidates, prizes); |
31 | 42 |
|
32 | 43 | app.get('/', (req, res) => { |
|
0 commit comments