internal.auth.creation
Creates seller and consumer entities.
1"""Creates seller and consumer entities.""" 2 3from pydantic import BaseModel, EmailStr, SecretStr 4from sqlalchemy.ext.asyncio import AsyncConnection 5 6from internal.queries.admin import AsyncQuerier as AdminQuerier 7from internal.queries.admin import CreateAdminParams 8from internal.queries.consumer import AsyncQuerier as ConsumerQuerier 9from internal.queries.consumer import CreateConsumerParams 10from internal.queries.models import Admin, Consumer, Seller, UserRole 11from internal.queries.seller import AsyncQuerier as SellerQuerier 12from internal.queries.seller import CreateSellerParams 13from internal.queries.user import AsyncQuerier as UserQuerier 14from internal.queries.user import CreateUserParams, CreateUserRow 15 16from .security import hash_password 17 18 19async def create_user( 20 username: str, 21 email: EmailStr, 22 password: SecretStr, 23 role: UserRole, 24 conn: AsyncConnection, 25) -> CreateUserRow: 26 """Create and insert base user entry. 27 28 Args: 29 username: username for user 30 email: users email 31 password: users plain text password 32 role: users role, seller or consumer 33 conn: database connection 34 35 Returns: 36 row from database with created users information 37 38 Raises: 39 ValueError: if database failed to create user 40 """ 41 pw_hash = hash_password(password.get_secret_value()) 42 user = await UserQuerier(conn).create_user( 43 CreateUserParams(username=username, email=email, pw_hash=pw_hash, role=role) 44 ) 45 if not user: 46 raise ValueError("Failed to create user") 47 return user 48 49 50class CreateConsumerForm(BaseModel): 51 """Form with information to create consumer.""" 52 53 username: str 54 email: EmailStr 55 password: SecretStr 56 first_name: str 57 last_name: str 58 59 60async def create_consumer(form: CreateConsumerForm, conn: AsyncConnection) -> Consumer: 61 """Create and insert consumer and user entry. 62 63 Args: 64 form: form with consumers information 65 conn: database connection 66 67 Returns: 68 row with created consumers information from the database 69 70 Raises: 71 ValueError: if database failed to create consumer 72 """ 73 user = await create_user( 74 form.username, form.email, form.password, UserRole.CONSUMER, conn 75 ) 76 consumer = await ConsumerQuerier(conn).create_consumer( 77 CreateConsumerParams( 78 user_id=user.user_id, fname=form.first_name, lname=form.last_name 79 ) 80 ) 81 if not consumer: 82 raise ValueError("Failed to create consumer") 83 return consumer 84 85 86class CreateSellerForm(BaseModel): 87 """Form with information to create seller.""" 88 89 username: str 90 email: EmailStr 91 password: SecretStr 92 seller_name: str 93 address_line1: str 94 address_line2: str | None = None 95 city: str 96 post_code: str 97 region: str | None = None 98 country: str 99 latitude: float 100 longitude: float 101 102 103async def create_seller(form: CreateSellerForm, conn: AsyncConnection) -> Seller: 104 """Creates and inserts seller and user entry. 105 106 Args: 107 form: form with information for seller creation 108 conn: database connection 109 110 Returns: 111 row with created sellers information from the database 112 113 Raises: 114 ValueError: database failed to create a seller 115 """ 116 user = await create_user( 117 form.username, form.email, form.password, UserRole.SELLER, conn 118 ) 119 seller = await SellerQuerier(conn).create_seller( 120 CreateSellerParams( 121 user_id=user.user_id, 122 seller_name=form.seller_name, 123 address_line1=form.address_line1, 124 address_line2=form.address_line2, 125 city=form.city, 126 post_code=form.post_code, 127 region=form.region, 128 country=form.country, 129 latitude=form.latitude, 130 longitude=form.longitude, 131 ) 132 ) 133 if not seller: 134 raise ValueError("Failed to create seller") 135 return seller 136 137 138class CreateAdminForm(BaseModel): 139 """Form with information to create admin.""" 140 141 username: str 142 email: EmailStr 143 password: SecretStr 144 first_name: str 145 last_name: str 146 147 148async def create_admin(form: CreateAdminForm, conn: AsyncConnection) -> Admin: 149 """Create and insert admin and user entry. 150 151 Args: 152 form: form with admin information 153 conn: database connection 154 155 Returns: 156 row with created admin information from the database 157 158 Raises: 159 ValueError: if database failed to create admin 160 """ 161 user = await create_user( 162 form.username, form.email, form.password, UserRole.ADMIN, conn 163 ) 164 admin = await AdminQuerier(conn).create_admin( 165 CreateAdminParams( 166 user_id=user.user_id, fname=form.first_name, lname=form.last_name 167 ) 168 ) 169 if not admin: 170 raise ValueError("Failed to create admin") 171 return admin
async def
create_user( username: str, email: pydantic.networks.EmailStr, password: pydantic.types.SecretStr, role: internal.queries.models.UserRole, conn: sqlalchemy.ext.asyncio.engine.AsyncConnection) -> internal.queries.user.CreateUserRow:
20async def create_user( 21 username: str, 22 email: EmailStr, 23 password: SecretStr, 24 role: UserRole, 25 conn: AsyncConnection, 26) -> CreateUserRow: 27 """Create and insert base user entry. 28 29 Args: 30 username: username for user 31 email: users email 32 password: users plain text password 33 role: users role, seller or consumer 34 conn: database connection 35 36 Returns: 37 row from database with created users information 38 39 Raises: 40 ValueError: if database failed to create user 41 """ 42 pw_hash = hash_password(password.get_secret_value()) 43 user = await UserQuerier(conn).create_user( 44 CreateUserParams(username=username, email=email, pw_hash=pw_hash, role=role) 45 ) 46 if not user: 47 raise ValueError("Failed to create user") 48 return user
Create and insert base user entry.
Arguments:
- username: username for user
- email: users email
- password: users plain text password
- role: users role, seller or consumer
- conn: database connection
Returns:
row from database with created users information
Raises:
- ValueError: if database failed to create user
class
CreateConsumerForm(pydantic.main.BaseModel):
51class CreateConsumerForm(BaseModel): 52 """Form with information to create consumer.""" 53 54 username: str 55 email: EmailStr 56 password: SecretStr 57 first_name: str 58 last_name: str
Form with information to create consumer.
async def
create_consumer( form: CreateConsumerForm, conn: sqlalchemy.ext.asyncio.engine.AsyncConnection) -> internal.queries.models.Consumer:
61async def create_consumer(form: CreateConsumerForm, conn: AsyncConnection) -> Consumer: 62 """Create and insert consumer and user entry. 63 64 Args: 65 form: form with consumers information 66 conn: database connection 67 68 Returns: 69 row with created consumers information from the database 70 71 Raises: 72 ValueError: if database failed to create consumer 73 """ 74 user = await create_user( 75 form.username, form.email, form.password, UserRole.CONSUMER, conn 76 ) 77 consumer = await ConsumerQuerier(conn).create_consumer( 78 CreateConsumerParams( 79 user_id=user.user_id, fname=form.first_name, lname=form.last_name 80 ) 81 ) 82 if not consumer: 83 raise ValueError("Failed to create consumer") 84 return consumer
Create and insert consumer and user entry.
Arguments:
- form: form with consumers information
- conn: database connection
Returns:
row with created consumers information from the database
Raises:
- ValueError: if database failed to create consumer
class
CreateSellerForm(pydantic.main.BaseModel):
87class CreateSellerForm(BaseModel): 88 """Form with information to create seller.""" 89 90 username: str 91 email: EmailStr 92 password: SecretStr 93 seller_name: str 94 address_line1: str 95 address_line2: str | None = None 96 city: str 97 post_code: str 98 region: str | None = None 99 country: str 100 latitude: float 101 longitude: float
Form with information to create seller.
async def
create_seller( form: CreateSellerForm, conn: sqlalchemy.ext.asyncio.engine.AsyncConnection) -> internal.queries.models.Seller:
104async def create_seller(form: CreateSellerForm, conn: AsyncConnection) -> Seller: 105 """Creates and inserts seller and user entry. 106 107 Args: 108 form: form with information for seller creation 109 conn: database connection 110 111 Returns: 112 row with created sellers information from the database 113 114 Raises: 115 ValueError: database failed to create a seller 116 """ 117 user = await create_user( 118 form.username, form.email, form.password, UserRole.SELLER, conn 119 ) 120 seller = await SellerQuerier(conn).create_seller( 121 CreateSellerParams( 122 user_id=user.user_id, 123 seller_name=form.seller_name, 124 address_line1=form.address_line1, 125 address_line2=form.address_line2, 126 city=form.city, 127 post_code=form.post_code, 128 region=form.region, 129 country=form.country, 130 latitude=form.latitude, 131 longitude=form.longitude, 132 ) 133 ) 134 if not seller: 135 raise ValueError("Failed to create seller") 136 return seller
Creates and inserts seller and user entry.
Arguments:
- form: form with information for seller creation
- conn: database connection
Returns:
row with created sellers information from the database
Raises:
- ValueError: database failed to create a seller
class
CreateAdminForm(pydantic.main.BaseModel):
139class CreateAdminForm(BaseModel): 140 """Form with information to create admin.""" 141 142 username: str 143 email: EmailStr 144 password: SecretStr 145 first_name: str 146 last_name: str
Form with information to create admin.
async def
create_admin( form: CreateAdminForm, conn: sqlalchemy.ext.asyncio.engine.AsyncConnection) -> internal.queries.models.Admin:
149async def create_admin(form: CreateAdminForm, conn: AsyncConnection) -> Admin: 150 """Create and insert admin and user entry. 151 152 Args: 153 form: form with admin information 154 conn: database connection 155 156 Returns: 157 row with created admin information from the database 158 159 Raises: 160 ValueError: if database failed to create admin 161 """ 162 user = await create_user( 163 form.username, form.email, form.password, UserRole.ADMIN, conn 164 ) 165 admin = await AdminQuerier(conn).create_admin( 166 CreateAdminParams( 167 user_id=user.user_id, fname=form.first_name, lname=form.last_name 168 ) 169 ) 170 if not admin: 171 raise ValueError("Failed to create admin") 172 return admin
Create and insert admin and user entry.
Arguments:
- form: form with admin information
- conn: database connection
Returns:
row with created admin information from the database
Raises:
- ValueError: if database failed to create admin