2026-04-21 12:59:55 +02:00
|
|
|
import logging
|
|
|
|
|
import streamlit as st
|
|
|
|
|
from sqlalchemy.sql import text
|
|
|
|
|
from queries.connection import connection
|
|
|
|
|
from enums import CounterType
|
|
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
def create_counter(title:str, counter_type:CounterType, counter_color) -> None:
|
2026-04-28 21:04:52 +02:00
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
logger.info("Adding counter %s for user %d", counter_type, user_id)
|
2026-04-25 10:38:21 +02:00
|
|
|
with connection().session as session:
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-28 21:04:52 +02:00
|
|
|
query = text('INSERT INTO counters (user_id, name, type, color) VALUES (:user, :title, :type, :color)')
|
|
|
|
|
session.execute(query, {
|
|
|
|
|
'user': user_id,
|
|
|
|
|
'title': title,
|
|
|
|
|
'type': counter_type,
|
|
|
|
|
'color': counter_color
|
|
|
|
|
})
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
def get_counters():
|
2026-04-28 21:04:52 +02:00
|
|
|
user_id = int(st.session_state.user_id)
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-28 21:04:52 +02:00
|
|
|
return connection().query("""
|
|
|
|
|
SELECT id, name, type, color
|
|
|
|
|
FROM counters
|
|
|
|
|
WHERE user_id = :user
|
|
|
|
|
""", params={'user': user_id })
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
return st.dataframe()
|
|
|
|
|
|
|
|
|
|
def increment_counter(counter_id:int) -> None:
|
2026-04-28 21:04:52 +02:00
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
logger.info("Incrementing counter %d for user %d", counter_id, user_id)
|
2026-04-25 10:38:21 +02:00
|
|
|
with connection().session as session:
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-28 21:04:52 +02:00
|
|
|
query = text('INSERT INTO entries (counter_id, user_id) VALUES (:id, :user)')
|
|
|
|
|
session.execute(query, {
|
|
|
|
|
'id': counter_id,
|
|
|
|
|
'user': user_id
|
|
|
|
|
})
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
def remove_counter(counter_id:int) -> None:
|
2026-04-28 21:04:52 +02:00
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
logger.info("Removing counter %d from user %d", counter_id, user_id)
|
2026-04-25 10:38:21 +02:00
|
|
|
with connection().session as session:
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-28 21:04:52 +02:00
|
|
|
query = text('DELETE FROM counters WHERE id = :id AND user_id = :user')
|
|
|
|
|
session.execute(query, {
|
|
|
|
|
'id': counter_id,
|
|
|
|
|
'user': user_id
|
|
|
|
|
})
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
def get_counter(counter_id:int):
|
2026-04-28 21:04:52 +02:00
|
|
|
user_id = int(st.session_state.user_id)
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-28 21:04:52 +02:00
|
|
|
counters = connection().query("""
|
|
|
|
|
SELECT * FROM counters
|
|
|
|
|
WHERE id = :id AND user_id = :user
|
|
|
|
|
""", params={ 'id': counter_id, 'user': user_id}
|
|
|
|
|
)
|
|
|
|
|
if counters.empty:
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
return counters.iloc[0]
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
2026-04-30 14:16:57 +02:00
|
|
|
def get_color_palettes():
|
2026-04-21 12:59:55 +02:00
|
|
|
try:
|
2026-04-30 14:16:57 +02:00
|
|
|
return connection().query('SELECT * FROM color_palettes''')
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_color_palette():
|
|
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
try:
|
|
|
|
|
return int(connection().query('SELECT color_palette_id FROM users WHERE id = :id''', params={'id': user_id})['color_palette_id'][0])
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_color_palette(palette_id:int):
|
|
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
logger.info("Changing palette for user %d to %d", user_id, palette_id)
|
|
|
|
|
with connection().session as session:
|
|
|
|
|
try:
|
|
|
|
|
query = text('UPDATE users SET color_palette_id = :palette WHERE id = :user')
|
|
|
|
|
session.execute(query, {
|
|
|
|
|
'palette': palette_id,
|
|
|
|
|
'user': user_id
|
|
|
|
|
})
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
session.rollback()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_colors():
|
|
|
|
|
user_id = int(st.session_state.user_id)
|
|
|
|
|
try:
|
|
|
|
|
return connection().query('''
|
|
|
|
|
SELECT color1,color2,color3,color4,color5
|
|
|
|
|
FROM users u
|
|
|
|
|
LEFT JOIN color_palettes p ON p.id = u.color_palette_id
|
|
|
|
|
WHERE u.id = :id
|
|
|
|
|
''', params={'id': user_id})
|
2026-04-21 12:59:55 +02:00
|
|
|
except Exception as e:
|
|
|
|
|
logger.error(e)
|
|
|
|
|
return None
|