postgres EndpointRestriction(CrudCollection): """ Initiliaze Endpoint Restriction on default """ __tablename__ = "endpoint_restriction" __exclude__fields__ = [] endpoint_name = mapped_column(String, server_default="") endpoint_method = mapped_column(String, server_default="") endpoint_desc = mapped_column(String, server_default="") endpoint_code = mapped_column(String, server_default="", unique=True) endpoint_priority = mapped_column(SmallInteger, server_default="0") postgres Priority(CrudCollection): """ Initiliaze at api roles on default 4ex. { "0": "User", "4": "Owner", "8": "Tenant", "12": "Freelancer", "16": "Tech", "78": "Super User", "96": "Database Manager", "97": "Network Manager", "98": "Application Manager", "99": "System Admin", } """ __tablename__ = "priority" __exclude__fields__ = [] priority_code = mapped_column(SmallInteger, server_default="0") priority_desc = mapped_column(String, server_default="") postgres User(CrudCollection): """ Application User frame to connect to api with assigned token based HTTP connection """ __tablename__ = "user" __exclude__fields__ = [ "hash_password", "password_token", "expiry_begins" ] user_tag = mapped_column(String(64), server_default="", comment="User Tag") email = mapped_column(String(128), server_default="") phone_number = mapped_column(String, server_default="") avatar = mapped_column(String, server_default="") hash_password = mapped_column(String(256), server_default="") password_token = mapped_column(String(256), server_default="") remember_me = mapped_column(Boolean, server_default="0") expires_day = mapped_column(Integer, server_default=env.PASSWORD_EXPIRE_DAY, comment="Password Expires in Days") // Password must be changed by user in [expires_day] days expiry_begins = mapped_column(TIMESTAMP, server_default=func.now()) priority_id = mapped_column(ForeignKey("priority.id"), nullable=False) person_id = mapped_column(ForeignKey("people.id"), nullable=False) priority: Mapped["Priority"] = relationship("Priority", back_populates="user", foreign_keys=[priority_id]) @property def expiry_ends(): return expiry_begins + expires_day @property def is_super_user(): return bool(self.priority.priority_code == 78) @property def is_user(): return bool(self.priority.priority_code == 0) postgres Person(CrudCollection): """ People that are related to users in application """ __tablename__ = "person" __exclude__fields__ = [] firstname = mapped_column(String(24), nullable=False, comment="First Name") surname = mapped_column(String(24), nullable=False, comment="Surname") middle_name = mapped_column(String(16), server_default="") sex_code = mapped_column(String(1), nullable=False, comment="Sex Code") person_ref = Mapped[str] = mapped_column(String(24), server_default="") person_tag = mapped_column(String(64), server_default="") // ENCRYPT DATA father_name = mapped_column(String(24), server_default="") mother_name = mapped_column(String(24), server_default="") country_code = mapped_column(String(4), server_default="TR") national_identity_id = mapped_column(String(48), server_default="") birth_place = mapped_column(String(24), server_default="") birth_date = mapped_column(TIMESTAMP, server_default="1900-01-01") tax_no = mapped_column(String(48), server_default="") // ENCRYPT DATA class Company(CrudCollection): """ Company class based on declarative_base and CrudCollection via session formal_name = Government register name by offical public_name = Public registered name by User nick_name = Search by nickname, commercial_type = Tüzel veya birey """ __tablename__ = "company" __exclude__fields__ = ["is_blacklist", "is_commercial"] formal_name = mapped_column(String(64), nullable=False, comment="Formal Name") company_type = mapped_column(String(1), nullable=False, comment="Company Type") commercial_type = mapped_column( String(5), nullable=False, comment="Commercial Type" ) tax_no = mapped_column( String(48), index=True, unique=True, nullable=False, comment="Tax No" ) public_name = mapped_column(String(64)) nick_name = mapped_column(String(64)) default_lang_type = mapped_column(String(5), server_default="TR") default_money_type = mapped_column(String(5), server_default="TL") is_commercial = mapped_column(Boolean, server_default="False") is_blacklist = mapped_column(Boolean, server_default="False") official_address_id = mapped_column(ForeignKey("address.id")) parent_id = mapped_column(ForeignKey("company.id")) # Rule of Mongo Collection Creation # // To avoid data load for no-sql storage all collection must be created in a pattern of // mongo_collection_name = str(Company.uu_id()) + str(storage_reasoning) 4ex. : mongo_collection_name = str(Company.uu_id()) + str('UserPasswordHistory') // MongoCollectionBase = str(Company.uu_id()) [Company][info] -> [Company][info] -> [Company][info] -> [Company][info] Mongo MongoCollectionBase + Access: { } Mongo MongoCollectionBase + Domain: { "user_id": 1, "domain_tag": { ... }, } !! ADD domain_tag for user to name this domain -> so user can use domain with device that is saved Mongo MongoCollectionBase + PasswordHistory: { "user_id": 1, "password_history": [ ...{ "password_hashed": "", // String "tmstp": "" // TMSTP, } ], "access_history_detail": device_single_history } Mongo MongoCollectionBase + AccessHistory: // Last 60 History of a user login to application // ! add function retrieve_last() { "access_history": [ ...{ "platform": "", // String "agent": "", // String "last_seen": "", // TMSTP "remote_addr": "", // String "geo_location": "", // String "detail": {} // From ip retrieve api data } ], }