Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/_main_/utils/footage/FootageConstants.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
"ACTION": {"key": "ACTION", "json_field": "is_action"},
"EVENT": {"key": "EVENT", "json_field": "is_event"},
"VENDOR": {"key": "VENDOR", "json_field": "is_vendor"},
"ORGANIZATION": {"key": "ORGANIZATION", "json_field": "is_organization"},
"AUTH": {"key": "AUTH", "json_field": "is_authentication"},
"TESTIMONIAL": {"key": "TESTIMONIAL", "json_field": "is_testimonial"},
"MEDIA": {"key": "MEDIA", "json_field": "is_media"},
Expand Down
249 changes: 249 additions & 0 deletions src/api/handlers/organization.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
"""Handler file for all routes pertaining to organizations"""

from _main_.utils.route_handler import RouteHandler
import _main_.utils.common as utils
from _main_.utils.common import get_request_contents, rename_field, parse_bool, parse_location, parse_list, validate_fields, parse_string
from api.services.organization import OrganizationService
from _main_.utils.massenergize_response import MassenergizeResponse
from _main_.utils.massenergize_errors import CustomMassenergizeError
from types import FunctionType as function
from _main_.utils.context import Context
from _main_.utils.validator import Validator
from api.decorators import admins_only, super_admins_only, login_required
from api.store.common import expect_media_fields



class OrganizationHandler(RouteHandler):

def __init__(self):
super().__init__()
self.service = OrganizationService()
self.registerRoutes()

def registerRoutes(self):
self.add("/organizations.info", self.info)
self.add("/organizations.create", self.create)
self.add("/organizations.add", self.submit)
self.add("/organizations.submit", self.submit)
self.add("/organizations.list", self.list)
self.add("/organizations.update", self.update)
self.add("/organizations.copy", self.copy)
#self.add("/organizations.rank", self.rank) TODO
self.add("/organizations.delete", self.delete)
self.add("/organizations.remove", self.delete)

#admin routes
self.add("/organizations.listForCommunityAdmin", self.community_admin_list)
self.add("/organizations.listForSuperAdmin", self.super_admin_list)


def info(self, request):
context: Context = request.context
args = context.get_request_body()
args = rename_field(args, 'organization_id', 'id')
organization_info, err = self.service.get_organization_info(context, args)
if err:
return err
return MassenergizeResponse(data=organization_info)

@admins_only
def create(self, request):

context: Context = request.context
args = context.get_request_body()

(self.validator.expect("key_contact_name", str)
.expect("key_contact_email", str)
.expect("onboarding_contact_email", str)
.expect("name", str)
.expect("email", str)
.expect("phone_number", str)
.expect("have_address", bool)
.expect("is_verified", bool)
.expect("website", str, is_required=False)
.expect("is_published", bool)
.expect('is_approved', bool)
.expect("communities", list, is_required=False)
.expect("service_area_states", 'str_list', is_required=False)
.expect("properties_serviced", 'str_list', is_required=False)
.expect("image", "str_list", is_required=False)
.expect("tags", list, is_required=False)
.expect("location", "location", is_required=False)
)

args, err = self.validator.verify(args)
if err:
return err

# not user submitted
args["is_approved"] = args.pop("is_approved", True)

organization_info, err = self.service.create_organization(context, args)
if err:
return err
return MassenergizeResponse(data=organization_info)

@login_required
def submit(self, request):

context: Context = request.context
args = context.get_request_body()

(self.validator.expect("key_contact_name", str)
.expect("key_contact_email", str)
.expect("onboarding_contact_email", str)
.expect("name", str)
.expect("email", str)
.expect("phone_number", str)
.expect("have_address", bool)
.expect("is_verified", bool)
.expect("website", str, is_required=False)
.expect("is_published", bool)
.expect("communities", list, is_required=False)
.expect("service_area_states", 'str_list', is_required=False)
.expect("properties_serviced", 'str_list', is_required=False)
.expect("image", "file", is_required=False)
.expect("tags", list, is_required=False)
.expect("location", str, is_required=False)
.expect("organization_id", str)

)
# self.validator.expect("size", str)
# self.validator.expect("size_text", str)
# self.validator.expect("description")
# self.validator.expect("underAge", bool)
# self.validator.expect("copyright", bool)
# self.validator.expect("copyright_att", str)
# self.validator.expect("guardian_info", str)

