Feat/controllers - refactor entire backend and new admin interface #75

Merged
KevinMidboe merged 117 commits from feat/controllers into master 2021-02-19 00:19:52 +00:00

117 Commits

Author SHA1 Message Date
7402fb7a7c Promise.all needs a list of promises. 2021-02-19 01:18:12 +01:00
e89952d965 Forgot this prefix when referencing data value. 2021-02-19 01:04:03 +01:00
60044859eb Query parameters can not be constants. 2021-02-19 01:03:26 +01:00
d108f331ca Merge branch 'feat/controllers' of github.com:KevinMidboe/vinlottis into feat/controllers 2021-02-19 01:01:20 +01:00
3388bed400 Disable registering new users. 2021-02-19 01:01:06 +01:00
2fce0e66ab Merge branch 'master' into feat/controllers 2021-02-19 00:55:27 +01:00
704ed51db5 Prizedistribution wants winners w/ phone number. 2021-02-19 00:54:12 +01:00
48c1842b8b When env=development use middleware to always auth. 2021-02-19 00:39:59 +01:00
7bd2e9d931 All our new routes 🎉
- GET /history/search
 - GET /purchases
   - /purchases
   - /purchases/summary
   - /purchases/:date
 - PUT /lottery/winner/:id (not currently used)
 - GET /lotteries
 - POST /lottery/messages/winner/:id
2021-02-19 00:29:57 +01:00
d337329765 Use styles from global.scss. 2021-02-19 00:29:28 +01:00
83d9b30048 Request wine front & backend talk nicer togheter.
- requestWineController validates wine object and returns helpfull
 error repsonse if anything is missing.
 - requestWine uses new endpoint and calls api from within itself.
 - Linting.
2021-02-19 00:29:05 +01:00
a37c08880c Crazy breakpoints to always show filles rows.
Hides elements so we always show filled filled rows. The wine compoennt
does not load images before they are in the viewport, so it should not
decrease performance.
2021-02-19 00:00:30 +01:00
6b33e03aae Call api within the component itself & linting. 2021-02-18 23:59:39 +01:00
9e25b374e0 New underlinenav, also defined all as css vars. 2021-02-18 23:57:05 +01:00
9913b5984a Flex row class should column on mobile. 2021-02-18 23:56:51 +01:00
1d4b74b56b Added centralized .wines-container, + misc changes.
- .raffleElement gets more of it's styling in the global stylesheet.
 - margin class in steps, md, sm & 0.
2021-02-18 23:54:51 +01:00
f1a0f2a0f2 Button has more styles w/ added clases.
- .small: minimal height for content.
 - .pulse-button: animate a pulsating effect, used for getting user
 attention.
 - .warning: new orange warning button styling, used for update buttons.
2021-02-18 23:51:05 +01:00
9b2d0f2d31 .small button has minimal height. 2021-02-18 23:49:52 +01:00
e20e952573 Label-div has some margin top from label. 2021-02-18 23:49:16 +01:00
8d3a21825d Links always has pointer cursor & inherits color. 2021-02-18 23:48:17 +01:00
b02472ef75 Api calls done within & refactored as housekeeping.
Strings "Følg med på utviklingen" and "chat om trekningen" scrolls the
page content into view if clicked.
2021-02-18 23:45:13 +01:00
3f77722f4f allLotteries w/ sort & includeWinners query opts. 2021-02-18 23:42:21 +01:00
324ca5d9bc Date defaults to today and return response message. 2021-02-18 23:41:46 +01:00
b493fa2bea Commands dev=backend w/o auth & watch=frontend HMR. 2021-02-18 23:39:32 +01:00
1e6ec3d4c8 Require attendee name AND number when adding. 2021-02-18 23:39:00 +01:00
1b12453df0 LotteryWinner functionality not yet used.
Can post winners directly with parsing of parameters and error handling.
2021-02-18 23:38:00 +01:00
2eb933f03e Get including winners, filter by year and sort.
Separate function for getting all history including the winners object.
Both have sort parameter that is used within the mongo query instead of
doing it in javascript.
2021-02-18 23:30:09 +01:00
de664b3a29 Crazy breakpoints to always show filles rows.
Hides elements so we always show filled filled rows. The wine compoennt
does not load images before they are in the viewport, so it should not
decrease performance.
2021-02-18 23:26:05 +01:00
07dd0d43f5 Calls api from within and get as screen can fit. 2021-02-18 23:25:13 +01:00
cff64999b3 Removed unused code. 2021-02-18 23:23:37 +01:00
710f276a9b Api call from component itself. 2021-02-18 23:23:16 +01:00
6e0b2b76fe New admin pages with better isolated functionality.
Draw winner page has:
 - Better user feedback
 - Knows how many wines are left
 - Separat button for starting sms prize distribution.
 - Edit, update and delete wine by id.
