1
Fork 0
mirror of https://github.com/Steffo99/greed.git synced 2024-11-22 14:04:18 +00:00

Add working database code

This commit is contained in:
Steffo 2017-12-20 11:18:06 +01:00
parent c1e1684efd
commit 17371f00d3
WARNING! Although there is a key with this ID in the database it does not verify this commit! This commit is SUSPICIOUS.
GPG key ID: C27544372FBB445D

View file

@ -1,4 +1,4 @@
from sqlalchemy import create_engine, Column, ForeignKey from sqlalchemy import create_engine, Column, ForeignKey, UniqueConstraint, CheckConstraint
from sqlalchemy import Integer, BigInteger, String, Numeric, Text from sqlalchemy import Integer, BigInteger, String, Numeric, Text
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
import configloader import configloader
@ -29,7 +29,9 @@ class User(TableDeclarativeBase):
# Extra table parameters # Extra table parameters
__tablename__ = "users" __tablename__ = "users"
def __init__(self, telegram_user: telegram.User): def __init__(self, telegram_user: telegram.User, **kwargs):
# Initialize the super
super().__init__(**kwargs)
# Get the data from telegram # Get the data from telegram
self.id = telegram_user.id self.id = telegram_user.id
self.first_name = telegram_user.first_name self.first_name = telegram_user.first_name
@ -74,8 +76,8 @@ class Product(TableDeclarativeBase):
"""Return the product details formatted with Telegram HTML. The image is omitted.""" """Return the product details formatted with Telegram HTML. The image is omitted."""
return f"<b>{escape(self.name)}</b>\n" \ return f"<b>{escape(self.name)}</b>\n" \
f"{escape(self.description)}\n" \ f"{escape(self.description)}\n" \
f"<i>{format(strings.in_stock_format_string, quantity=self.stock) if self.stock is not None else ''}</i>\n" \ f"<i>{strings.in_stock_format_string.format(quantity=self.stock) if self.stock is not None else ''}</i>\n" \
f"{format(strings.currency_format_string, symbol=strings.currency_symbol, value=self.price)}" f"{strings.currency_format_string.format(symbol=strings.currency_symbol, value=self.price)}"
def __repr__(self): def __repr__(self):
return f"<Product {self.name}>" return f"<Product {self.name}>"
@ -83,7 +85,7 @@ class Product(TableDeclarativeBase):
# TODO: add get image (and set image?) method(s) # TODO: add get image (and set image?) method(s)
class Transactions(TableDeclarativeBase): class Transaction(TableDeclarativeBase):
"""A greed wallet transaction. """A greed wallet transaction.
Wallet credit ISN'T calculated from these, but they can be used to recalculate it.""" Wallet credit ISN'T calculated from these, but they can be used to recalculate it."""
@ -95,5 +97,44 @@ class Transactions(TableDeclarativeBase):
value = Column(Numeric, nullable=False) value = Column(Numeric, nullable=False)
# Extra notes on the transaction # Extra notes on the transaction
notes = Column(Text) notes = Column(Text)
# Payment provider
provider = Column(String)
# Transaction ID supplied by the payment provider
provider_id = Column(BigInteger)
# TODO: there still are some missing fields # Extra transaction data, may be required by the payment provider in case of a dispute
payment_name = Column(String)
payment_address = Column(String)
payment_email = Column(String)
# Extra table parameters
__tablename__ = "transactions"
__table_args__ = (UniqueConstraint("provider", "provider_id"),
CheckConstraint("payment_email ~ '[^@]+@.+'")) # TODO: check this regex
def __str__(self):
"""Return the correctly formatted transaction value"""
# Add a plus symbol if the value is positive
string = "+" if self.value > 0 else ""
# Add the correctly formatted value
string += strings.currency_format_string.format(symbol=strings.currency_symbol, value=self.value)
# Return the created string
return string
def __repr__(self):
return f"<Transaction {self.transaction_id} - User {self.user_id} {str(self)}>"
class Admin(TableDeclarativeBase):
"""A greed administrator with his permissions."""
# The telegram id
user_id = Column(BigInteger, ForeignKey("users.user_id"), primary_key=True)
# Permissions
# TODO: unfinished
# Extra table parameters
__tablename__ = "admins"
def __repr__(self):
return f"<Admin {self.user_id}>"