| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 
							- import sqlmodel
 
- from .user import user
 
- from .user import user_builder
 
- from .password import password
 
- class user_loader(sqlmodel.Session):
 
-     def login(self, nick: str, secret: str) -> user | None:
 
-         """
 
-         This get new user by nick and password. If user does not exists,
 
-         then return None. It also return None when user password is not
 
-         correct.
 
-         nick: str - Nick of the user
 
-         secret: str - Password of the user
 
-         return: user | None - Logged user, or None when not exists
 
-         """
 
-         result = self.get_by_nick(nick)
 
-         if result is None:
 
-             return None
 
-         if not password(secret).validate(result.password):
 
-             return None
 
-         return result
 
-     def register(self, target: user) -> bool:
 
-         """
 
-         This function register new user. It also check that user with given
 
-         apikey or nick not exists. If user had been created, then return True.
 
-         When something went wront, return False.
 
-         target: user - User to register in database
 
-         return: bool - True when registered new user, False when failed
 
-         """
 
-         if target.id is not None:
 
-             return False
 
-         if target.apikey is None or target.nick is None:
 
-             return False
 
-         if target.password is None:
 
-             return False
 
-         if self.nick_in_use(target.nick):
 
-             return False
 
-         if self.apikey_in_use(target.apikey):
 
-             return False
 
-         self.add(target)
 
-         self.commit()
 
-         self.refresh(target)
 
-         return True
 
-     def unregister(self, target: user) -> bool:
 
-         """
 
-         This function remove user from database.
 
-         target: user - User to remove from database
 
-         return: bool - True when removed, Falsd when something failed
 
-         """
 
-         if not self.is_registered(target):
 
-             return False
 
-         self.delete(target)
 
-         self.commit()
 
-         return True
 
-     def save(self, target: user) -> bool:
 
-         """
 
-         This function save already registered user to database, after changes.
 
-         target: user - User to save
 
-         return: bool - True when saved successfull, False when failed
 
-         """
 
-         if not self.is_registered(user):
 
-             return False
 
-         self.add(target)
 
-         self.commit()
 
-         self.refresh(target)
 
-         return True
 
-     def nick_in_use(self, nick: str) -> bool:
 
-         """
 
-         This function check that nick is already in use.
 
-         nick: str - Nick to check
 
-         return: bool - True when nick in use, False if not
 
-         """
 
-         return self.get_by_nick(nick) is not None
 
-     def get_by_apikey(self, apikey: str) -> user | None:
 
-         """
 
-         This get user from database by apikey, or return None when not exists.
 
-         apikey: str - Apikey of the user to load
 
-         return: user | None - User with given apikey, or none when not exists
 
-         """
 
-         query = sqlmodel.select(user).where(user.apikey == apikey).limit(1)
 
-         result = self.exec(query)
 
-         return result.first()
 
-     def apikey_in_use(self, apikey: str) -> bool:
 
-         """
 
-         This function check that apikey is already in use.
 
-         apikey: str - Apikey to check
 
-         return: bool - True when apikey is in use or False when not
 
-         """
 
-         return self.get_by_apikey(apikey) is not None
 
-     def get_by_nick(self, nick: str) -> user | None:
 
-         """
 
-         This get user from database by nick.
 
-         nick: str - Nick of the user to load
 
-         return: user | None - Loaded user or None when not exists.
 
-         """
 
-         query = sqlmodel.select(user).where(user.nick == nick).limit(1)
 
-         result = self.exec(query)
 
-         return result.first()
 
-     def get_by_id(self, id: int) -> user | None:
 
-         """
 
-         This function select user from database by ID.
 
-         id: int - ID of the user to select
 
-         return: user | None - Selected user or None when not exists
 
-         """
 
-         query = sqlmodel.select(user).where(user.id == id).limit(1)
 
-         result = self.exec(query)
 
-         return result.first()
 
-     def is_registered(self, target: user) -> bool:
 
-         """
 
-         This function check that user is registered.
 
-         target: user - User to check
 
-         return: bool - True when user is registered, False when not
 
-         """
 
-         if target.id is None:
 
-             return False
 
-         return self.get_by_id(target.id) is not None
 
 
  |