RegisterWinePage:
 - Import wine by url.
 - Edit, update and delete wine by id.
2021-02-18 23:18:13 +01:00
7234c2fbba Backend endpoint makes it easier consume for graph.
New endpoint has the data aggregated so we don't need to do as much in
js.
Also added simple year select when we have data spanning multiple years.
2021-02-18 23:14:22 +01:00
d9de155174 Liting and compact prop for thiner styling. 2021-02-18 22:52:51 +01:00
7267c5f5bd If admin prop enable editing & more info.
Leveraging the new api supporting CRUD we check if admin prop is true
and display edit, update and delete buttons.
2021-02-18 22:50:54 +01:00
be70fa6ddf No longer hides if mouse leaves before timeout ends. 2021-02-18 22:49:02 +01:00
30a9d30b1e Renamed to reflect archive lottery functionality. 2021-02-18 22:48:37 +01:00
2734e9a840 Now dedicated to submitting/archiving lottery.
Removed all other features than adding raffles bought, money received
and mapping of wines and winners.
Also now does api calls from within the component, not external api.js.
Better validation and use of toast plugin for user feedback.
2021-02-18 22:42:25 +01:00
3886313351 Renamed to reflect admin attendee functionality. 2021-02-18 22:22:25 +01:00
fc261b9274 Rewrote to only contain add attendee functions.
The ui for adding a new user is much more friendly and enables adding
using only keyboard.
Leveraging the new api design supporting CRUD we can update & delete
attendees individually.
2021-02-18 22:19:30 +01:00
442e0ffbfd Api call from component itself and refactoring. 2021-02-18 22:15:26 +01:00
20dc2b8e38 Api call from component itself and linting. 2021-02-18 22:11:09 +01:00
2477f36f96 Get all wines with limit parameter. 2021-02-18 22:07:54 +01:00
4ab67877b9 New toast plugin, replacing ui/TextToast.vue.
Globally register toast plugin allows us to call this.$toast.info({})
from anywhere for a toast.
Currently styled types:
 - error
 - info
2021-02-18 21:57:29 +01:00
6968ccf389 Linting some ui components. 2021-02-18 21:54:01 +01:00
8bd41cc691 Much simpler using prizeDistribution endpoints. 2021-02-18 21:44:33 +01:00
eaf57115e8 Liting. 2021-02-18 21:42:03 +01:00
cded690fba Api call from component itself and linting. 2021-02-18 21:41:23 +01:00
eb9e7d4b43 When mounted focus on username input. 2021-02-18 21:35:32 +01:00
b2755add12 Api call from component itself and linting. 2021-02-18 21:35:18 +01:00
b5cca00ed4 Liting 2021-02-18 21:18:01 +01:00
2cf4095b97 Api call from component itself and linting. 2021-02-18 21:17:22 +01:00
72c1896747 Do api call from within the component itself. 2021-02-18 21:15:21 +01:00
011aec3dea Tabs redesigned, update url and can show counter.
Tabs have been redesigned and can now display a counter. This counter
can be set by emiting a "counter" event from the child.
Tabs read and set a ?tab={slug} query parameter when changing tab, when
loaded we check for this parameter to automatically select the correct
tab.
2021-02-18 21:10:14 +01:00
b57fb5f1f8 Admin gets new tabs.
Tabs for registering wines, adding attendees, drawing winner,
registering/archiving lottery and sending push notifications.
Each tab also has a slug and counter attribute.
2021-02-18 21:08:37 +01:00
9823197a48 Better validation and error resp validating wines. 2021-02-18 21:06:49 +01:00
d0fa89b92b Update lottery winner by id.
Endpoint, controller and repository function for updating lottery winner
by id and json payload.
Keeps previous definition for undefined/null values.
2021-02-18 21:05:40 +01:00
fc029f80df New message & wine controllers!
These interface towards the respective repositories.
Wine:
 - /api/wine/:id - getWineById
 - /api/wines - allWines

