133 lines
4.5 KiB
Python
133 lines
4.5 KiB
Python
"""
|
|
Project: PARTS Website
|
|
Author: Edward Middleton-Smith
|
|
Precision And Research Technology Systems Limited
|
|
|
|
Technology: Business Objects
|
|
Feature: User Business Object
|
|
"""
|
|
|
|
# internal
|
|
from business_objects.base import Base
|
|
from business_objects.db_base import SQLAlchemy_ABC
|
|
import lib.argument_validation as av
|
|
from forms.forms import Form_Contact
|
|
from extensions import db
|
|
from helpers.helper_app import Helper_App
|
|
# external
|
|
from dataclasses import dataclass
|
|
from typing import ClassVar
|
|
|
|
|
|
class User(SQLAlchemy_ABC, Base):
|
|
NAME_ATTR_OPTION_VALUE: ClassVar[str] = Base.ATTR_ID_USER
|
|
NAME_ATTR_OPTION_TEXT: ClassVar[str] = 'email'
|
|
|
|
__tablename__ = 'PH_User'
|
|
__table_args__ = { 'extend_existing': True }
|
|
|
|
id_user = db.Column(db.Integer, primary_key=True)
|
|
id_user_auth0 = db.Column(db.String(255))
|
|
firstname = db.Column(db.String(255))
|
|
surname = db.Column(db.String(255))
|
|
email = db.Column(db.String(255))
|
|
is_email_verified = db.Column(db.Boolean)
|
|
is_super_user = db.Column(db.Boolean)
|
|
is_new = db.Column(db.Boolean)
|
|
|
|
def __init__(self):
|
|
self.id_user = 0
|
|
self.is_new = False
|
|
super().__init__()
|
|
|
|
def from_DB_user(query_row):
|
|
_m = 'User.from_DB_user'
|
|
user = User()
|
|
user.id_user = query_row[0]
|
|
user.id_user_auth0 = query_row[1]
|
|
user.firstname = query_row[2]
|
|
user.surname = query_row[3]
|
|
user.email = query_row[4]
|
|
user.is_email_verified = av.input_bool(query_row[5], 'is_email_verified', _m)
|
|
user.is_super_user = av.input_bool(query_row[9], 'is_super_user', _m)
|
|
user.is_new = av.input_bool(query_row[12], 'is_new', _m)
|
|
return user
|
|
|
|
@staticmethod
|
|
def from_json(json):
|
|
_m = 'User.from_json'
|
|
user = User()
|
|
if json is None: return user
|
|
Helper_App.console_log(f'{_m}\njson: {json}')
|
|
user.id_user = json['id_user']
|
|
user.id_user_auth0 = json['id_user_auth0']
|
|
user.firstname = json['firstname']
|
|
user.surname = json['surname']
|
|
user.email = json['email']
|
|
user.is_email_verified = av.input_bool(json['is_email_verified'], 'is_email_verified', _m)
|
|
user.is_super_user = av.input_bool(json['is_super_user'], 'is_super_user', _m)
|
|
Helper_App.console_log(f'user: {user}')
|
|
return user
|
|
|
|
@staticmethod
|
|
def from_json_auth0(json):
|
|
_m = 'User.from_json_auth0'
|
|
user = User()
|
|
if json is None: return user
|
|
Helper_App.console_log(f'{_m}\njson: {json}')
|
|
user_info = json['userinfo']
|
|
user.id_user = None
|
|
user.id_user_auth0 = user_info['sub']
|
|
user.firstname = None
|
|
user.surname = None
|
|
user.email = user_info['email']
|
|
user.is_email_verified = av.input_bool(user_info['email_verified'], 'is_email_verified', _m)
|
|
user.is_super_user = None
|
|
Helper_App.console_log(f'user: {user}')
|
|
return user
|
|
|
|
def to_json(self):
|
|
as_json = {
|
|
'id_user': self.id_user,
|
|
'id_user_auth0': self.id_user_auth0,
|
|
'firstname': self.firstname,
|
|
'surname': self.surname,
|
|
'email': self.email,
|
|
'is_email_verified': self.is_email_verified,
|
|
'is_super_user': self.is_super_user
|
|
}
|
|
Helper_App.console_log(f'as_json: {as_json}')
|
|
return as_json
|
|
|
|
def __repr__(self):
|
|
return f'''
|
|
id_user: {self.id_user}
|
|
id_user_auth0: {self.id_user_auth0}
|
|
firstname: {self.firstname}
|
|
surname: {self.surname}
|
|
email: {self.email}
|
|
is_email_verified: {self.is_email_verified}
|
|
is_super_user: {self.is_super_user}
|
|
'''
|
|
|
|
def get_is_logged_in(self):
|
|
return (self.id_user > 0 and self.id_user != Base.ID_USER_GUEST)
|
|
|
|
class User_Temp(db.Model, Base):
|
|
__tablename__ = 'Shop_User_Temp'
|
|
__table_args__ = { 'extend_existing': True }
|
|
id_user = db.Column(db.Integer, primary_key=True)
|
|
id_user_auth0 = db.Column(db.String(255))
|
|
firstname = db.Column(db.String(255))
|
|
surname = db.Column(db.String(255))
|
|
email = db.Column(db.String(255))
|
|
is_email_verified = db.Column(db.Boolean)
|
|
is_super_user = db.Column(db.Boolean)
|
|
id_currency_default = db.Column(db.Integer)
|
|
id_region_default = db.Column(db.Integer)
|
|
is_included_VAT_default = db.Column(db.Boolean)
|
|
# is_logged_in: bool
|
|
|
|
def __init__(self):
|
|
self.id_user = 0
|
|
super().__init__() |