Docker/ API 0.5.0: Partner Statistics/Coupons for New Customers and More
This commit is contained in:
+9
-1
@@ -8,7 +8,14 @@ from database.models import Coupon, CouponUsage
|
||||
from logger import logger
|
||||
|
||||
|
||||
async def create_coupon(session: AsyncSession, code: str, amount: int, usage_limit: int, days: int = None) -> bool:
|
||||
async def create_coupon(
|
||||
session: AsyncSession,
|
||||
code: str,
|
||||
amount: int,
|
||||
usage_limit: int,
|
||||
days: int = None,
|
||||
new_users_only: bool = False,
|
||||
) -> bool:
|
||||
try:
|
||||
exists = await session.scalar(select(Coupon.id).where(Coupon.code == code))
|
||||
if exists:
|
||||
@@ -23,6 +30,7 @@ async def create_coupon(session: AsyncSession, code: str, amount: int, usage_lim
|
||||
usage_count=0,
|
||||
is_used=False,
|
||||
days=days,
|
||||
new_users_only=new_users_only,
|
||||
)
|
||||
)
|
||||
await session.commit()
|
||||
|
||||
@@ -183,6 +183,7 @@ class Coupon(DictLikeMixin, Base):
|
||||
usage_count = Column(Integer, default=0)
|
||||
is_used = Column(Boolean, default=False)
|
||||
days = Column(Integer, nullable=True)
|
||||
new_users_only = Column(Boolean, default=False, nullable=False)
|
||||
|
||||
|
||||
class CouponUsage(DictLikeMixin, Base):
|
||||
|
||||
+7
-10
@@ -278,9 +278,9 @@ async def resolve_device_limit_from_group(session: AsyncSession, server_id: str)
|
||||
|
||||
|
||||
async def filter_cluster_by_subgroup(
|
||||
session: AsyncSession,
|
||||
cluster: list,
|
||||
target_subgroup: str,
|
||||
session: AsyncSession,
|
||||
cluster: list,
|
||||
target_subgroup: str,
|
||||
cluster_id: str,
|
||||
tariff_id: int | None = None,
|
||||
) -> list:
|
||||
@@ -320,7 +320,7 @@ async def filter_cluster_by_subgroup(
|
||||
check_values = [target_subgroup]
|
||||
if tariff_id:
|
||||
check_values.append(str(tariff_id))
|
||||
|
||||
|
||||
total_bindings = await session.scalar(
|
||||
select(func.count()).select_from(ServerSubgroup).where(ServerSubgroup.subgroup_title.in_(check_values))
|
||||
)
|
||||
@@ -345,9 +345,7 @@ async def filter_cluster_by_subgroup(
|
||||
return cluster
|
||||
|
||||
|
||||
async def filter_cluster_by_tariff(
|
||||
session: AsyncSession, cluster: list, tariff_id: int, cluster_id: str
|
||||
) -> list:
|
||||
async def filter_cluster_by_tariff(session: AsyncSession, cluster: list, tariff_id: int, cluster_id: str) -> list:
|
||||
names = [s.get("server_name") for s in cluster if s.get("server_name")]
|
||||
if not names:
|
||||
return []
|
||||
@@ -394,10 +392,9 @@ async def filter_cluster_by_tariff(
|
||||
async def has_legacy_subgroup_bindings(session: AsyncSession, server_ids: list[int]) -> bool:
|
||||
if not server_ids:
|
||||
return False
|
||||
|
||||
|
||||
result = await session.execute(
|
||||
select(ServerSubgroup.subgroup_title)
|
||||
.where(ServerSubgroup.server_id.in_(server_ids))
|
||||
select(ServerSubgroup.subgroup_title).where(ServerSubgroup.server_id.in_(server_ids))
|
||||
)
|
||||
for (title,) in result.all():
|
||||
if title and not title.isdigit():
|
||||
|
||||
+1
-3
@@ -225,9 +225,7 @@ async def mark_trial_extended(tg_id: int, session: AsyncSession):
|
||||
async def get_user_snapshot(session: AsyncSession, tg_id: int) -> tuple[int, int] | None:
|
||||
keys_count_sq = select(func.count(Key.client_id)).where(Key.tg_id == tg_id).scalar_subquery()
|
||||
|
||||
res = await session.execute(
|
||||
select(func.coalesce(User.trial, 0), keys_count_sq).where(User.tg_id == tg_id)
|
||||
)
|
||||
res = await session.execute(select(func.coalesce(User.trial, 0), keys_count_sq).where(User.tg_id == tg_id))
|
||||
row = res.first()
|
||||
if row is None:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user