Messages:
 - /api/lottery/messages/winner/:id - notifyWinnerById
2021-02-18 21:02:07 +01:00
824bd60c02 Updated internal name of wine schema. 2021-02-18 21:00:32 +01:00
6003151e3b Better error handling for claim prize.
We wrap await function calls with try catch and return the res if any
error occur.
2021-02-18 20:58:57 +01:00
ab58a45da5 Better var name and response message text. 2021-02-18 20:58:40 +01:00
dcaaeae51f Get prizes only returns wines without a winner already. 2021-02-18 20:58:09 +01:00
9fd67a6bc3 Removed unused parameter. 2021-02-18 20:55:41 +01:00
70c80849df No longer delete winner as part of selecting prize.
Winners are rather marked with prize_selected and have it's own endpoint
to remove all winners.
2021-02-18 20:54:15 +01:00
a28a8ccacb When selecting prize, add winner to wine.
Changed the way we register a prize for winner.
Now we have a new prize_selected boolean field on a winner. This is
used to filter on when finding what winners have not selected a prize
yet. This also replaces the previous method of removing virtualWinners
after they selected a prize.

PrelotteryWine also get's a winner reference. This is used to filter on
when finding what prizes are left, and also makes it easier to
archive/register a lottery when the wine has a winner attached.
2021-02-18 20:50:30 +01:00
4bd3b688e9 Get wines by id or search with wine object.
Search with wine object tries to find wines matching name, year and id.
This is used for finding a wine from a prelottery wine where their _id
do not match.
2021-02-18 20:44:54 +01:00
930c458d9c Search history for winner name. 2021-02-18 20:40:35 +01:00
787882e753 History ordered by wins has limit parameter. 2021-02-18 20:40:14 +01:00
68b4e96ad0 Import with lowercase name, it's not a class. 2021-02-18 20:39:27 +01:00
56d2513a9c Incorrect history.js function called. 2021-02-18 20:38:49 +01:00
1c40fae69d Repository gets new search winner by query func.
Has sort parameter that defaults to newest first.
2021-02-17 19:26:01 +01:00
bca4558d59 orderByWins has limit parameter to slice response
Limit the number of rows returned, used for frontpage where we display
max 20.
2021-02-17 19:21:33 +01:00
38eb98e68b Sorting happens in mongo query, no longer in js. 2021-02-17 19:20:52 +01:00
c98ccbc3f0 We want a mongo instance of both winner and wine.
The inputs to these functions are objects, if we want to use mongoose we
need to get a new instance of wine and winner.
2021-02-17 19:19:13 +01:00
3d99a3e5f2 Wine repository gets function for all wines. 2021-02-17 19:17:36 +01:00
7292cf7983 Endpoint for getting wine schema.
This is for manual registration of prelottery wines from the admin page.
2021-02-15 22:38:22 +01:00
57fe7d444b Used correct func name for wines from vinmonpolet. 2021-02-15 22:34:51 +01:00
cb4a30b5e9 BIGBOY rewrite.
All endpoints have been re-worked to be more clear on what they do. They
also all have their own controller now.
2021-01-26 23:05:52 +01:00
56095cb3e2 Linting. 2021-01-26 23:04:49 +01:00
b321f2cfdd Fixed import location for redis. 2021-01-26 23:04:15 +01:00
ce480e790a Replaced for clearer project structure & new ctrls.
These files where directly called from the api endpoints. Now all
functoins have been replaced with a controller interfacing to the
endpoint and a repository file for each of the functions.
2021-01-26 23:01:49 +01:00
ba86bf3ada New custom errors to throw. 2021-01-26 23:01:18 +01:00
f4a16bc417 Removed always setting isAdmin true. 2021-01-26 23:01:08 +01:00
4c33708ff4 Made some required wine attributes optional. 2021-01-26 22:59:46 +01:00
87257fd5b2 Moved everything not lottery out.
Moved all logic related to lotteryAttendees, lotteryWinners and
prelotteryWines into each their repository and controller.

