33from datetime import datetime
44from typing import List
55
6- from sqlalchemy import String , DateTime , ForeignKey , Text , Table , Column , Date
6+ from sqlalchemy import String , DateTime , ForeignKey , Text , Table , Column
77from sqlalchemy .orm import mapped_column
88from sqlalchemy .orm import (
99 relationship ,
@@ -1674,7 +1674,9 @@ def __ne__(self, other):
16741674 id : Mapped [int ] = mapped_column (Integer , primary_key = True )
16751675 base_type : Mapped [str ] = mapped_column (String , default = "User" )
16761676 extras : Mapped [JSON ] = mapped_column (JSON , nullable = True , default = {})
1677+ user : Mapped [str ] = mapped_column (String , nullable = True )
16771678 username : Mapped [str ] = mapped_column (String , nullable = True )
1679+ email : Mapped [str ] = mapped_column (String , nullable = True )
16781680 name : Mapped [str ] = mapped_column (String , nullable = True )
16791681 state : Mapped [str ] = mapped_column (String , nullable = True )
16801682 locked : Mapped [bool ] = mapped_column (Boolean , nullable = True )
@@ -1684,20 +1686,17 @@ def __ne__(self, other):
16841686 is_admin : Mapped [bool ] = mapped_column (Boolean , nullable = True )
16851687 bio : Mapped [str ] = mapped_column (String , nullable = True )
16861688 location : Mapped [str ] = mapped_column (String , nullable = True )
1687- skype : Mapped [str ] = mapped_column (
1688- String , nullable = True
1689- ) # From Pydantic, though not in docs
1689+ skype : Mapped [str ] = mapped_column (String , nullable = True )
16901690 linkedin : Mapped [str ] = mapped_column (String , nullable = True )
16911691 twitter : Mapped [str ] = mapped_column (String , nullable = True )
16921692 discord : Mapped [str ] = mapped_column (String , nullable = True )
1693- github : Mapped [str ] = mapped_column (String , nullable = True )
16941693 website_url : Mapped [str ] = mapped_column (String , nullable = True )
16951694 organization : Mapped [str ] = mapped_column (String , nullable = True )
16961695 job_title : Mapped [str ] = mapped_column (String , nullable = True )
16971696 last_sign_in_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
16981697 confirmed_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
16991698 theme_id : Mapped [int ] = mapped_column (Integer , nullable = True )
1700- last_activity_on : Mapped [datetime ] = mapped_column (Date , nullable = True )
1699+ last_activity_on : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
17011700 color_scheme_id : Mapped [int ] = mapped_column (Integer , nullable = True )
17021701 projects_limit : Mapped [int ] = mapped_column (Integer , nullable = True )
17031702 current_sign_in_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
@@ -1709,10 +1708,6 @@ def __ne__(self, other):
17091708 private_profile : Mapped [bool ] = mapped_column (Boolean , nullable = True )
17101709 current_sign_in_ip : Mapped [str ] = mapped_column (String , nullable = True )
17111710 last_sign_in_ip : Mapped [str ] = mapped_column (String , nullable = True )
1712- namespace_id : Mapped [int ] = mapped_column (Integer , nullable = True )
1713- created_by_id : Mapped [int ] = mapped_column (
1714- Integer , ForeignKey ("users.id" ), nullable = True
1715- )
17161711 email_reset_offered_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
17171712 expires_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
17181713 access_level : Mapped [int ] = mapped_column (Integer , nullable = True )
@@ -1730,52 +1725,128 @@ def __ne__(self, other):
17301725 extra_shared_runners_minutes_limit : Mapped [int ] = mapped_column (
17311726 Integer , nullable = True
17321727 )
1733- is_auditor : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1734- using_license_seat : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1735- provisioned_by_group_id : Mapped [int ] = mapped_column (Integer , nullable = True )
1736- is_followed : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1737- plan : Mapped [str ] = mapped_column (String , nullable = True )
1738- trial : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1739- sign_in_count : Mapped [int ] = mapped_column (Integer , nullable = True )
1740- scim_identities = mapped_column (ARRAY (JSON ), nullable = True )
1741- # Relationships
1742- created_by : Mapped ["UserDBModel" ] = relationship (remote_side = [id ])
1743- identities : Mapped [List ["IdentityDBModel" ]] = relationship (back_populates = "user" )
1744- group_saml_identity : Mapped ["GroupSamlIdentityDBModel" ] = relationship (
1745- back_populates = "user"
1728+ membership_type : Mapped [str ] = mapped_column (String , nullable = True )
1729+ removable : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1730+ last_login_at : Mapped [datetime ] = mapped_column (DateTime , nullable = True )
1731+
1732+ created_by_id : Mapped [int ] = mapped_column (
1733+ Integer ,
1734+ ForeignKey ("users.id" ),
1735+ nullable = True ,
1736+ )
1737+ created_by : Mapped ["UserDBModel" ] = relationship (
1738+ "UserDBModel" , remote_side = [id ], back_populates = "created_users"
1739+ )
1740+
1741+ created_users : Mapped [List ["UserDBModel" ]] = relationship (
1742+ "UserDBModel" , back_populates = "created_by"
17461743 )
1744+ group_saml_identity : Mapped [List ["GroupSamlIdentityDBModel" ]] = relationship (
1745+ "GroupSamlIdentityDBModel" , back_populates = "user"
1746+ )
1747+
1748+ namespace_id : Mapped [int ] = mapped_column (
1749+ Integer ,
1750+ ForeignKey (
1751+ column = "namespaces.id" ,
1752+ name = "fk_user_namespace_id" ,
1753+ ),
1754+ nullable = True ,
1755+ )
1756+ namespace : Mapped ["NamespaceDBModel" ] = relationship (
1757+ "NamespaceDBModel" ,
1758+ back_populates = "user" ,
1759+ foreign_keys = [namespace_id ],
1760+ remote_side = "[NamespaceDBModel.id]" , # Specify the remote side of the relationship
1761+ )
1762+
17471763 deploy_tokens : Mapped [List ["DeployTokenDBModel" ]] = relationship (
17481764 back_populates = "user"
17491765 )
1766+
17501767 todos : Mapped [List ["ToDoDBModel" ]] = relationship (back_populates = "author" )
1751- merge_request_approvers : Mapped [List ["MergeApprovalsDBModel" ]] = relationship (
1752- back_populates = "approvers"
1768+ agents = relationship ("AgentsDBModel" , back_populates = "user" )
1769+ releases : Mapped [List ["ReleaseDBModel" ]] = relationship (back_populates = "author" )
1770+ access_levels : Mapped [List ["AccessLevelDBModel" ]] = relationship (
1771+ back_populates = "user"
1772+ )
1773+ approval_rules : Mapped [List ["ApprovalRuleDBModel" ]] = relationship (
1774+ "ApprovalRuleDBModel" ,
1775+ back_populates = "eligible_approvers" ,
1776+ foreign_keys = "[ApprovalRuleDBModel.eligible_approvers_id]" ,
17531777 )
1778+ # Relationships with MergeRequestDBModel
17541779 authored_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1755- back_populates = "author"
1780+ "MergeRequestDBModel" ,
1781+ back_populates = "author" ,
1782+ primaryjoin = "foreign(MergeRequestDBModel.author_id) == UserDBModel.id" ,
17561783 )
1757- assigned_merge_requests : Mapped [ "MergeRequestDBModel" ] = relationship (
1758- back_populates = "assignee"
1759- ) # For single assignee
1760- assigned_merge_requests_list : Mapped [ List [ "MergeRequestDBModel" ]] = relationship (
1761- secondary = "merge_request_assignees" , back_populates = "assignees"
1784+
1785+ assigned_merge_requests : Mapped [ List [ "MergeRequestDBModel" ]] = relationship (
1786+ "MergeRequestDBModel" ,
1787+ back_populates = "assignee" ,
1788+ primaryjoin = "foreign(MergeRequestDBModel.assignee_id) == UserDBModel.id" ,
17621789 )
1790+
1791+ assignee_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1792+ "MergeRequestDBModel" ,
1793+ secondary = merge_request_assignees , # Use the association table
1794+ back_populates = "assignees" ,
1795+ )
1796+
17631797 reviewed_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1764- secondary = "merge_request_reviewers" , back_populates = "reviewers"
1798+ "MergeRequestDBModel" ,
1799+ back_populates = "reviewer" ,
1800+ primaryjoin = "foreign(MergeRequestDBModel.reviewer_id) == UserDBModel.id" ,
1801+ )
1802+
1803+ reviewers_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1804+ "MergeRequestDBModel" ,
1805+ secondary = merge_request_reviewers , # Use the association table
1806+ back_populates = "reviewers" ,
17651807 )
1808+
17661809 merged_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1767- back_populates = "merged_by"
1810+ "MergeRequestDBModel" ,
1811+ back_populates = "merged_by" ,
1812+ primaryjoin = "foreign(MergeRequestDBModel.merged_by_id) == UserDBModel.id" ,
17681813 )
1814+
17691815 merge_user_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1770- back_populates = "merge_user"
1816+ "MergeRequestDBModel" ,
1817+ back_populates = "merge_user" ,
1818+ primaryjoin = "foreign(MergeRequestDBModel.merge_user_id) == UserDBModel.id" ,
1819+ )
1820+
1821+ approved_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1822+ "MergeRequestDBModel" ,
1823+ back_populates = "approved_by" ,
1824+ primaryjoin = "foreign(MergeRequestDBModel.approved_by_id) == UserDBModel.id" ,
17711825 )
1826+
17721827 closed_merge_requests : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1773- back_populates = "closed_by"
1828+ "MergeRequestDBModel" ,
1829+ back_populates = "closed_by" ,
1830+ primaryjoin = "foreign(MergeRequestDBModel.closed_by_id) == UserDBModel.id" ,
17741831 )
1775- owned_projects : Mapped [List ["ProjectDBModel" ]] = relationship (
1776- back_populates = "owner"
1832+
1833+ project_owner : Mapped [List ["ProjectDBModel" ]] = relationship (
1834+ "ProjectDBModel" ,
1835+ back_populates = "owner" ,
1836+ primaryjoin = "foreign(ProjectDBModel.owner_id) == UserDBModel.id" ,
1837+ )
1838+
1839+ project_creator : Mapped [List ["ProjectDBModel" ]] = relationship (
1840+ "ProjectDBModel" ,
1841+ back_populates = "creator" ,
1842+ primaryjoin = "foreign(ProjectDBModel.creator_id) == UserDBModel.id" ,
17771843 )
1778- jobs : Mapped [List ["JobDBModel" ]] = relationship (back_populates = "user" )
1844+ pipeline_schedules : Mapped [list ["PipelineScheduleDBModel" ]] = relationship (
1845+ "PipelineScheduleDBModel" ,
1846+ back_populates = "owner" ,
1847+ primaryjoin = "foreign(PipelineScheduleDBModel.owner_id) == UserDBModel.id" ,
1848+ )
1849+ jobs = relationship ("JobDBModel" , back_populates = "user" )
17791850 pipelines : Mapped [List ["PipelineDBModel" ]] = relationship (back_populates = "user" )
17801851 comments : Mapped [List ["CommentDBModel" ]] = relationship (back_populates = "author" )
17811852 commits : Mapped [List ["CommitDBModel" ]] = relationship (back_populates = "author" )
@@ -1788,13 +1859,40 @@ def __ne__(self, other):
17881859 closed_issues : Mapped [List ["IssueDBModel" ]] = relationship (
17891860 back_populates = "closed_by" , foreign_keys = "[IssueDBModel.closed_by_id]"
17901861 )
1862+ identities : Mapped [List ["IdentityDBModel" ]] = relationship (
1863+ back_populates = "user" , foreign_keys = "[IdentityDBModel.user_id]"
1864+ )
1865+ merge_request_approvers : Mapped [List ["MergeApprovalsDBModel" ]] = relationship (
1866+ "MergeApprovalsDBModel" ,
1867+ primaryjoin = "UserDBModel.id == foreign(MergeApprovalsDBModel.approvers_id)" ,
1868+ back_populates = "approvers" ,
1869+ )
17911870 deployments : Mapped [List ["LastDeploymentDBModel" ]] = relationship (
17921871 back_populates = "user"
17931872 )
17941873 deployables : Mapped [List ["DeployableDBModel" ]] = relationship (back_populates = "user" )
17951874 cluster_agents_created : Mapped [List ["ClusterAgentDBModel" ]] = relationship (
17961875 back_populates = "created_by_user"
17971876 )
1877+ github : Mapped [str ] = mapped_column (String , nullable = True )
1878+
1879+ namespace_id : Mapped [int ] = mapped_column (Integer , nullable = True )
1880+ is_auditor : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1881+ using_license_seat : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1882+ provisioned_by_group_id : Mapped [int ] = mapped_column (Integer , nullable = True )
1883+ is_followed : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1884+ plan : Mapped [str ] = mapped_column (String , nullable = True )
1885+ trial : Mapped [bool ] = mapped_column (Boolean , nullable = True )
1886+ sign_in_count : Mapped [int ] = mapped_column (Integer , nullable = True )
1887+ scim_identities = mapped_column (ARRAY (JSON ), nullable = True )
1888+ # Relationships
1889+ assigned_merge_requests_list : Mapped [List ["MergeRequestDBModel" ]] = relationship (
1890+ secondary = "merge_request_assignees" , back_populates = "assignees"
1891+ )
1892+
1893+ owned_projects : Mapped [List ["ProjectDBModel" ]] = relationship (
1894+ back_populates = "owner"
1895+ )
17981896
17991897
18001898# Namespace Model
0 commit comments