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

@@ -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()