Skip to content

Commit

Permalink
ASP dashboard list view and onsite contact migration (#92)
Browse files Browse the repository at this point in the history
  • Loading branch information
ansonjwhe authored Feb 18, 2024
1 parent 33280e4 commit 2b87dc3
Showing 170 changed files with 7,048 additions and 1,661 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

name: Lint codebase

on:
@@ -52,4 +51,4 @@ jobs:
- name: Lint backend
if: steps.changes.outputs.backend == 'true'
working-directory: ./backend
run: pip install black flake8 && python -m black --check . && python -m flake8 .
run: pip install black flake8 && python -m black --check . --exclude ".*typings.*|test_csv.py" && flake8 .
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -11,4 +11,5 @@
**/*.cache
**/*.egg-info
**/*.eslintcache
**/*.swp
**/*.swp
**/.mypy_cache/**
3 changes: 3 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions .idea/feeding-canadian-kids.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 12 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -60,7 +60,18 @@ docker-compose up --build

The backend runs at http://localhost:5000 and the frontend runs at http://localhost:3000.

If you need to login as a user, there is a user in the development db: `test@test.com` with password `12345678`.
### Test Users

Password For all test accounts: `12345678`

Test ASP:
Email: `shahan.neda+asptest1@gmail.com`

Test Donor:
Email: `shahan.neda+mealdonortest1@gmail.com`

Test Admin:
Email: `shahan.neda+testadmin1@gmail.com`

## Useful Commands

1 change: 0 additions & 1 deletion backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
FROM python:3.8

WORKDIR /app

COPY requirements.txt ./
6 changes: 3 additions & 3 deletions backend/Makefile
Original file line number Diff line number Diff line change
@@ -4,8 +4,8 @@ test:
docker ps -qf name=fck_backend | grep "." > /dev/null || (echo "****** Run \`docker-compose up\` first! ******" && false)
# Add -s to the end of this next line to see all prints when testing
# i.e "... python -m pytest -s"
docker exec -it fck_backend /bin/bash -c "pip install -r requirements.txt && python -m pytest"

docker exec -it fck_backend /bin/bash -c "pip install -r requirements.txt && python -m pytest -s"
lint:
docker ps -qf name=fck_backend | grep "." > /dev/null || (echo "****** Run \`docker-compose up\` first! ******" && false)
docker exec -it fck_backend /bin/bash -c "black . && flake8 ."
docker exec -it fck_backend /bin/bash -c "black . && flake8 . --exclude **/typings/**"

16 changes: 14 additions & 2 deletions backend/app/graphql/__init__.py
Original file line number Diff line number Diff line change
@@ -2,13 +2,18 @@
import os

from flask import current_app


from .onsite_contact_mutations import OnsiteContactMutations
from .onsite_contact_queries import OnsiteContactQueries
from .example import ExampleQueries, ExampleMutations
from .user_queries import UserQueries
from .user_mutations import UserMutations
from .services import services
from ..services.implementations.user_service import UserService
from ..services.implementations.email_service import EmailService
from ..services.implementations.auth_service import AuthService
from ..services.implementations.onsite_contact_service import OnsiteContactService
from .auth import AuthMutations
from .meal_request import MealRequestMutations, MealRequestQueries
from ..services.implementations.meal_request_service import MealRequestService
@@ -24,6 +29,7 @@ class RootQuery(
UserQueries,
OnboardingRequestQueries,
MealRequestQueries,
OnsiteContactQueries,
):
pass

@@ -35,6 +41,7 @@ class RootMutation(
OnboardingRequestMutations,
MealRequestMutations,
UserMutations,
OnsiteContactMutations,
):
pass

@@ -48,7 +55,6 @@ class RootMutation(
def init_app(app):
with app.app_context():
# Add your services here: services["service_name"] = ...
services["user_service"] = UserService(logger=current_app.logger)
services["email_service"] = EmailService(
logger=current_app.logger,
credentials={
@@ -60,6 +66,13 @@ def init_app(app):
sender_email=os.getenv("MAILER_USER"),
display_name="Feeding Canadian Kids",
)
services["onsite_contact_service"] = OnsiteContactService(
logger=current_app.logger
)
services["user_service"] = UserService(
logger=current_app.logger,
onsite_contact_service=services["onsite_contact_service"],
)
services["auth_service"] = AuthService(
logger=current_app.logger,
user_service=services["user_service"],
@@ -69,4 +82,3 @@ def init_app(app):
logger=current_app.logger, email_service=services["email_service"]
)
services["meal_request_service"] = MealRequestService(logger=current_app.logger)
services["user_service"] = UserService(logger=current_app.logger)
47 changes: 32 additions & 15 deletions backend/app/graphql/meal_request.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import graphene

from .types import (
ContactInput,
Contact,
Mutation,
MutationList,
OnsiteContact,
QueryList,
SortDirection,
User,
)
from ..models.meal_request import MealStatus, MEAL_STATUSES
from ..models.meal_request import MEAL_STATUSES_ENUMS, MealStatus
from ..graphql.services import services

# Input Types
@@ -34,8 +33,9 @@ class MealInfoResponse(graphene.ObjectType):
class CreateMealRequestResponse(graphene.ObjectType):
id = graphene.ID()
drop_off_datetime = graphene.DateTime(required=True)
status = graphene.String(required=True)
status = graphene.Field(graphene.Enum.from_enum(MealStatus), required=True)
meal_info = graphene.Field(MealInfoResponse, required=True)
onsite_staff = graphene.List(OnsiteContact)


class DonationInfo(graphene.ObjectType):
@@ -48,11 +48,11 @@ class DonationInfo(graphene.ObjectType):
class MealRequestResponse(graphene.ObjectType):
id = graphene.ID()
requestor = graphene.Field(User)
status = graphene.String()
status = graphene.Field(graphene.Enum.from_enum(MealStatus), required=True)
drop_off_datetime = graphene.DateTime()
drop_off_location = graphene.String()
meal_info = graphene.Field(MealInfoResponse)
onsite_staff = graphene.List(Contact)
onsite_staff = graphene.List(OnsiteContact)
date_created = graphene.DateTime()
date_updated = graphene.DateTime()
delivery_instructions = graphene.String()
@@ -70,7 +70,7 @@ class Arguments:
drop_off_time = graphene.Time(required=True)
drop_off_location = graphene.String(required=True)
delivery_instructions = graphene.String(default_value=None)
onsite_staff = graphene.List(ContactInput, required=True)
onsite_staff = graphene.List(graphene.String, default_value=[])

# return values
meal_requests = graphene.List(CreateMealRequestResponse)
@@ -102,12 +102,12 @@ def mutate(
class UpdateMealRequest(Mutation):
class Arguments:
meal_request_id = graphene.ID(required=True)
requestor = graphene.ID(required=False)
requestor_id = graphene.ID(required=False)
drop_off_datetime = graphene.DateTime(required=False)
meal_info = MealTypeInput()
drop_off_location = graphene.String()
delivery_instructions = graphene.String()
onsite_staff = graphene.List(ContactInput)
onsite_staff = graphene.List(graphene.String)

# return values
meal_request = graphene.Field(MealRequestResponse)
@@ -116,15 +116,15 @@ def mutate(
self,
info,
meal_request_id,
requestor=None,
requestor_id: str,
drop_off_datetime=None,
meal_info=None,
drop_off_location=None,
delivery_instructions=None,
onsite_staff=None,
):
result = services["meal_request_service"].update_meal_request(
requestor=requestor,
requestor_id=requestor_id,
meal_info=meal_info,
drop_off_datetime=drop_off_datetime,
drop_off_location=drop_off_location,
@@ -138,7 +138,7 @@ def mutate(

class CommitToMealRequest(Mutation):
class Arguments:
requester = graphene.ID(required=True)
requestor = graphene.ID(required=True)
meal_request_ids = graphene.List(graphene.ID, required=True)
meal_description = graphene.String(required=True)
additional_info = graphene.String(default_value=None)
@@ -148,13 +148,13 @@ class Arguments:
def mutate(
self,
info,
requester,
requestor,
meal_request_ids,
meal_description,
additional_info=None,
):
result = services["meal_request_service"].commit_to_meal_request(
donor_id=requester,
donor_id=requestor,
meal_request_ids=meal_request_ids,
meal_description=meal_description,
additional_info=additional_info,
@@ -175,15 +175,32 @@ class MealRequestQueries(QueryList):
requestor_id=graphene.ID(required=True),
min_drop_off_date=graphene.Date(default_value=None),
max_drop_off_date=graphene.Date(default_value=None),
# status=graphene.List(graphene.Enum.from_enum(MealStatus)),
status=graphene.List(
graphene.Enum.from_enum(MealStatus),
default_value=MEAL_STATUSES,
# MealStatus,
default_value=MEAL_STATUSES_ENUMS,
),
offset=graphene.Int(default_value=0),
limit=graphene.Int(default_value=None),
sort_by_date_direction=SortDirection(default_value=SortDirection.ASCENDING),
)

getMealRequestById = graphene.Field(
MealRequestResponse,
requestor_id=graphene.ID(required=True),
id=graphene.ID(required=True),
)

def resolve_getMealRequestById(
self,
info,
requestor_id: str,
id: str,
):
meal_request = services["meal_request_service"].get_meal_request_by_id(id)
return meal_request

def resolve_getMealRequestsByRequestorId(
self,
info,
Loading

0 comments on commit 2b87dc3

Please sign in to comment.