A simple shopping list app with addtional convenience features to improve the shopping experience.
- Core shopping list functionality
- Multi-user editing
- Data Mining of Super market information
- Special offer notifications
- List optimization
- Multi-list support
- Habit-learning
- Recipe-database integration
Use docker-compose up
to start the docker containers. Includes:
- node (API backend)
- nginx (static file server)
The nginx container serves the files in frontend/webapp/dist
.
Build the frontend with the following commands (from frontend/webapp
dir)
npm install
installs dependenciesnpm run build:dev
to build ornpm run watch:dev
to build and watch (re-build on file change)- Run unit tests:
npm test
(Coverage reports are found in/coverage
) - Run end to end tests:
npm run e2e
The node container mounts the backend/server
directory.
Use docker restart node_backend
to restart the server.
Note: The backend server runs on port 3000
as configures in the docker-compose.yml
.
The frontend nginx redirects requests made to the /api
route to this container.
Note: The backend expects to find a config.json
in backend/config
. See backend/config/config.sample.json
for the format.
Local test environment:
- Prepare a local database container as described in
backend/database/localdb.md
- Use
docker-compose -f docker-compose.yml -f docker-compose.localdb.yml up -d
to start all three docker containers.
Note: docker-compose.yml
defines the conatiners backend
(nodejs) and webserver
(nginx) as used in production. docker-compose.localdb.yml
defines an additional container postgres-db
for the local test database and modifies the backend
conatiner to connect it with postgres-db
.
-
No commits to
master
-
A user story has its own branch named
story-X
whereX
is the number of the story -
Sub-tasks have their own branch named
task-X-Y-AB
whereX
is the number of the story,Y
the number of the task andAB
are the initals of the responsible developer -
If a task is not associated with a story the story number can be omitted
-
Branches may have a brief description at the end of their name, e.g.
task-12-37-tw-Login-styling
-
Coding happens in the task-branches
-
Once complete and conforming to the DoD a pull request is opened to merge the changes into the story-branch after peer review
-
Once all task of a story are merged into the story branch it can be merged into master by pull request; rebase onto master as necessary
-
Commit-messages that are very similar or trivial changes (e.g. typo-fixes) can be squashed away on the task-branch
- All Code (Variables, Constants, Classes etc.) is in English
- All Comments are in English
- Everything (Source, Config, Docs...) is UTF-8, no exceptions
- No Tabstops in Source Files, only Spaces are acceptable
- JavaScript and TypeScript use 2-space indent
- CSS and SASS use 4-space indent
- Angular Style-Guide
- TypeScript Style-Guide
- Components are suffixed by
Component
, Services byService
, Directives byDirective
- Selectors are prefixed by
sl-
- File names are lowercase. Components end on
.component.ts
, services on.service.ts
, directives on.directive.ts
, templates on.template.html
, stylesheets on.style.scss
or.style.css
-
All requirements are met.
-
Changes to the requirements are documented.
-
All public interfaces and API endpoints are documented.
-
Private and protected code need not be documented. Use common sense.
-
Story-documentation is current.
-
Code is linting error free.
-
The code contains no FIXMEs or similar tags. TODOs only if optional.
-
The code contains no temporary development hacks.
-
Program logic is unit tested.
-
API endpoints are unit tested.
-
New UI components are end-to-end tested.
-
All tests are successful.
-
Changes are peer reviewed.
-
Conformance to the requirements was checked by a peer.
-
Code is merged into the master branch.