#### Application Draft #### Token (Save AS) => User => Employee => Menu + User ID + People ID + User Info + Employee ID + Request [IP + header] + List of reachable Endpoint Codes [Array] + CompanyId + CompanyUUID + DutyId + DutyUUID [duty_id] + Priority ID, Priority Code [priority_id ,priority_code] Company & Customer [Common Attributes] o User o People --- Customer [Structure] Build + BuildPart + is_rentable = True (Life Space) is_rentable = False (Non-life Space) LivingSpace [Property] + // a human living in BuildPart in a given timeline LivingSpace Branches Property[Owner] + Property[Tenant] + Financial Assets + --- Company [Gives Service] Company + Employee + Company Responsiablity = Company[Employee] => Group[Customer] --- Services [Receives Services] + Property Renovation Dues [Customer Financial Assets ] + Property Goverment Tax Dues [Customer Financial Assets ] + Property Building Dues [Customer Financial Assets ] + Heating Systems [HAG] Optional Extra tutu + Cooling Systems [HAG] + Landscape Systems [HAG] User Logins: 1. Company[Employee] 2. Property[Tenant] 3. Property[Owner] - Primary Company Schema - # Primary Company Roles # SystemAdmin [Static] [Root Manager] [Application's Primary Management Office Employee] + Accesses all role and priviliges maintains management Example: Groot => User can manage all access and permissions, access rules can not be manupilated or deleted SystemUser [Static] < SystemAdmin + System storage and services are maintained by this role - Can not reach any personel data in any case I. Database [Database Manager] II. Network [Network Manager] III. Application Services [Application Manager] Example: => IT Department of manager [Primary Company] [System Admin] => SystemAdmin99 [People] [Database Manager] => SystemUser96 [People] [Network Manager] => SystemUser97 [People] [Application Manager] => SystemUser98 [People] for each company: * Creates Company: [Company] = ABC Company * Creates Employee: [Owner] & [SuperUser] = Owner & SuperUser * Assigns Employee to Company: ABC Company Owner & ABC Company SuperUser * Creates People: [People] = Jonathan * Assigns People to Employee: [People] Jonathan -> [Employee] Owner = ABC Company Owner Jonathan // if Owner==None: ilk atanan superuser=Owner [Application Manager] => Company => Employee => People - API - // APi has primary company in its default settings # Company Employee # [Application Manager] Actions Employee > Owner > People 1 Employee > SuperUser > People 1 Owner [Static] < [Application Manager] Johantan * Can receive Access Token[Login] * [Application Manager] => with SystemAdmin approval - [Data] Can NOT manupilate data 4ex Change company info - [Employee] Can create any role or permissions without any approval in its [Company] SuperUser [Static] < [Application Manager] Johantan * Can receive Access Token[Login] * [Application Manager] => SystemAdmin approval + [Employee] Can create any role or permissions without any approval in its [Company] + [Data] Can manupilate data 4ex Change company info - [Company] Can only receive [Data] to its own company [ReadOnly] - SuperUser -> can grant User SuperUser => SystemAdmin approval [SuperUser] => Employee => Rules&Restrictions User: [Dynamic] < [Application Manager] // Defined Role 4ex [SuperUser] => access right [Login] = Access Token API connect Annotations: - When [SuperUser] creates a [Employee] approval=False until [Owner] approval & [Application Manager] sets approval=True - Simult Test Algorith Codelanacak !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Crud Collection'da mutlaka expire ile ilgili bi function olacak - filter listlerin active, delete, regular(active==True and delete==False) function ayrı olacak - create action lar BaseModellerin içinde olacak ya da (Optional) create, update rule based Inhert kulllan - Pydanticler model_dump ve excluded_dump olarak inhr. - Responselar herbiri Response status code, message, completed, data şeklinde olacak - Create a initilizer with compose yaml. - Cache ip address to avoid unnecessary request to Api[IP] Build -> Data Financial Assets -> Data Personal Info -> People Company A -> Company B -> Company C Company B -> Company D Company B -> Company E Company B -> Company Z score A > B > C evyos A ankara A ayranci C Company 1.Company A 2.Company B 3.Company C 4.Company D 5.Company E 6.Company F Organization Cluster 1. Evyos Evyos Organizasyonu 385 0 2. Ankara Evyos Organizasyonu 385 1 3. Ayrancı Evyos Organizasyonu 385 2 4. BEsat Evyos Organizasyonu 385 2 5. KEsat Evyos Organizasyonu 385 2 6. Keklik Evyos Organizasyonu 385 3 7. İlker Evyos Organizasyonu 385 3 8. İstanbul Evyos Organizasyonu 385 1 9. Kayseri Evyos Organizasyonu 385 2 READ => company_id IN (2, 3, 4, 5, 6, 7) WRITE => company_id IN (2) READ => build_id IN (22, 333, 4444, 555, 6, 7) WRITE => company_id IN (2) Employee id company_id employee 1 1 Genel Mudur Company A 2 1 Bekçi Company A 3 2 Genel Mudur Company B 4 2 Bekçi Company B ##### Access to data ##### Role based data access-> # Information Data Block # Building Information Data -> Service Taker Company Information Data -> Service Giver # Offical Data Block # Building Financial Data -> Service Taker Company Financial Data -> Service Giver #### Summary #### Maximum amount of building a employee can be responsiable of? 50 Alg: Duty(Person) -> Person = User Access Token (Service Giver) Company R-> Department R-> Duty R-> Employee R-> Person (Service Taker) Company R-> Building R-> Person Service Giver: Company (related to) Job (related to) Employee (related to) Person This flow indicates a hierarchical relationship where each entity is related to the next. Company: The organization providing the service. Duty: Specific roles or tasks within the company that are related to providing the service. Employee: The individual performing the job-related tasks within the company. Person: The individual as a person, highlighting the human element of the employee. Service Taker: Company (related to) Job (related to) Employee (related to) Building This flow indicates a hierarchical relationship where each entity is related to the next, but with a different end point. Company: The organization receiving the service. Duty: Specific roles or tasks within the company that are related to managing or utilizing the service. Employee: The individual performing the job-related tasks within the company. Building: The physical location or facility where the service is utilized or managed. duty_id = mapped_column(ForeignKey("duty.id"), nullable=False) owner_id = mapped_column(ForeignKey("company.id"), nullable=False) X member_id = mapped_column(ForeignKey("company.id"), nullable=False) parent_id = mapped_column(ForeignKey("company.id"), nullable=False) relationship_type = mapped_column(String, nullable=False) child_count = mapped_column(Integer) X company duty_id ? Evyos GM -< Ankara GM Ayrancı GM select query= Company Sub #### Filters #### Add extra query to Crud: { "company_id_in": @Redis[Array], "build_id_in": @Redis[Array], "employee_id": @Redis[Array], } ------------------------------------------------------------------------------- # Query Pos. o What are the employee branch? T - Company filtereleyerek X + Mongo Db den brach ı cekerek o What are sub companies under certain company_id? X - CompanyRelationship Table like + Mongo Db den brach ı cekerek o Who are my employess [Personel Info]? EmployeeRelationship Table Department -> Duty -> Employee o What buildings are in my responsibilty? BuildingRelationship Table o What are certain debts of Build Parts? CompanyRelationship Table ilke o Iban and financial informations of Buildings? AccountingRelationship Table ilke o Salaries of a group of Employees? X o Duty information of a group of Employees? X o List Decision Book Items of a build part? Build R-> Decision Book Responsiable of related Building Employee Query if Build view yetkisi varsa -> Decision Book o Living Space info of a certian person? Responsiable of related Building Living Space -> Person Detail Infop o Which build parts I am responsiable of? Person -> Build Parts Query employee -> Building o Address of a person? Query employee -> Building o Email, phone personal info of a employee? Brach Company ------------------------------------------------------------------------------- User[Person] -> Employee Salaries Table data User Company[Employee] [Table]Company2BuildingRelationship company_id build_id responsiable 1 3 True 2 3 False Company2BuildingRelationship: Are these users of this company are responsiable from this building. [Table]Company2EmployeeRelationship: company_id employee_id 1 2 1 3 [Table]Company2CompanyRelationship: 1EVYOS 2Ankara 3Besat 4Ayrancı 5Dikmen 6Çayyolu 7Beysukent 8OsmanMah 9NecatiMah 2Ankara -> 3Besat 4Ayrancı 5Dikmen 6Çayyolu 7Beysukent -> 8OsmanMah 9NecatiMah Top Hiercacy: ADD field: top_hiercacy_companies: id: 1, uuid: 1a1a51bd-67f5-4f85-bd7c-1edb6afdaa7e Evyos Ask for branch ??? Update a branch ??? Delete a branch ??? Carry branch ??? Get "18aa001a-6878-4d39-bc21-0e63ba33beff" -> carry to "1a1a51bd-67f5-4f85-bd7c-1edb6afdaa7e" DELETE -> INSERT Go to mongo collection of top_hiercacy_company -------------------------------------------------------------------------------- [Table]Company2CompanyRelationship: ??? Branch owner_company_id member_company_id 1 2 2 3 3 4 1 5 1 6 class CompanyRelationship(CrudCollection): """ CompanyRelationship class based on declarative_base and CrudCollection via session """ __tablename__ = "company_relationship" __exclude__fields__ = [] duty_id = mapped_column(ForeignKey("duty.id"), nullable=False) owner_id = mapped_column(ForeignKey("company.id"), nullable=False) member_id = mapped_column(ForeignKey("company.id"), nullable=False) parent_id = mapped_column(ForeignKey("company.id"), nullable=False) child_count = mapped_column(Integer) json_text = mapped_column(String) relationship_type = mapped_column(String, nullable=False) Mehmet Karatay > Javascript -------------------------------------------------------------------------------- EmployeeRelationship Table X and Y Employee Employee -> Relationship # Bindings of Queries # Buildings [Decision Books, Project Books] 2 Resp. Companies [Duty, Departments] 2 Resp. Employees [Salaries, People] 2 Resp. Accounts [Iban, Debits] 2 Resp. People [LivingSpace, Users, Addresses] 2 Resp. Role = Company + Job Employee = Role + People Employee R-> Employee Employee R-> AccessRule ??? # Bindings of Actions # INSERT -> Res? X UPDATE -> Res? X SELECT -> Res? | DELETE -> Res? ACTIVATE -> Res? DESTROY -> Res? id employee_id restrict_id by_who 1 2 3 2 2 2 4 2 3 2 5 2 1 -7 Genel Mudur Permissions A | 1 SuperUser B | 2 Sub SuperUser C | 3 Sub Sub SuperUser A1 -> B2 -> C3 Many to Many 1 2