self = expect_media_fields(self)

args, err = self.validator.verify(args)
if err:
return err

# user submitted organization, so notify the community admins
user_submitted = True
is_edit = args.get("organization_id", None)

if is_edit:
organization_info, err = self.service.update_organization(context, args, user_submitted)
else:
organization_info, err = self.service.create_organization(context, args, user_submitted)
if err:
return err
return MassenergizeResponse(data=organization_info)


def list(self, request):
context: Context = request.context
args = context.get_request_body()
organization_info, err = self.service.list_organizations(context, args)
if err:
return err
return MassenergizeResponse(data=organization_info)

@login_required
def update(self, request):
context: Context = request.context
args = context.get_request_body()
(self.validator
.rename("id","organization_id")
.expect("organization_id", int)
.expect("key_contact_name", str, is_required=False)
.expect("key_contact_email", str, is_required=False)
.expect("onboarding_contact_email", str, is_required=False)
.expect("name", str, is_required=False)
.expect("email", str, is_required=False)
.expect("website", str, is_required=False)
.expect("is_verified", bool, is_required=False)
.expect("phone_number", str, is_required=False)
.expect("have_address", bool, is_required=False)
.expect("is_published", bool, is_required=False)
.expect("is_approved", bool, is_required=False)
.expect("communities", list, is_required=False)
.expect("service_area_states", 'str_list', is_required=False)
.expect("properties_serviced", 'str_list', is_required=False)
.expect("tags", list, is_required=False)
.expect("image", "str_list", is_required=False)
.expect("location", "location", is_required=False)
)

self = expect_media_fields(self)
args, err = self.validator.verify(args)
if err:
return err

organization_info, err = self.service.update_organization(context, args)
if err:
return err
return MassenergizeResponse(data=organization_info)

@admins_only
def rank(self, request):
context: Context = request.context
args: dict = context.args

self.validator.expect('id', int, is_required=True)
self.validator.expect('rank', int, is_required=True)
self.validator.rename('organization_id', 'id')

args, err = self.validator.verify(args)
if err:
return err

organization_info, err = self.service.rank_organization(args,context)
if err:
return err
return MassenergizeResponse(data=organization_info)

@admins_only
def delete(self, request):
context: Context = request.context
args: dict = context.args
args = rename_field(args, 'organization_id', 'id')
organization_id = args.pop('id', None)
if not organization_id:
return CustomMassenergizeError("Please Provide Organization Id")
organization_info, err = self.service.delete_organization(organization_id,context)
if err:
return err
return MassenergizeResponse(data=organization_info)

@admins_only
def copy(self, request):
context: Context = request.context
args: dict = context.args
organization_id = args.get('organization_id', None)

if not organization_id:
return CustomMassenergizeError("Please Provide Organization Id")
organization_info, err = self.service.copy_organization(context, args)
if err:
return err
return MassenergizeResponse(data=organization_info)

@admins_only
def community_admin_list(self, request):
context: Context = request.context
args: dict = context.args

self.validator.expect("community_id", int, is_required=False)

args, err = self.validator.verify(args)
if err:
return err
organizations, err = self.service.list_organizations_for_community_admin(context, args)

if err:
return err
return MassenergizeResponse(data=organizations)

@super_admins_only
def super_admin_list(self, request):
context: Context = request.context
organizations, err = self.service.list_organizations_for_super_admin(context)
if err:
return err
return MassenergizeResponse(data=organizations)
9 changes: 9 additions & 0 deletions src/api/handlers/page_settings__organizations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
"""Handler file for all routes pertaining to organizations_page_settings"""

from database.models import OrganizationsPageSettings
from api.handlers.page_settings import PageSettingsHandler

class OrganizationsPageSettingsHandler(PageSettingsHandler):

def __init__(self):
super().__init__('organizations', OrganizationsPageSettings)
Loading