gear-orders/db/queries.py

163 lines
3.9 KiB
Python
Raw Normal View History

2025-11-16 17:58:34 +00:00
import datetime
2026-03-06 03:47:39 +00:00
from peewee import JOIN, fn
2025-11-16 17:58:34 +00:00
2026-03-05 17:55:33 +00:00
from .models import database, User, OrdersPool, DomSubUsers, Repeat, SkipDay, OrderStatus, MastodonServer
2025-11-14 04:03:21 +00:00
def initdb():
database.connect()
database.create_tables([
Repeat,
SkipDay,
2026-03-05 03:01:35 +00:00
OrderStatus
2025-11-14 04:03:21 +00:00
])
2026-01-09 22:33:38 +00:00
def user_add(username, chat_id):
return User.create(
telegram_username=username,
telegram_chat_id=chat_id
)
def user_get(username):
return User.get(
telegram_username=username
)
2026-03-05 17:55:33 +00:00
def user_mastodon_server_set(id, mastodon_server):
q = User.update(
mastodon_server=mastodon_server
).where(
User.id == id
)
return q.execute()
def user_mastodon_user_set(id, mastodon_username, mastodon_access_token):
q = User.update(
mastodon_username=mastodon_username,
mastodon_access_token=mastodon_access_token
).where(
User.id == id
)
return q.execute()
2026-03-05 19:46:44 +00:00
def user_preferences_set(id, mastodon_post_public, mastodon_attn_list):
q = User.update(
mastodon_attn_list=mastodon_attn_list,
mastodon_post_public=mastodon_post_public
).where(
User.id == id
)
return q.execute()
2026-03-05 17:55:33 +00:00
def mastodon_server_get(name):
return MastodonServer.get(name=name)
def mastodon_server_put(name, client_id, client_secret):
return MastodonServer.create(
name=name,
client_id=client_id,
client_secret=client_secret
)
2026-01-10 03:44:55 +00:00
def orders_pool_list(user_id):
return OrdersPool.select().where(OrdersPool.user_id == user_id)
2026-01-29 21:30:51 +00:00
def orders_pool(user_id, set_id):
return OrdersPool.get(OrdersPool.user_id == user_id, OrdersPool.id == set_id)
2026-03-04 23:33:17 +00:00
def orders_pool_by_id(pool_id):
return OrdersPool.get(OrdersPool.id == pool_id)
2026-03-07 00:33:08 +00:00
def orders_pool_since(dt):
return OrdersPool.select().where(OrdersPool.updated_at > dt)
2026-03-04 23:33:17 +00:00
def orders_pool_scheduled():
return OrdersPool.select().where(OrdersPool.scheduled == True)
2026-01-09 22:33:38 +00:00
def domsubusers_add(sub, dom):
return DomSubUsers.create(
sub=sub,
dom=dom
)
def domsubusers_delete(sub, dom):
q = DomSubUsers.get(
sub=sub,
dom=dom
).delete()
return q.execute()
2026-01-10 03:44:55 +00:00
def domsubusers_list(dom):
return DomSubUsers.select().where(DomSubUsers.dom == dom)
2026-03-04 23:33:17 +00:00
def repeat_get(orders_pool_id):
2025-11-14 04:03:21 +00:00
try:
2026-03-04 23:33:17 +00:00
return Repeat.get(orders_pool_id = orders_pool_id)
2025-11-14 04:03:21 +00:00
except Repeat.DoesNotExist:
return None
2026-03-04 23:33:17 +00:00
def repeat_increment(id):
r = Repeat.get(id=id)
q = Repeat.update(
count = r.count + 1
)
q.execute()
2025-11-14 04:03:21 +00:00
2026-03-04 23:33:17 +00:00
def repeat_put(orders_pool_id, probability, orders):
2025-11-14 04:03:21 +00:00
return Repeat.create(
2026-03-04 23:33:17 +00:00
orders_pool_id=orders_pool_id,
2025-11-14 04:03:21 +00:00
probability=probability,
orders=orders
)
2026-03-04 23:33:17 +00:00
def repeat_clear(id):
2025-11-14 04:03:21 +00:00
q = Repeat.delete()
q.execute()
2026-03-06 02:16:31 +00:00
def skip_day_put(user, date):
return SkipDay.create(user=user, date=date)
2025-11-14 04:03:21 +00:00
2026-03-06 02:16:31 +00:00
def skip_day_delete(user, date):
2026-03-07 00:33:08 +00:00
q = SkipDay.delete().where(SkipDay.user == user & SkipDay.date == date)
2025-11-16 17:58:34 +00:00
return q.execute()
2026-03-06 02:16:31 +00:00
def skip_days_upcoming(user):
2025-11-16 17:58:34 +00:00
return (SkipDay.select()
2026-03-06 02:16:31 +00:00
.where(SkipDay.user == user and SkipDay.date >= datetime.date.today())
2025-11-16 17:58:34 +00:00
.order_by(SkipDay.date)
.limit(10))
2026-03-06 02:16:31 +00:00
def skip_day_contains(user, date):
2026-03-07 00:33:08 +00:00
q = SkipDay.select().where(SkipDay.user == user & SkipDay.date == date)
2025-11-14 04:03:21 +00:00
return len(q) > 0
2026-03-05 03:01:35 +00:00
def order_status_put(orders_pool, user, mastodon_id, created_at, due_at, text, punishment_for=None):
2025-11-14 04:03:21 +00:00
return OrderStatus.create(
2026-03-04 23:33:17 +00:00
orders_pool_id=orders_pool.id,
user_id=user.id,
2025-11-14 04:03:21 +00:00
mastodon_id=mastodon_id,
created_at=created_at,
due_at=due_at,
2026-03-05 03:01:35 +00:00
text=text,
punishment_for=punishment_for
2025-11-14 04:03:21 +00:00
)
2026-03-04 23:33:17 +00:00
def order_status_by_id(order_status_id):
return OrderStatus.get(id=order_status_id)
2025-11-14 04:03:21 +00:00
def order_status_confirm(id, confirmed_at):
q = OrderStatus.update(
confirmed_at=confirmed_at
).where(
OrderStatus.id == id
)
return q.execute()
2026-03-06 03:47:39 +00:00
def order_status_outstanding():
Punishment = OrderStatus.alias()
return (OrderStatus
.select(OrderStatus)
.where(OrderStatus.due_at.is_null(False) & OrderStatus.confirmed_at.is_null())
.join(Punishment, JOIN.LEFT_OUTER, on=(OrderStatus.id == Punishment.punishment_for))
.group_by(OrderStatus)
.having(fn.COUNT(Punishment.id) == 0)
)