Working on membership module routes, methods, and models

This commit is contained in:
Scott Idem
2021-06-21 17:53:04 -04:00
parent ce44e93b4d
commit 728682a07f
22 changed files with 1184 additions and 267 deletions

View File

@@ -18,7 +18,7 @@ from app.lib_general import *
from app.log import log
# Import the routers here first:
from app.routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_file, event_person, event_person_detail, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from app.routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_file, event_person, event_person_detail, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, lookup, membership_type, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals
from app.db_sql import db
@@ -219,13 +219,20 @@ app.include_router(
prefix='/lu',
tags=['Lookup'],
)
# app.include_router(
# membership_group.router,
# prefix='/membership/group',
# tags=['Membership Group'],
# )
# app.include_router(
# membership_member.router,
# prefix='/membership/member',
# tags=['Membership Member'],
# )
app.include_router(
membership.router,
prefix='/membership',
tags=['Membership'],
#dependencies=[Depends(get_token_header)],
#dependencies=[Depends(get_account_header)],
#responses={404: {'description': 'Not found'}},
membership_type.router,
prefix='/membership/type',
tags=['Membership Type'],
)
app.include_router(
order.router,

View File

@@ -14,7 +14,9 @@ from app.methods.contact_methods import get_contact_rec_list, load_contact_obj
from app.methods.event_methods import get_event_rec_list, load_event_obj
from app.methods.hosted_file_methods import get_hosted_file_rec_list, load_hosted_file_obj
from app.methods.journal_methods import get_journal_rec_list, load_journal_obj
from app.methods.membership_methods import get_membership_rec_list, load_membership_obj
from app.methods.membership_group_methods import get_membership_group_rec_list, load_membership_group_obj
from app.methods.membership_member_methods import get_membership_member_rec_list, load_membership_member_obj
from app.methods.membership_type_methods import get_membership_type_rec_list, load_membership_type_obj
from app.methods.order_methods import get_order_rec_list, load_order_obj
# from app.methods.order_cart_methods import get_order_cart_rec_list, load_order_cart_obj
from app.methods.organization_methods import get_organization_rec_list, load_organization_obj
@@ -81,11 +83,13 @@ def load_account_obj(
inc_hosted_file_link_list: bool = False,
inc_journal_list: bool = False, # Priority l3
inc_journal_entry_list: bool = False, # Priority l3
# inc_membership: bool = False,
inc_membership_cfg: bool = False,
inc_membership_list: bool = False,
inc_membership_group_list: bool = False,
inc_membership_member: bool = False,
inc_membership_member_list: bool = False, # Priority l1
inc_membership_member_profile: bool = False,
# inc_membership_type: bool = False,
inc_membership_type_list: bool = False,
inc_order: bool = False,
inc_order_cfg: bool = False,
inc_order_list: bool = False, # Priority l1
@@ -293,29 +297,84 @@ def load_account_obj(
account_obj.journal_list = journal_dict_list
else: account_obj.journal_list = []
# Updated 2021-06-18
if inc_membership_list:
if membership_rec_list_result := get_membership_rec_list(
# Updated 2021-06-21
if inc_membership_group_list:
if membership_group_rec_list_result := get_membership_group_rec_list(
for_obj_type = 'account',
for_obj_id = account_id,
limit = limit,
enabled = enabled,
):
membership_result_list = []
for membership_rec in membership_rec_list_result:
membership_result_list.append(
load_membership_obj(
membership_id = membership_rec.get('membership_id', None),
membership_group_result_list = []
for membership_group_rec in membership_group_rec_list_result:
membership_group_result_list.append(
load_membership_group_obj(
membership_group_id = membership_group_rec.get('membership_group_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
inc_membership_member_list = inc_membership_member_list,
# inc_membership_group_member_list = inc_membership_group_member_list,
inc_product_list = inc_product_list,
)
)
account_obj.membership_list = membership_result_list
else: account_obj.membership_list = []
account_obj.membership_group_list = membership_group_result_list
else: account_obj.membership_group_list = []
# Updated 2021-06-21
if inc_membership_member_list:
if membership_member_rec_list_result := get_membership_member_rec_list(
for_obj_type = 'account',
for_obj_id = account_id,
limit = limit,
enabled = enabled,
):
membership_member_result_list = []
for membership_member_rec in membership_member_rec_list_result:
membership_member_result_list.append(
load_membership_member_obj(
membership_member_id = membership_member_rec.get('membership_member_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
inc_membership_group_list = inc_membership_group_list,
inc_membership_member_profile = inc_membership_member_profile,
# inc_membership_member_list = inc_membership_member_list,
# inc_membership_member_list = inc_membership_member_list,
# inc_product_list = inc_product_list,
inc_person = inc_person,
inc_user = inc_user,
)
)
account_obj.membership_member_list = membership_member_result_list
else: account_obj.membership_member_list = []
# Updated 2021-06-18
if inc_membership_type_list:
if membership_type_rec_list_result := get_membership_type_rec_list(
for_obj_type = 'account',
for_obj_id = account_id,
limit = limit,
enabled = enabled,
):
membership_type_result_list = []
for membership_type_rec in membership_type_rec_list_result:
membership_type_result_list.append(
load_membership_type_obj(
membership_type_id = membership_type_rec.get('membership_type_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
inc_membership_member_list = inc_membership_member_list,
# inc_membership_type_member_list = inc_membership_type_member_list,
inc_product_list = inc_product_list,
)
)
account_obj.membership_type_list = membership_type_result_list
else: account_obj.membership_type_list = []
# Updated 2021-06-17
if inc_order_list:

View File

@@ -0,0 +1,166 @@
from __future__ import annotations
import datetime
from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging
from app.models.membership_group_member_models import Membership_Group_Member_Base
# ### BEGIN ### API Membership Group Member Methods ### create_membership_group_member_obj() ###
def create_membership_group_member_obj(membership_group_member_obj_new:Membership_Group_Member_Base) -> bool|int:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
membership_group_member_obj_data = membership_group_member_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'})
if membership_group_member_obj_in_result := sql_insert(
data=membership_group_member_obj_data,
table_name='membership_group_member',
rm_id_random=True,
id_random_length=8
): pass
else: return False
log.debug(membership_group_member_obj_in_result)
membership_group_member_id = membership_group_member_obj_in_result
log.debug(f'New membership_group_member_id: {membership_group_member_id}')
return membership_group_member_id
# ### END ### API Membership Group Member Methods ### create_membership_group_member_obj() ###
# ### BEGIN ### API Membership Group Member Methods ### load_membership_group_member_obj() ###
def load_membership_group_member_obj(
membership_group_member_id: int|str,
# limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
inc_membership_member: bool = False,
) -> Membership_Group_Member_Base|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_group_member_id := redis_lookup_id_random(record_id_random=membership_group_member_id, table_name='membership_group_member'): pass
else: return False
log.debug(membership_group_member_id)
if membership_group_member_rec := sql_select(table_name='v_membership_group_member', record_id=membership_group_member_id):
log.debug(membership_group_member_rec)
else: return False
log.debug(membership_group_member_rec)
try:
membership_group_member_obj = Membership_Group_Member_Base(**membership_group_member_rec)
log.debug(membership_group_member_obj)
except ValidationError as e:
log.error(e.json())
# Updated 2021-06-21
if inc_membership_member:
membership_member_id = membership_group_member_rec.get('membership_member_id', None)
log.debug(membership_member_id)
if membership_member_result := load_membership_member_obj(
membership_member_id = membership_member_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
):
membership_group_member_obj.membership_member = membership_member_result
else: membership_group_member_obj.membership_group_member = None
log.debug(membership_member_result)
if model_as_dict:
return membership_group_member_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return membership_group_member_obj
# ### END ### API Membership Group Member Methods ### load_membership_group_member_obj() ###
# ### BEGIN ### API Membership Group Member Methods ### update_membership_group_member_obj() ###
def update_membership_group_member_obj(
membership_group_member_id: int|str, # This allows for updating of the id_random value.
membership_group_member_obj_up: Membership_Group_Member_Base,
create_missing_obj: bool = False,
) -> bool:
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_group_member_id := redis_lookup_id_random(record_id_random=membership_group_member_id, table_name='membership_group_member'): pass
else: return False
membership_group_member_obj_up.id = membership_group_member_id
log.debug(membership_group_member_obj_up)
log.debug(membership_group_member_obj_up.dict(by_alias=False, exclude_unset=True))
# log.debug(membership_group_member_obj_up.dict(by_alias=False, exclude_unset=False))
membership_group_member_dict_up = membership_group_member_obj_up.dict(by_alias=False, exclude_unset=True)
log.debug(membership_group_member_dict_up)
if membership_group_member_obj_up_result := sql_update(data=membership_group_member_dict_up, table_name='membership_group_member', rm_id_random=True):
log.debug(membership_group_member_obj_up_result)
return True
else:
log.debug(membership_group_member_obj_up_result)
return False
# ### END ### API Membership Group Member Methods ### update_membership_group_member_obj() ###
# ### BEGIN ### API Membership Group Member Methods ### get_membership_group_member_rec_list() ###
def get_membership_group_member_rec_list(
for_obj_type: str,
for_obj_id: str,
limit: int = 1000,
enabled: str = 'enabled', # enabled, disabled, all
) -> list|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name='for_obj_type'): pass
else: return False
data = {}
data[f'{for_obj_type}_id'] = for_obj_id
# data['for_obj_type'] = for_obj_type
sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id'
if enabled in ['enabled', 'disabled', 'all']:
if enabled == 'enabled':
data['enable'] = True
sql_enabled = f'AND `tbl`.enable = :enable'
elif enabled == 'disabled':
data['enable'] = False
sql_enabled = f'AND `tbl`.enable = :enable'
elif enabled == 'all':
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT `tbl`.id AS 'membership_group_member_id', `tbl`.id_random AS 'membership_group_member_id_random'
FROM `membership_group_member` AS `tbl`
WHERE
{sql_obj_type_id}
{sql_enabled}
ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC
{sql_limit};
"""
if membership_group_member_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
membership_group_member_rec_li = membership_group_member_rec_li_result
else:
membership_group_member_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(membership_group_member_rec_li_result)
return membership_group_member_rec_li
# ### END ### API Membership Group Member Methods ### get_membership_group_member_rec_list() ###

View File

@@ -37,14 +37,23 @@ def create_membership_group_obj(membership_group_obj_new:Membership_Group_Base)
# ### BEGIN ### API Membership Group Methods ### load_membership_group_obj() ###
def load_membership_group_obj(
membership_group_id: int|str,
# limit: int = 1000,
limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
inc_membership: bool = False,
inc_parent_membership_group: bool = False,
enabled: str = 'enabled', # enabled, disabled, all
inc_address: bool = False,
inc_contact: bool = False,
inc_membership_cfg: bool = False,
inc_membership_member_list: bool = False,
inc_membership_member_profile: bool = False, # under membership_member
inc_membership_type_list: bool = False, # ???
# inc_parent_membership_group: bool = False,
inc_person: bool = False,
inc_product_list: bool = False,
inc_user: bool = False,
) -> Membership_Group_Base|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_group_id := redis_lookup_id_random(record_id_random=membership_group_id, table_name='membership_group'): pass
@@ -63,18 +72,49 @@ def load_membership_group_obj(
log.error(e.json())
# Updated 2021-06-18
if inc_parent_membership_group:
membership_group_id = membership_group_rec.get('membership_group_id', None)
log.debug(membership_group_id)
if membership_group_result := load_membership_group_obj(
membership_group_id = membership_group_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
if inc_membership_cfg:
membership_cfg_result = load_membership_cfg_obj(
account_id = membership_group_rec.get('account_id', None),
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
)
membership_group_rec['cfg'] = membership_cfg_result
# Updated 2021-06-18
# if inc_parent_membership_group:
# parent_membership_group_id = membership_group_rec.get('parent_membership_group_id', None)
# log.debug(parent_membership_group_id)
# if parent_membership_group_result := load_membership_group_obj(
# membership_group_id = parent_membership_group_id,
# by_alias = by_alias,
# exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
# ):
# membership_group_obj.parent_membership_group = parent_membership_group_result
# else: membership_group_obj.parent_membership_group = None
# log.debug(parent_membership_group_result)
# Updated 2021-06-18
if inc_product_list:
if product_rec_list_result := get_product_rec_list(
for_obj_type = 'membership_group',
for_obj_id = membership_group_id,
limit = limit,
enabled = enabled,
):
membership_group_obj.membership_group = membership_group_result
else: membership_group_obj.membership_group = None
log.debug(membership_group_result)
product_result_list = []
for product_rec in product_rec_list_result:
product_result_list.append(
load_product_obj(
product_id = product_rec.get('product_id', None),
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
)
)
membership_group_obj.product_list = product_result_list
else: membership_group_obj.product_list = []
if model_as_dict:
return membership_group_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
@@ -101,10 +141,10 @@ def update_membership_group_obj(
log.debug(membership_group_obj_up.dict(by_alias=False, exclude_unset=True))
# log.debug(membership_group_obj_up.dict(by_alias=False, exclude_unset=False))
journal_dict_up = membership_group_obj_up.dict(by_alias=False, exclude_unset=True)
log.debug(journal_dict_up)
membership_group_dict_up = membership_group_obj_up.dict(by_alias=False, exclude_unset=True)
log.debug(membership_group_dict_up)
if membership_group_obj_up_result := sql_update(data=journal_dict_up, table_name='membership_group', rm_id_random=True):
if membership_group_obj_up_result := sql_update(data=membership_group_dict_up, table_name='membership_group', rm_id_random=True):
log.debug(membership_group_obj_up_result)
return True
else:

View File

@@ -8,7 +8,7 @@ from app.lib_general import log, logging
from app.db_sql import redis_lookup_id_random, sql_insert_or_update, sql_select
from app.methods.membership_group_methods import get_membership_group_rec_list, load_membership_group_obj
from app.methods.membership_profile_methods import get_membership_profile_rec_list, load_membership_profile_obj
from app.methods.membership_member_profile_methods import get_membership_member_profile_rec_list, load_membership_member_profile_obj
from app.methods.person_methods import load_person_obj
from app.methods.user_methods import load_user_obj
@@ -174,8 +174,9 @@ def load_membership_member_obj(
inc_contact: bool = False,
inc_membership_cfg: bool = False,
inc_membership_group_list: bool = False,
inc_membership_profile: bool = False,
# inc_membership_profile_cust: bool = False,
inc_membership_member_profile: bool = False,
inc_membership_type: bool = False,
# inc_membership_member_profile_cust: bool = False,
inc_organization: bool = False,
inc_person: bool = False,
inc_user: bool = False,
@@ -218,12 +219,12 @@ def load_membership_member_obj(
membership_member_obj.membership_group_list = membership_group_result_list
else: membership_member_obj.membership_group_list = []
# Updated 2021-06-18
if inc_membership_profile:
membership_profile_id = membership_member_rec.get('membership_profile_id', None)
log.debug(membership_profile_id)
if membership_profile_result := load_membership_profile_obj(
membership_profile_id = membership_profile_id,
# Updated 2021-06-21
if inc_membership_member_profile:
membership_member_profile_id = membership_member_rec.get('membership_member_profile_id', None)
log.debug(membership_member_profile_id)
if membership_member_profile_result := load_membership_member_profile_obj(
membership_member_profile_id = membership_member_profile_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
@@ -232,9 +233,27 @@ def load_membership_member_obj(
# inc_membership = inc_membership,
# inc_organization = inc_organization,
):
membership_member_obj.membership_profile = membership_profile_result
else: membership_member_obj.membership_profile = None
log.debug(membership_profile_result)
membership_member_obj.membership_member_profile = membership_member_profile_result
else: membership_member_obj.membership_member_profile = None
log.debug(membership_member_profile_result)
# Updated 2021-06-18
if inc_membership_type:
membership_type_id = membership_member_rec.get('membership_type_id', None)
log.debug(membership_type_id)
if membership_type_result := load_membership_type_obj(
membership_type_id = membership_type_id,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
inc_address = inc_address,
inc_contact = inc_contact,
# inc_membership = inc_membership,
# inc_organization = inc_organization,
):
membership_member_obj.membership_type = membership_type_result
else: membership_member_obj.membership_type = None
log.debug(membership_type_result)
# Updated 2021-06-18
if inc_person:

View File

@@ -7,45 +7,45 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v
from app.db_sql import redis_lookup_id_random, sql_select
from app.lib_general import log, logging
from app.models.membership_profile_models import Membership_Profile_Base
from app.models.membership_member_profile_models import Membership_Member_Profile_Base
# ### BEGIN ### API Membership Profile Methods ### load_membership_profile_obj() ###
def load_membership_profile_obj(
membership_profile_id: int|str,
# ### BEGIN ### API Membership Member Profile Methods ### load_membership_member_profile_obj() ###
def load_membership_member_profile_obj(
membership_member_profile_id: int|str,
by_alias: bool = True,
exclude_unset: bool = True,
model_as_dict: bool = False,
inc_contact: bool = False,
inc_organization: bool = False,
) -> Membership_Profile_Base|dict|bool:
) -> Membership_Member_Profile_Base|dict|bool:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_profile_id := redis_lookup_id_random(record_id_random=membership_profile_id, table_name='membership_profile'): pass
if membership_member_profile_id := redis_lookup_id_random(record_id_random=membership_member_profile_id, table_name='membership_member_profile'): pass
else: return False
if membership_profile_rec := sql_select(
table_name='v_membership_profile',
record_id=membership_profile_id,
if membership_member_profile_rec := sql_select(
table_name='v_membership_member_profile',
record_id=membership_member_profile_id,
): pass
else: return False
log.debug(membership_profile_rec)
log.debug(membership_member_profile_rec)
try:
membership_profile_obj = Membership_Profile_Base(**membership_profile_rec)
log.debug(membership_profile_obj)
membership_member_profile_obj = Membership_Member_Profile_Base(**membership_member_profile_rec)
log.debug(membership_member_profile_obj)
except ValidationError as e:
log.error(e.json())
if model_as_dict:
return membership_profile_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
return membership_member_profile_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return membership_profile_obj
# ### END ### API Membership Profile Methods ### load_membership_profile_obj() ###
return membership_member_profile_obj
# ### END ### API Membership Member Profile Methods ### load_membership_member_profile_obj() ###
# ### BEGIN ### API Membership Profile Methods ### get_membership_profile_rec_list() ###
def get_membership_profile_rec_list(
# ### BEGIN ### API Membership Member Profile Methods ### get_membership_member_profile_rec_list() ###
def get_membership_member_profile_rec_list(
for_obj_type: str,
for_obj_id: str,
limit: int = 1000,
@@ -78,8 +78,8 @@ def get_membership_profile_rec_list(
sql_limit = ''
sql = f"""
SELECT `tbl`.id AS 'membership_profile_id', `tbl`.id_random AS 'membership_profile_id_random'
FROM `membership_profile` AS `tbl`
SELECT `tbl`.id AS 'membership_member_profile_id', `tbl`.id_random AS 'membership_member_profile_id_random'
FROM `membership_member_profile` AS `tbl`
WHERE
{sql_obj_type_id}
{sql_enabled}
@@ -87,12 +87,12 @@ def get_membership_profile_rec_list(
{sql_limit};
"""
if membership_profile_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
membership_profile_rec_li = membership_profile_rec_li_result
if membership_member_profile_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
membership_member_profile_rec_li = membership_member_profile_rec_li_result
else:
membership_profile_rec_li = []
membership_member_profile_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(membership_profile_rec_li_result)
log.debug(membership_member_profile_rec_li_result)
return membership_profile_rec_li
# ### END ### API Membership Profile Methods ### get_membership_profile_rec_list() ###
return membership_member_profile_rec_li
# ### END ### API Membership Member Profile Methods ### get_membership_member_profile_rec_list() ###

View File

@@ -11,21 +11,21 @@ from app.methods.membership_cfg_methods import load_membership_cfg_obj
from app.methods.membership_member_methods import get_membership_member_rec_list, load_membership_member_obj
from app.methods.product_methods import get_product_rec_list, load_product_obj
from app.models.membership_models import Membership_Base
from app.models.membership_type_models import Membership_Type_Base
# ### BEGIN ### API Membership Methods ### save_membership_obj() ###
def save_membership_obj(membership_obj_new:Membership_Base):
# ### BEGIN ### API Membership Type Methods ### save_membership_type_obj() ###
def save_membership_type_obj(membership_type_obj_new:Membership_Type_Base):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
return membership_id
# ### END ### API Membership Methods ### save_membership_obj() ###
return membership_type_id
# ### END ### API Membership Type Methods ### save_membership_type_obj() ###
# ### BEGIN ### API Membership Methods ### load_membership_obj() ###
def load_membership_obj(
membership_id:int|str,
# ### BEGIN ### API Membership Type Methods ### load_membership_type_obj() ###
def load_membership_type_obj(
membership_type_id:int|str,
limit: int = 1000,
by_alias: bool = True,
exclude_unset: bool = True,
@@ -34,48 +34,47 @@ def load_membership_obj(
inc_address: bool = False,
inc_contact: bool = False,
inc_membership_cfg: bool = False,
inc_membership_group_list: bool = False,
inc_membership_group_list: bool = False, # under membership_member
inc_membership_member_list: bool = False,
inc_membership_profile: bool = False,
inc_membership_member_profile: bool = False, # under membership_member
inc_organization: bool = False,
inc_person: bool = False,
inc_product: bool = False,
inc_product: bool = False, # is this needed?
inc_product_list: bool = False,
inc_user: bool = False,
) -> Membership_Base:
) -> Membership_Type_Base:
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_id := redis_lookup_id_random(record_id_random=membership_id, table_name='membership'): pass
if membership_type_id := redis_lookup_id_random(record_id_random=membership_type_id, table_name='membership_type'): pass
else: return False
if membership_rec := sql_select(table_name='v_membership', record_id=membership_id): pass
if membership_type_rec := sql_select(table_name='v_membership_type', record_id=membership_type_id): pass
else: return False
log.debug(membership_rec)
log.debug(membership_type_rec)
try:
membership_obj = Membership_Base(**membership_rec)
log.debug(membership_obj)
membership_type_obj = Membership_Type_Base(**membership_type_rec)
log.debug(membership_type_obj)
except ValidationError as e:
log.error(e.json())
# Updated 2021-06-18
if inc_membership_cfg:
membership_cfg_result = load_membership_cfg_obj(
account_id = membership_rec.get('account_id', None),
account_id = membership_type_rec.get('account_id', None),
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict,
enabled = enabled,
)
membership_rec['cfg'] = membership_cfg_result
membership_type_rec['cfg'] = membership_cfg_result
# Updated 2021-06-18
if inc_membership_member_list:
if membership_member_rec_list_result := get_membership_member_rec_list(
for_obj_type = 'membership',
for_obj_id = membership_id,
for_obj_type = 'membership_type',
for_obj_id = membership_type_id,
limit = limit,
enabled = enabled,
):
@@ -90,21 +89,21 @@ def load_membership_obj(
model_as_dict = model_as_dict,
enabled = enabled,
inc_membership_group_list = inc_membership_group_list,
inc_membership_profile = inc_membership_profile,
inc_membership_member_profile = inc_membership_member_profile,
inc_organization = inc_organization,
inc_person = inc_person,
inc_product = inc_product,
# inc_product = inc_product,
inc_user = inc_user,
)
)
membership_obj.membership_member_list = membership_member_result_list
else: membership_obj.membership_member_list = []
membership_type_obj.membership_member_list = membership_member_result_list
else: membership_type_obj.membership_member_list = []
# Updated 2021-06-18
if inc_product_list:
if product_rec_list_result := get_product_rec_list(
for_obj_type = 'membership',
for_obj_id = membership_id,
for_obj_type = 'membership_type',
for_obj_id = membership_type_id,
limit = limit,
enabled = enabled,
):
@@ -118,17 +117,17 @@ def load_membership_obj(
model_as_dict = model_as_dict,
)
)
membership_obj.product_list = product_result_list
else: membership_obj.product_list = []
membership_type_obj.product_list = product_result_list
else: membership_type_obj.product_list = []
if model_as_dict:
return membership_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
return membership_type_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member
else:
return membership_obj
# ### END ### API Membership Methods ### load_membership_obj() ###
return membership_type_obj
# ### END ### API Membership Type Methods ### load_membership_type_obj() ###
# ### BEGIN ### API Membership Methods ### get_membership_rec_list() ###
def get_membership_rec_list(
# ### BEGIN ### API Membership Type Methods ### get_membership_type_rec_list() ###
def get_membership_type_rec_list(
for_obj_type: str,
for_obj_id: str,
limit: int = 1000,
@@ -161,8 +160,8 @@ def get_membership_rec_list(
sql_limit = ''
sql = f"""
SELECT `tbl`.id AS 'membership_id', `tbl`.id_random AS 'membership_id_random'
FROM `membership` AS `tbl`
SELECT `tbl`.id AS 'membership_type_id', `tbl`.id_random AS 'membership_type_id_random'
FROM `membership_type` AS `tbl`
WHERE
{sql_obj_type_id}
{sql_enabled}
@@ -170,12 +169,12 @@ def get_membership_rec_list(
{sql_limit};
"""
if membership_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
membership_rec_li = membership_rec_li_result
if membership_type_rec_li_result := sql_select(data=data, sql=sql, as_list=True):
membership_type_rec_li = membership_type_rec_li_result
else:
membership_rec_li = []
membership_type_rec_li = []
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(membership_rec_li_result)
log.debug(membership_type_rec_li_result)
return membership_rec_li
# ### END ### API Membership Methods ### get_membership_rec_list() ###
return membership_type_rec_li
# ### END ### API Membership Type Methods ### get_membership_type_rec_list() ###

View File

@@ -9,7 +9,7 @@ from app.lib_general import *
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.fundraising_cfg_models import Fundraising_Cfg_Base
from app.models.membership_models import Membership_Cfg_Base
from app.models.membership_cfg_models import Membership_Cfg_Base
class Account_Cfg_Base(BaseModel):

View File

@@ -13,7 +13,7 @@ from app.models.account_cfg_models import Account_Cfg_Base
# from app.models.contact_models import Contact_Base
# from app.models.event_models import Event_Base
from app.models.fundraising_cfg_models import Fundraising_Cfg_Base
from app.models.membership_models import Membership_Cfg_Base
from app.models.membership_cfg_models import Membership_Cfg_Base
# from app.models.person_models import Person_Base
# from app.models.user_models import User_Base
@@ -58,6 +58,9 @@ class Account_Base(BaseModel):
hosted_file_list: Optional[list] # Hosted_File_Base() # Priority l2
journal_list: Optional[list] # Journal_Base() # Priority l3
membership_cfg: Optional[Membership_Cfg_Base] # Priority l2
membership_group_list: Optional[list] # Membership_Group_Base() # Priority l2
membership_member_list: Optional[list] # Membership_Member_Base() # Priority l2
membership_type_list: Optional[list] # Membership_Type_Base() # Priority l2
order_list: Optional[list] # Order_Base() # Priority l2
organization_list: Optional[list] # Organization_Base() # Priority l3
page_list: Optional[list] # Page_Base() # Priority l3

View File

@@ -48,11 +48,13 @@ base_fields['fundraising_cfg_id_random'] = xxx_id_random_field_schema
base_fields['hosted_file_id_random'] = xxx_id_random_field_schema
base_fields['journal_id_random'] = xxx_id_random_field_schema
base_fields['journal_entry_id_random'] = xxx_id_random_field_schema
base_fields['membership_id_random'] = xxx_id_random_field_schema
# base_fields['membership_id_random'] = xxx_id_random_field_schema # renamed to membership_type
base_fields['membership_cfg_id_random'] = xxx_id_random_field_schema
base_fields['membership_group_id_random'] = xxx_id_random_field_schema
base_fields['membership_group_member_id_random'] = xxx_id_random_field_schema
base_fields['membership_member_id_random'] = xxx_id_random_field_schema
base_fields['membership_profile_id_random'] = xxx_id_random_field_schema
base_fields['membership_member_profile_id_random'] = xxx_id_random_field_schema
base_fields['membership_type_id_random'] = xxx_id_random_field_schema
base_fields['order_cart_id_random'] = xxx_id_random_field_schema
base_fields['order_cart_line_id_random'] = xxx_id_random_field_schema
base_fields['order_id_random'] = xxx_id_random_field_schema

View File

@@ -39,8 +39,8 @@ class Membership_Cfg_Base(BaseModel):
confirm_name: Optional[str]
# Including JSON data
# extended_membership_profile: Optional[str] # list of dicts outlining extended (custom) membership profile fields for client
# extended_membership_profile: Optional[Json] = '[]' # list of dicts outlining extended (custom) membership profile fields for client
extended_membership_profile: Optional[Json] # list of dicts outlining extended (custom) membership profile fields for client
# extended_membership_member_profile: Optional[str] # list of dicts outlining extended (custom) membership profile fields for client
# extended_membership_member_profile: Optional[Json] = '[]' # list of dicts outlining extended (custom) membership profile fields for client
extended_membership_member_profile: Optional[Json] # list of dicts outlining extended (custom) membership profile fields for client
Membership_Cfg_Base.update_forward_refs()

View File

@@ -0,0 +1,87 @@
from __future__ import annotations
import datetime, hashlib, logging, os, pytz, redis, secrets
from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, Json, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.membership_group_models import Membership_Group_Base
from app.models.membership_member_models import Membership_Member_Base
class Membership_Group_Member_Base(BaseModel):
log.setLevel(logging.WARNING)
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['membership_group_member_id_random'],
alias='membership_group_member_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='membership_group_member_id'
)
membership_group_id_random: Optional[str]
membership_group_id: Optional[int]
membership_member_id_random: Optional[str]
membership_member_id: Optional[int]
flag: Optional[bool]
flag_message: Optional[str]
notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including other related objects
membership_group: Optional[Membership_Group_Base]
membership_member: Optional[Membership_Member_Base]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('membership_group_member_id_random', always=True)
def membership_group_member_id_random_copy(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
return values['id_random']
return None
@validator('id', always=True)
def membership_group_member_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership_group_member')
return None
@validator('membership_group_id', always=True)
def membership_group_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['membership_group_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_group_id_random'], table_name='membership_group')
return None
@validator('membership_member_id', always=True)
def membership_member_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['membership_member_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_member_id_random'], table_name='membership_member')
return None
class Config:
underscore_attrs_are_private = True
fields = base_fields
# Membership_Base.update_forward_refs()

View File

@@ -8,7 +8,8 @@ from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.membership_models import Membership_Base
from app.models.membership_cfg_models import Membership_Cfg_Base
# from app.models.membership_type_models import Membership_Type_Base
class Membership_Group_Base(BaseModel):
@@ -23,8 +24,10 @@ class Membership_Group_Base(BaseModel):
id: Optional[int] = Field(
#alias='membership_group_id'
)
membership_id_random: Optional[str]
membership_id: Optional[int]
account_id_random: Optional[str]
account_id: Optional[int]
membership_type_id_random: Optional[str]
membership_type_id: Optional[int]
parent_membership_group_id_random: Optional[str]
parent_membership_group_id: Optional[int]
@@ -32,13 +35,18 @@ class Membership_Group_Base(BaseModel):
overview: Optional[str]
description: Optional[str]
expire_in_days: Optional[int]
notes: Optional[str]
created_on: Optional[datetime.datetime] = None
updated_on: Optional[datetime.datetime] = None
# Including other related objects
membership: Optional[Membership_Base] # The membership option they currently have
parent_membership_group: Optional[Membership_Group_Base]
cfg: Optional[Membership_Cfg_Base]
# membership_type: Optional[Membership_Type_Base] # The membership option/type they currently have
membership_group_member_list: Optional[list] # Membership_Group_Member_Base
# parent_membership_group: Optional[Membership_Group_Base]
product_list: Optional[list] # Product_Base() List of products (for_type and for_id) that get this membership option
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
@@ -61,13 +69,22 @@ class Membership_Group_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership_group')
return None
@validator('membership_id', always=True)
@validator('account_id', always=True)
def account_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['account_id_random']:
return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
return None
@validator('membership_type_id', always=True)
def membership_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['membership_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_id_random'], table_name='membership')
if values['membership_type_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_type_id_random'], table_name='membership_type')
return None
@validator('parent_membership_group_id', always=True)

View File

@@ -8,9 +8,9 @@ from app.db_sql import redis_lookup_id_random
from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.membership_models import Membership_Base
from app.models.membership_cfg_models import Membership_Cfg_Base
from app.models.membership_profile_models import Membership_Profile_Base
from app.models.membership_member_profile_models import Membership_Member_Profile_Base
from app.models.membership_type_models import Membership_Type_Base
from app.models.person_models import Person_Base
from app.models.user_models import User_Base
@@ -30,8 +30,8 @@ class Membership_Member_Base(BaseModel):
account_id_random: Optional[str]
account_id: Optional[int]
membership_id_random: Optional[str]
membership_id: Optional[int] # NOTE: This is not optional
membership_type_id_random: Optional[str]
membership_type_id: Optional[int] # NOTE: This is not optional
person_id_random: Optional[str]
person_id: Optional[int]
product_id_random: Optional[str]
@@ -64,11 +64,12 @@ class Membership_Member_Base(BaseModel):
updated_on: Optional[datetime.datetime] = None
# Including other related objects
membership: Optional[Membership_Base] # The membership option they currently have
membership_cfg: Optional[Membership_Cfg_Base]
membership_type: Optional[Membership_Type_Base] # The membership option they currently have
cfg: Optional[Membership_Cfg_Base]
membership_group_list: Optional[list] # Membership_Group_Base() The membership groups they are a part of
membership_profile: Optional[Membership_Profile_Base]
membership_member_profile: Optional[Membership_Member_Profile_Base]
person: Optional[Person_Base]
# product: Optional[Product_Base] # The product used to become a member?
user: Optional[User_Base]
extended_member_profile: Optional[dict] = {}
@@ -102,13 +103,13 @@ class Membership_Member_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
return None
@validator('membership_id', always=True)
def membership_id_lookup(cls, v, values, **kwargs):
@validator('membership_type_id', always=True)
def membership_type_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['membership_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_id_random'], table_name='membership')
if values['membership_type_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_type_id_random'], table_name='membership_type')
return None
@validator('person_id', always=True)
@@ -120,14 +121,14 @@ class Membership_Member_Base(BaseModel):
return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person')
return None
@validator('product_id', always=True)
def product_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
# @validator('product_id', always=True)
# def product_id_lookup(cls, v, values, **kwargs):
# log.setLevel(logging.WARNING)
# log.debug(locals())
if values['product_id_random']:
return redis_lookup_id_random(record_id_random=values['product_id_random'], table_name='product')
return None
# if values['product_id_random']:
# return redis_lookup_id_random(record_id_random=values['product_id_random'], table_name='product')
# return None
@validator('user_id', always=True)
def user_id_lookup(cls, v, values, **kwargs):

View File

@@ -9,26 +9,26 @@ from app.lib_general import log, logging
from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.contact_models import Contact_Base
from app.models.membership_models import Membership_Base
from app.models.membership_type_models import Membership_Type_Base
from app.models.organization_models import Organization_Base
class Membership_Profile_Base(BaseModel):
class Membership_Member_Profile_Base(BaseModel):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['membership_profile_id_random'],
alias='membership_profile_id_random',
**base_fields['membership_member_profile_id_random'],
alias='membership_member_profile_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='membership_profile_id'
#alias='membership_member_profile_id'
)
contact_id_random: Optional[str]
contact_id: Optional[int]
membership_id_random: Optional[str]
membership_id: Optional[int]
# membership_type_id_random: Optional[str]
# membership_type_id: Optional[int]
organization_id_random: Optional[str]
organization_id: Optional[int]
@@ -49,12 +49,12 @@ class Membership_Profile_Base(BaseModel):
# Including other related objects
contact: Optional[Contact_Base]
organization: Optional[Organization_Base] = Organization_Base()
organization: Optional[Organization_Base]
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('membership_profile_id_random', always=True)
def membership_profile_id_random_copy(cls, v, values, **kwargs):
#@validator('membership_member_profile_id_random', always=True)
def membership_member_profile_id_random_copy(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
@@ -63,23 +63,23 @@ class Membership_Profile_Base(BaseModel):
return None
@validator('id', always=True)
def membership_profile_id_lookup(cls, v, values, **kwargs):
def membership_member_profile_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
log.debug(values['id_random'])
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership_profile')
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership_member_profile')
return None
@validator('membership_id', always=True)
def membership_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
# @validator('membership_type_id', always=True)
# def membership_lookup(cls, v, values, **kwargs):
# log.setLevel(logging.WARNING)
# log.debug(locals())
if values['membership_id_random']:
return redis_lookup_id_random(record_id_random=values['membership_id_random'], table_name='membership')
return None
# if values['membership_type_id_random']:
# return redis_lookup_id_random(record_id_random=values['membership_type_id_random'], table_name='membership_type')
# return None
@validator('contact_id', always=True)
def contact_id_lookup(cls, v, values, **kwargs):

View File

@@ -11,17 +11,17 @@ from app.models.common_field_schema import base_fields, default_num_bytes
from app.models.membership_cfg_models import Membership_Cfg_Base
class Membership_Base(BaseModel):
class Membership_Type_Base(BaseModel):
log.setLevel(logging.WARNING)
log.debug(locals())
id_random: Optional[str] = Field(
**base_fields['membership_id_random'],
alias='membership_id_random',
**base_fields['membership_type_id_random'],
alias='membership_type_id_random',
default_factory=lambda:secrets.token_urlsafe(default_num_bytes),
)
id: Optional[int] = Field(
#alias='membership_id'
#alias='membership_type_id'
)
account_id_random: Optional[str]
@@ -69,14 +69,14 @@ class Membership_Base(BaseModel):
# additional_terms_conditions: Optional[dict] = {} # Is this useful?
# Including other related objects
cfg: Optional[Membership_Cfg_Base] = Membership_Cfg_Base()
cfg: Optional[Membership_Cfg_Base]
membership_member_list: Optional[list] # Membership_Member_Base() List of membership members
product_list: Optional[list] # Product_Base() List of products (for_type and for_id) that get this membership option
_processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now)
#@validator('membership_id_random', always=True)
def membership_id_random_copy(cls, v, values, **kwargs):
#@validator('membership_type_id_random', always=True)
def membership_type_id_random_copy(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
@@ -85,12 +85,12 @@ class Membership_Base(BaseModel):
return None
@validator('id', always=True)
def membership_id_lookup(cls, v, values, **kwargs):
def membership_type_id_lookup(cls, v, values, **kwargs):
log.setLevel(logging.WARNING)
log.debug(locals())
if values['id_random']:
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership')
return redis_lookup_id_random(record_id_random=values['id_random'], table_name='membership_type')
return None
# @validator('account_id', always=True)
@@ -102,4 +102,4 @@ class Membership_Base(BaseModel):
# return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account')
# return None
# Membership_Base.update_forward_refs()
# Membership_Type_Base.update_forward_refs()

View File

@@ -141,10 +141,14 @@ async def get_account_obj_new(
inc_hosted_file_link_list: bool = False,
inc_journal_list: bool = False,
inc_journal_entry_list: bool = False,
# inc_membership: bool = False,
inc_membership_cfg: bool = False,
inc_membership_list: bool = False,
# inc_membership_group: bool = False,
inc_membership_group_list: bool = False,
inc_membership_member: bool = False,
inc_membership_member_list: bool = False,
inc_membership_member_profile: bool = False,
# inc_membership_type: bool = False,
inc_membership_type_list: bool = False,
# inc_order: bool = False,
inc_order_list: bool = False,
# inc_order_cart: bool = False,
@@ -212,10 +216,12 @@ async def get_account_obj_new(
inc_hosted_file_link_list = inc_hosted_file_link_list,
inc_journal_list = inc_journal_list,
inc_journal_entry_list = inc_journal_entry_list,
# inc_membership = inc_membership,
inc_membership_cfg = inc_membership_cfg,
inc_membership_list = inc_membership_list,
inc_membership_group_list = inc_membership_group_list,
inc_membership_member = inc_membership_member,
inc_membership_member_list = inc_membership_member_list,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_type_list = inc_membership_type_list,
# inc_order = inc_order,
inc_order_list = inc_order_list,
# inc_order_cart = inc_order_cart,

View File

@@ -31,7 +31,11 @@ from app.models.event_track_models import *
from app.models.hosted_file_models import *
from app.models.journal_models import *
from app.models.journal_entry_models import *
from app.models.membership_models import *
from app.models.membership_cfg_models import *
from app.models.membership_group_models import *
from app.models.membership_group_member_models import *
from app.models.membership_member_models import *
from app.models.membership_type_models import *
from app.models.order_models import *
from app.models.order_cart_models import *
from app.models.organization_models import *
@@ -82,8 +86,12 @@ obj_type_li['journal'] = {'table_name': 'v_journal', 'base_name': Journal_Base}
obj_type_li['journal_entry'] = {'table_name': 'v_journal_entry', 'base_name': Journal_Entry_Base}
#obj_type_li['log'] = {'table_name': 'log', 'base_name': Log_Base} #'v_log'
#obj_type_li['log_client_viewing'] = {'table_name': 'log_client_viewing', 'base_name': Log_Client_Viewing_Base}
obj_type_li['membership'] = {'table_name': 'v_membership', 'base_name': Membership_Base}
obj_type_li['membership_cfg'] = {'table_name': 'v_membership_cfg', 'base_name': Membership_Cfg_Base}
obj_type_li['membership_group'] = {'table_name': 'v_membership_group', 'base_name': Membership_Group_Base}
obj_type_li['membership_group_member'] = {'table_name': 'v_membership_group_member', 'base_name': Membership_Group_Member_Base}
obj_type_li['membership_member'] = {'table_name': 'v_membership_member', 'base_name': Membership_Member_Base}
obj_type_li['membership_member_profile'] = {'table_name': 'v_membership_member_profile', 'base_name': Membership_Member_Profile_Base}
obj_type_li['membership_type'] = {'table_name': 'v_membership_type', 'base_name': Membership_Type_Base}
#obj_type_li['message'] = {'table_name': 'message', 'base_name': Message_Base} #'v_message'
obj_type_li['order'] = {'table_name': 'v_order', 'base_name': Order_Base}
obj_type_li['order_cart'] = {'table_name': 'v_order_cart', 'base_name': Order_Cart_Base}
@@ -124,8 +132,8 @@ obj_type_li['user_role'] = {'table_name': 'v_user_role', 'base_name': User_Role_
#obj_type_li['stripe_customer'] = {'table_name': 'stripe_customer', 'base_name': Stripe_Customer_Base}
#obj_type_li['stripe_log'] = {'table_name': 'stripe_log', 'base_name': Stipe_Log_Base}
# obj_type_li['c_idda_membership_profile'] = {'table_name': 'c_idda_membership_profile', 'base_name': C_Idda_Membership_Profile_Base}
# obj_type_li['c_osit_demo_membership_profile'] = {'table_name': 'c_osit_demo_membership_profile', 'base_name': C_Osit_Demo_Membership_Profile_Base}
# obj_type_li['c_idda_membership_member_profile'] = {'table_name': 'c_idda_membership_member_profile', 'base_name': C_Idda_membership_member_profile_Base}
# obj_type_li['c_osit_demo_membership_member_profile'] = {'table_name': 'c_osit_demo_membership_member_profile', 'base_name': C_Osit_Demo_membership_member_profile_Base}
router = APIRouter()

View File

@@ -0,0 +1,251 @@
import datetime
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
from app.config import settings
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random
from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.methods.membership_group_methods import load_membership_group_obj
from app.models.membership_group_models import Membership_Group_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_membership_group_obj(
obj: Membership_Group_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_group'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
data=obj_data_dict,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_membership_group_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
obj: Membership_Group_Base = None,
#x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_group'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type=obj_type,
data=obj_data_dict,
obj_id=obj_id,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.get('/list', response_model=Resp_Body_Base)
async def get_membership_group_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_group'
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
for_obj_id=for_obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# Look up is only for account, person, or user records
@router.get('/lookup', response_model=Resp_Body_Base)
async def lookup_membership_group_obj(
for_obj_id: Union[int,str],
for_obj_type: str = Query(..., min_length=2, max_length=50),
x_account_id: str = Header(...),
inc_membership_member_profile: bool = True,
inc_membership_cfg: bool = True,
inc_extended_profile: bool = True,
inc_person: bool = True,
inc_user: bool = True,
by_alias: bool = True,
exclude_unset: bool = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_group'
base_name = Membership_Group_Base
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
else: return mk_resp(data=False, status_code=404) # Not Found
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
data = {}
as_list = False
if for_obj_type == 'account' and for_obj_id:
data['account_id'] = for_obj_id
sql_where_for_obj_type = """`membership_group`.account_id = :account_id"""
sql_limit = ''
as_list = True
elif for_obj_type == 'person' and for_obj_id:
data['person_id'] = for_obj_id
sql_where_for_obj_type = """`membership_group`.person_id = :person_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'user' and for_obj_id:
data['user_id'] = for_obj_id
sql_where_for_obj_type = """`membership_group`.user_id = :user_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'membership_group' and for_obj_id:
data['membership_group_id'] = for_obj_id
sql_where_for_obj_type = """`membership_group`.id = :membership_group_id"""
sql_limit = 'LIMIT 1'
else:
log.debug(f'Object type={for_obj_type}; Object ID={for_obj_id}')
return mk_resp(data=False, status_code=400) # Bad Request
sql = f"""
SELECT id AS 'membership_group_id', id_random AS 'membership_group_id_random'
FROM `membership_group` AS `membership_group`
WHERE {sql_where_for_obj_type}
{sql_limit}
"""
# This will return a list if selecting by account ID
membership_group_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
if isinstance(membership_group_obj_result, dict):
membership_group_id = membership_group_obj_result.get('membership_group_id', None)
membership_group_obj = load_membership_group_obj(
membership_group_id = membership_group_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
data = membership_group_obj
elif isinstance(membership_group_obj_result, list):
membership_group_obj_li = []
for membership_group_obj in membership_group_obj_result:
membership_group_id = membership_group_obj.get('membership_group_id', None)
membership_group_obj_li.append(
load_membership_group_obj(
membership_group_id = membership_group_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
)
data = membership_group_obj_li
else:
log.debug(membership_group_obj_result)
return mk_resp(data=None, status_code=404) # Not Found
return mk_resp(data=data)
# ### BEGIN ### API Membership Group ### get_membership_group_obj() ###
# Working well as of 2021-06-21. Using as a template for other routes.
@router.get('/{membership_group_id}', response_model=Resp_Body_Base)
async def get_membership_group_obj(
membership_group_id: str = Query(..., min_length=1, max_length=22),
enabled: str = 'enabled', # For now this covers any included objects or object lists
limit: int = 500, # For now this covers any included objects or object lists
inc_address: bool = False, # Per member
inc_contact: bool = False, # Per member
inc_membership_cfg: bool = False,
inc_membership_group_list: bool = False, # List of groups per member
inc_membership_group_member_list: bool = False, # List of members belonging to this group
inc_membership_member_profile: bool = False, # Per member
inc_organization: bool = False, # Per member
inc_person: bool = False, # Per member
inc_product: bool = False, # Per member
inc_product_list: bool = False,
inc_user: bool = False, # Per member
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_group_id := redis_lookup_id_random(record_id_random=membership_group_id, table_name='membership_group'): pass
else:
return mk_resp(data=None, status_code=404)
if membership_group_result := load_membership_group_result(
membership_group_id = membership_group_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict, # NOTE: returning model as a dict
enabled = enabled,
inc_address = inc_address,
inc_contact = inc_contact,
inc_membership_cfg = inc_membership_cfg,
inc_membership_group_list = inc_membership_group_list,
inc_membership_group_member_list = inc_membership_group_member_list,
inc_membership_member_profile = inc_membership_member_profile,
inc_organization = inc_organization,
inc_person = inc_person,
inc_product = inc_product,
inc_product_list = inc_product_list,
inc_user = inc_user,
):
pass
else:
return mk_resp(data=False, status_code=400) # Bad Request
return mk_resp(data=membership_group_result)
# ### END ### API Membership ### get_membership_group_obj() ###
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
async def delete_membership_group_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_group'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result

View File

@@ -0,0 +1,251 @@
import datetime
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
from app.config import settings
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random
from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.methods.membership_member_methods import load_membership_member_obj
from app.models.membership_member_models import Membership_Member_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_membership_member_obj(
obj: Membership_Member_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_member'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
data=obj_data_dict,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_membership_member_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
obj: Membership_Member_Base = None,
#x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_member'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type=obj_type,
data=obj_data_dict,
obj_id=obj_id,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.get('/list', response_model=Resp_Body_Base)
async def get_membership_member_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_member'
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
for_obj_id=for_obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# Look up is only for account, person, or user records
@router.get('/lookup', response_model=Resp_Body_Base)
async def lookup_membership_member_obj(
for_obj_id: Union[int,str],
for_obj_type: str = Query(..., min_length=2, max_length=50),
x_account_id: str = Header(...),
inc_membership_member_profile: bool = True,
inc_membership_cfg: bool = True,
inc_extended_profile: bool = True,
inc_person: bool = True,
inc_user: bool = True,
by_alias: bool = True,
exclude_unset: bool = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_member'
base_name = Membership_Member_Base
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
else: return mk_resp(data=False, status_code=404) # Not Found
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
data = {}
as_list = False
if for_obj_type == 'account' and for_obj_id:
data['account_id'] = for_obj_id
sql_where_for_obj_type = """`membership_member`.account_id = :account_id"""
sql_limit = ''
as_list = True
elif for_obj_type == 'person' and for_obj_id:
data['person_id'] = for_obj_id
sql_where_for_obj_type = """`membership_member`.person_id = :person_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'user' and for_obj_id:
data['user_id'] = for_obj_id
sql_where_for_obj_type = """`membership_member`.user_id = :user_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'membership_member' and for_obj_id:
data['membership_member_id'] = for_obj_id
sql_where_for_obj_type = """`membership_member`.id = :membership_member_id"""
sql_limit = 'LIMIT 1'
else:
log.debug(f'Object type={for_obj_type}; Object ID={for_obj_id}')
return mk_resp(data=False, status_code=400) # Bad Request
sql = f"""
SELECT id AS 'membership_member_id', id_random AS 'membership_member_id_random'
FROM `membership_member` AS `membership_member`
WHERE {sql_where_for_obj_type}
{sql_limit}
"""
# This will return a list if selecting by account ID
membership_member_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
if isinstance(membership_member_obj_result, dict):
membership_member_id = membership_member_obj_result.get('membership_member_id', None)
membership_member_obj = load_membership_member_obj(
membership_member_id = membership_member_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
data = membership_member_obj
elif isinstance(membership_member_obj_result, list):
membership_member_obj_li = []
for membership_member_obj in membership_member_obj_result:
membership_member_id = membership_member_obj.get('membership_member_id', None)
membership_member_obj_li.append(
load_membership_member_obj(
membership_member_id = membership_member_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
)
data = membership_member_obj_li
else:
log.debug(membership_member_obj_result)
return mk_resp(data=None, status_code=404) # Not Found
return mk_resp(data=data)
# ### BEGIN ### API Membership Group ### get_membership_member_obj() ###
# Working well as of 2021-06-21. Using as a template for other routes.
@router.get('/{membership_member_id}', response_model=Resp_Body_Base)
async def get_membership_member_obj(
membership_member_id: str = Query(..., min_length=1, max_length=22),
enabled: str = 'enabled', # For now this covers any included objects or object lists
limit: int = 500, # For now this covers any included objects or object lists
inc_address: bool = False, # Per member
inc_contact: bool = False, # Per member
inc_membership_cfg: bool = False,
inc_membership_member_list: bool = False, # List of groups per member
inc_membership_type_list: bool = False, # List of membership types belonging to this member
inc_membership_member_profile: bool = False,
inc_organization: bool = False,
inc_person: bool = False,
# inc_product: bool = False,
# inc_product_list: bool = False,
inc_user: bool = False, # Per member
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_member_id := redis_lookup_id_random(record_id_random=membership_member_id, table_name='membership_member'): pass
else:
return mk_resp(data=None, status_code=404)
if membership_member_result := load_membership_member_result(
membership_member_id = membership_member_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
model_as_dict = model_as_dict, # NOTE: returning model as a dict
enabled = enabled,
inc_address = inc_address,
inc_contact = inc_contact,
inc_membership_cfg = inc_membership_cfg,
inc_membership_member_list = inc_membership_member_list,
inc_membership_member_member_list = inc_membership_member_member_list,
inc_membership_member_profile = inc_membership_member_profile,
inc_organization = inc_organization,
inc_person = inc_person,
inc_product = inc_product,
inc_product_list = inc_product_list,
inc_user = inc_user,
):
pass
else:
return mk_resp(data=False, status_code=400) # Bad Request
return mk_resp(data=membership_member_result)
# ### END ### API Membership ### get_membership_member_obj() ###
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
async def delete_membership_member_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership_member'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result

View File

@@ -9,9 +9,9 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select,
from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from app.methods.membership_methods import load_membership_obj
from app.methods.membership_type_methods import load_membership_type_obj
from app.models.membership_models import Membership_Base
from app.models.membership_type_models import Membership_Type_Base
from app.models.response_models import Resp_Body_Base, mk_resp
@@ -19,8 +19,8 @@ router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_membership_obj(
obj: Membership_Base,
async def post_membership_type_obj(
obj: Membership_Type_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
@@ -29,7 +29,7 @@ async def post_membership_obj(
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_type = 'membership_type'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
@@ -42,9 +42,9 @@ async def post_membership_obj(
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_membership_obj(
async def patch_membership_type_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
obj: Membership_Base = None,
obj: Membership_Type_Base = None,
#x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
@@ -53,7 +53,7 @@ async def patch_membership_obj(
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_type = 'membership_type'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
@@ -69,7 +69,7 @@ async def patch_membership_obj(
@router.get('/list', response_model=Resp_Body_Base)
async def get_membership_obj_li(
async def get_membership_type_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
x_account_id: str = Header(...),
@@ -79,7 +79,7 @@ async def get_membership_obj_li(
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_type = 'membership_type'
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
@@ -92,11 +92,11 @@ async def get_membership_obj_li(
# Look up is only for account, person, or user records
@router.get('/lookup', response_model=Resp_Body_Base)
async def lookup_membership_obj(
async def lookup_membership_type_obj(
for_obj_id: Union[int,str],
for_obj_type: str = Query(..., min_length=2, max_length=50),
x_account_id: str = Header(...),
inc_membership_profile: bool = True,
inc_membership_member_profile: bool = True,
inc_membership_cfg: bool = True,
inc_extended_profile: bool = True,
inc_person: bool = True,
@@ -107,8 +107,8 @@ async def lookup_membership_obj(
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
base_name = Membership_Base
obj_type = 'membership_type'
base_name = Membership_Type_Base
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
else: return mk_resp(data=False, status_code=404) # Not Found
@@ -118,72 +118,72 @@ async def lookup_membership_obj(
as_list = False
if for_obj_type == 'account' and for_obj_id:
data['account_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.account_id = :account_id"""
sql_where_for_obj_type = """`membership_type`.account_id = :account_id"""
sql_limit = ''
as_list = True
elif for_obj_type == 'person' and for_obj_id:
data['person_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.person_id = :person_id"""
sql_where_for_obj_type = """`membership_type`.person_id = :person_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'user' and for_obj_id:
data['user_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.user_id = :user_id"""
sql_where_for_obj_type = """`membership_type`.user_id = :user_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'membership' and for_obj_id:
data['membership_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.id = :membership_id"""
elif for_obj_type == 'membership_type' and for_obj_id:
data['membership_type_id'] = for_obj_id
sql_where_for_obj_type = """`membership_type`.id = :membership_type_id"""
sql_limit = 'LIMIT 1'
else:
log.debug(f'Object type={for_obj_type}; Object ID={for_obj_id}')
return mk_resp(data=False, status_code=400) # Bad Request
sql = f"""
SELECT id AS 'membership_id', id_random AS 'membership_id_random'
FROM `membership` AS `membership`
SELECT id AS 'membership_type_id', id_random AS 'membership_type_id_random'
FROM `membership_type` AS `membership_type`
WHERE {sql_where_for_obj_type}
{sql_limit}
"""
# This will return a list if selecting by account ID
membership_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
if isinstance(membership_obj_result, dict):
membership_id = membership_obj_result.get('membership_id', None)
membership_obj = load_membership_obj(
membership_id=membership_id,
inc_membership_profile=inc_membership_profile,
inc_membership_cfg=inc_membership_cfg,
inc_extended_profile=inc_extended_profile,
inc_person=inc_person,
inc_user=inc_user,
membership_type_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
if isinstance(membership_type_obj_result, dict):
membership_type_id = membership_type_obj_result.get('membership_type_id', None)
membership_type_obj = load_membership_type_obj(
membership_type_id = membership_type_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
data = membership_obj
elif isinstance(membership_obj_result, list):
membership_obj_li = []
for membership_obj in membership_obj_result:
membership_id = membership_obj.get('membership_id', None)
membership_obj_li.append(
load_membership_obj(
membership_id=membership_id,
inc_membership_profile=inc_membership_profile,
inc_membership_cfg=inc_membership_cfg,
inc_extended_profile=inc_extended_profile,
inc_person=inc_person,
inc_user=inc_user,
data = membership_type_obj
elif isinstance(membership_type_obj_result, list):
membership_type_obj_li = []
for membership_type_obj in membership_type_obj_result:
membership_type_id = membership_type_obj.get('membership_type_id', None)
membership_type_obj_li.append(
load_membership_type_obj(
membership_type_id = membership_type_id,
inc_membership_member_profile = inc_membership_member_profile,
inc_membership_cfg = inc_membership_cfg,
inc_extended_profile = inc_extended_profile,
inc_person = inc_person,
inc_user = inc_user,
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
)
data = membership_obj_li
data = membership_type_obj_li
else:
log.debug(membership_obj_result)
log.debug(membership_type_obj_result)
return mk_resp(data=None, status_code=404) # Not Found
return mk_resp(data=data)
# ### BEGIN ### API Membership ### get_membership_obj() ###
# Working well as of 2021-06-04. Using as a template for other routes.
@router.get('/{membership_id}', response_model=Resp_Body_Base)
async def get_membership_obj(
membership_id: str = Query(..., min_length=1, max_length=22),
# ### BEGIN ### API Membership Type ### get_membership_type_obj() ###
# Working well as of 2021-06-21. Using as a template for other routes.
@router.get('/{membership_type_id}', response_model=Resp_Body_Base)
async def get_membership_type_obj(
membership_type_id: str = Query(..., min_length=1, max_length=22),
enabled: str = 'enabled', # For now this covers any included objects or object lists
limit: int = 500, # For now this covers any included objects or object lists
inc_address: bool = False, # Per member
@@ -191,7 +191,7 @@ async def get_membership_obj(
inc_membership_cfg: bool = False,
inc_membership_group_list: bool = False, # Per member
inc_membership_member_list: bool = False,
inc_membership_profile: bool = False, # Per member
inc_membership_member_profile: bool = False, # Per member
inc_organization: bool = False, # Per member
inc_person: bool = False, # Per member
inc_product: bool = False, # Per member
@@ -204,38 +204,39 @@ async def get_membership_obj(
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if membership_id := redis_lookup_id_random(record_id_random=membership_id, table_name='membership'): pass
if membership_type_id := redis_lookup_id_random(record_id_random=membership_type_id, table_name='membership_type'): pass
else:
return mk_resp(data=None, status_code=404)
if membership_obj := load_membership_obj(
membership_id = membership_id,
enabled = enabled,
# model_as_dict = model_as_dict,
limit = limit,
inc_address = inc_address,
inc_contact = inc_contact,
inc_membership_cfg = inc_membership_cfg,
inc_membership_group_list = inc_membership_group_list,
inc_membership_member_list = inc_membership_member_list,
inc_membership_profile = inc_membership_profile,
inc_organization = inc_organization,
inc_person = inc_person,
inc_product = inc_product,
inc_product_list = inc_product_list,
inc_user = inc_user,
):
# membership_dict = membership_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
if membership_type_result := load_membership_type_obj(
membership_type_id = membership_type_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict, # NOTE: returning model as a dict
enabled = enabled,
inc_address = inc_address,
inc_contact = inc_contact,
inc_membership_cfg = inc_membership_cfg,
inc_membership_group_list = inc_membership_group_list,
inc_membership_member_list = inc_membership_member_list,
inc_membership_member_profile = inc_membership_member_profile,
inc_organization = inc_organization,
inc_person = inc_person,
inc_product = inc_product,
inc_product_list = inc_product_list,
inc_user = inc_user,
):
pass
else:
return mk_resp(data=False, status_code=400) # Bad Request
return mk_resp(data=membership_obj)
# ### END ### API Membership ### get_membership_obj() ###
return mk_resp(data=membership_type_result)
# ### END ### API Membership ### get_membership_type_obj() ###
@router.get('/{obj_id}', response_model=Resp_Body_Base)
async def get_membership_obj_old(
async def get_membership_type_obj_old(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
@@ -244,7 +245,7 @@ async def get_membership_obj_old(
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_type = 'membership_type'
result = get_obj_template(
obj_type=obj_type,
obj_id=obj_id,
@@ -255,14 +256,14 @@ async def get_membership_obj_old(
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
async def delete_membership_obj(
async def delete_membership_type_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_type = 'membership_type'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,

View File

@@ -104,7 +104,7 @@ async def get_product_obj_li(
sql_for_obj_type = f"""`product`.for_type = :for_obj_type AND `product`.for_id = :for_obj_id"""
else: sql_for_obj_type = ''
if prod_type in ['event', 'event_option', 'membership', 'fundraising']:
if prod_type in ['event', 'event_option', 'event_registration', 'fundraising', 'membership_group', 'membership_type']:
data['type_name'] = prod_type
sql_product_type = f"""AND product.type_name = :type_name"""