39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
from sqlalchemy import BigInteger
|
|
from sqlalchemy import Column
|
|
from sqlmodel import create_engine
|
|
from sqlmodel import Field
|
|
from sqlmodel import Relationship
|
|
from sqlmodel import Session
|
|
from sqlmodel import SQLModel
|
|
|
|
from app.core.config import config
|
|
|
|
from .links import ItemUserLink
|
|
|
|
|
|
class User(SQLModel, table=True):
|
|
id: int = Field(sa_column=Column(BigInteger(), primary_key=True))
|
|
username: str = Field(nullable=False)
|
|
events: list['Event'] = Relationship(back_populates='users')
|
|
items: list['Item'] = Relationship(
|
|
back_populates='assigned_to', link_model=ItemUserLink
|
|
)
|
|
transactions: list['Transaction'] = Relationship(back_populates='payer')
|
|
|
|
async def get_or_create_user(self):
|
|
engine = create_engine(url=config.DATABASE_URL)
|
|
with Session(engine) as session:
|
|
user = session.get(User, self.id)
|
|
|
|
if not user:
|
|
user = User(
|
|
id=self.id,
|
|
username=self.username,
|
|
)
|
|
session.add(user)
|
|
session.commit()
|
|
|
|
session.refresh(user)
|
|
|
|
return user
|