Now only holds draw, archive and get archived lotteries.
2021-01-26 22:58:41 +01:00
ac829052b6 Wine models now have extra year field. 2021-01-26 22:55:43 +01:00
1b1a99ccc3 Linting and more clear function names. 2021-01-26 22:43:18 +01:00
5e018f071d Prize distribution for selecting wines.
Moved the same functionality out from lottery.js and simplified a bit.
Now the backend also sends with wines to pick from.
When hitting the controller we check that the user is the next user in
line.
2021-01-26 22:42:33 +01:00
939e7e34df All CRUDS on winners for current lottery. 2021-01-26 22:37:36 +01:00
33070ae31a Keeps more information when adding prelottery wine 2021-01-26 22:35:12 +01:00
6e02c5e393 Reflecting changes, isolated winner from lottery. 2021-01-26 22:32:14 +01:00
b596dc28e8 Prelotterywine has it's own repo and ctrl. 2021-01-26 22:30:19 +01:00
03c0513da3 Rm from lottery.js attendee has own repo and ctrl. 2021-01-26 22:28:27 +01:00
afab4387cc Renamed winner.js to history.js. 2021-01-26 22:18:47 +01:00
1c1f52308f Add winner w/ wine to highscore. 2021-01-26 22:12:42 +01:00
f5d3b16f27 isAdmin default value = false. 2021-01-24 15:36:03 +01:00
b5b61784cc Add winners manually by posting /lottery/winners. 2021-01-24 15:34:58 +01:00
2f3a6aeba7 Catch exceptions when deleting wines from lottery. 2021-01-24 14:03:27 +01:00
84fa1ff925 Linted. 2021-01-24 14:02:53 +01:00
53135acc05 Get/add/update/delete winners from lottery. 2021-01-24 14:01:36 +01:00
fac50805bd Get stores from vinmonopolet.
Update all endpoint names to distinguish between wine and store actions.
Renamed wineController to vinmonopoletController.
2021-01-24 14:01:04 +01:00
6d5f0e824f Lottery wine functions & controller.
Split all wine/prelottrey wines into separate controller.
Now also have endpoints for deleting or updating single wine by id.
2021-01-24 12:12:52 +01:00
4d822ccb64 Isolated lottery attendee functs to it's own file. 2021-01-24 11:10:49 +01:00
7aa5f7e9ce Add, update and delete attendees to lottery. 2021-01-24 11:02:04 +01:00
18d8c2c7ca Lottery, get/delete attendees.
Changed so get attendees no longer is done in two endpoints, now we use
req.isAuthenticated() to check if we want to return full or minimal json
data about each attendee.
2021-01-24 10:14:00 +01:00
edc4d26647 User logout can happen in controller. 2021-01-24 10:08:39 +01:00
e07e6ae09a Winner controller, winners by date, color or name.
Winner controller replaces a lot of what happens in retrieve did for
aggregating when and what had been won. Now this is more clearly defined
in winner.js.
Also leverage mongo's query more than sorting and aggregating data like
previous implementation where a lot happened in js.
2021-01-24 10:05:00 +01:00
e9ece6963e /by-color endpoint for sort all winners by color.
Can also include query parameter includeWines for resolved wine
references.
2021-01-17 17:26:37 +01:00
53780878af Renamed to winners. Winners gets controller setup.
Rewrote everything that happened in history to better take advantage of
monogdb instead of doing everything in js.

Our endpoints become:
 - /winners - getAll w/ includeWines and sort query params.
 - /winners/latest - latest winners grouped w/ includeWines query
 params.
 - /winners/by-date - all winners grouped by date w/ includeWines and
 sort.
 - /winners/by-date/:date - get winners per epoch or string date.
 - /winners/by-name/:name - get winner by name parameter w/ sort for
 wins direction.
2021-01-17 16:55:57 +01:00
5e06a3fc28 ChatHistory behaved like controller already, renamed. 2021-01-16 14:23:02 +01:00
54c6c0eb97 History actions now have a controller setup. 2021-01-16 12:33:56 +01:00
e754f0a909 Wine ctrl for search wineinfo by query, ean or id. 2021-01-15 19:17:12 +01:00
a010641a8e Renamed wineinfo -> vinmonopolet. 2021-01-15 19:16:46 +01:00
89389ddc59 Renamed lottery -> history. 2021-01-15 19:16:15 +01:00
c03f5aa0cf Now requestAll returns object w/ wine within.
Also some housekeeping.
2021-01-11 20:56:14 +01:00
ca6f6cb2ba Request new wine response includes success bool.
Displays alert instead of modal if not true.
2021-01-11 20:54:48 +01:00
4043954f95 Split request into controller and repo.
Also try returning better error message on exceptions and check for
errors in payload to return well-defined errors.
2021-01-11 20:52:22 +01:00