2022-08-31 12:20:49 +02:00
|
|
|
|
import sqlite3
|
2022-09-07 01:55:12 +02:00
|
|
|
|
from loguru import logger
|
2022-08-31 12:20:49 +02:00
|
|
|
|
from config import limit_movies_per_user
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
conn = sqlite3.connect("fmn.sqlite")
|
|
|
|
|
c = conn.cursor()
|
|
|
|
|
|
|
|
|
|
c.execute(
|
|
|
|
|
'''CREATE TABLE IF NOT EXISTS watched_movies(original_name VARCHAR (500) DEFAULT NULL, ru_name VARCHAR (500) DEFAULT NULL, year INTEGER DEFAULT NULL)''')
|
|
|
|
|
c.execute(
|
|
|
|
|
'''CREATE TABLE IF NOT EXISTS poll(user_suggested VARCHAR (500) DEFAULT NULL, original_name VARCHAR (500) DEFAULT NULL, ru_name VARCHAR (500) DEFAULT NULL, year INTEGER DEFAULT NULL, votes INTEGER)''')
|
|
|
|
|
|
|
|
|
|
conn.commit()
|
|
|
|
|
|
2022-11-01 17:05:18 +01:00
|
|
|
|
def force_commit():
|
|
|
|
|
conn.commit()
|
|
|
|
|
|
2022-08-31 12:20:49 +02:00
|
|
|
|
|
|
|
|
|
def mark_as_watched_movie(original_name=None, ru_name=None, year=None):
|
|
|
|
|
try:
|
|
|
|
|
year = int(year)
|
|
|
|
|
except:
|
|
|
|
|
year = None
|
|
|
|
|
c.execute("INSERT OR IGNORE INTO watched_movies(original_name, ru_name, year) VALUES (?, ?, ?)",
|
|
|
|
|
(original_name, ru_name, year))
|
|
|
|
|
conn.commit()
|
|
|
|
|
logger.info(f'Watched movie added to db: ' + str((original_name, ru_name, year)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_already_watched(original_name=None, ru_name=None, year=None):
|
2022-09-03 18:46:13 +02:00
|
|
|
|
already_watched = c.execute('''
|
|
|
|
|
SELECT * FROM watched_movies
|
|
|
|
|
WHERE (original_name = (?) OR ru_name = (?)) COLLATE NOCASE
|
|
|
|
|
AND year = (?)''',
|
2022-08-31 12:20:49 +02:00
|
|
|
|
(original_name,ru_name,year)).fetchone()
|
2022-09-02 10:28:24 +02:00
|
|
|
|
if already_watched:
|
2022-08-31 12:20:49 +02:00
|
|
|
|
return True
|
|
|
|
|
else:
|
|
|
|
|
return False
|
|
|
|
|
|
2022-10-02 18:27:00 +02:00
|
|
|
|
|
|
|
|
|
def get_count_all_watched_movies():
|
|
|
|
|
return len(c.execute('SELECT * FROM watched_movies').fetchall())
|
|
|
|
|
|
|
|
|
|
|
2022-09-03 18:46:13 +02:00
|
|
|
|
def get_already_suggested(acct, original_name, ru_name, year):
|
|
|
|
|
already_suggested = c.execute('''SELECT * FROM poll
|
|
|
|
|
WHERE (original_name = (?) OR ru_name = (?)) COLLATE NOCASE
|
|
|
|
|
AND year == (?)''', (original_name, ru_name, year)).fetchone()
|
|
|
|
|
return already_suggested
|
|
|
|
|
|
2022-08-31 12:20:49 +02:00
|
|
|
|
|
2022-09-02 10:28:24 +02:00
|
|
|
|
def get_suggested_movies_count():
|
2022-09-03 18:46:13 +02:00
|
|
|
|
poll_count = c.execute("SELECT * FROM poll").fetchall()
|
2022-09-02 10:28:24 +02:00
|
|
|
|
return len(poll_count)
|
|
|
|
|
|
2022-08-31 12:20:49 +02:00
|
|
|
|
|
|
|
|
|
def per_user_accepted_movie_count(acct=str):
|
2022-09-03 18:46:13 +02:00
|
|
|
|
user_suggested_count = c.execute("SELECT user_suggested FROM poll WHERE user_suggested == (?)", (acct,)).fetchall()
|
2022-08-31 12:20:49 +02:00
|
|
|
|
return len(user_suggested_count)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def add_movie_to_poll(acct=str, original_name=None, ru_name=None, year=None):
|
2022-09-03 18:46:13 +02:00
|
|
|
|
check_user_limit = per_user_accepted_movie_count(acct)
|
|
|
|
|
already_fmn = get_already_suggested(acct, original_name, ru_name, year)
|
|
|
|
|
if already_fmn:
|
|
|
|
|
return 1
|
|
|
|
|
elif check_user_limit >= limit_movies_per_user:
|
|
|
|
|
return 2
|
|
|
|
|
if check_user_limit < limit_movies_per_user and already_fmn is None:
|
2022-08-31 12:20:49 +02:00
|
|
|
|
c.execute("INSERT OR IGNORE INTO poll(user_suggested, original_name, ru_name, year, votes) VALUES (?, ?, ?, ?, ?)", (acct, original_name, ru_name, year, 0))
|
|
|
|
|
conn.commit()
|
|
|
|
|
logger.info('Add option to poll: ' + str((acct, original_name, ru_name, year)))
|
2022-09-03 18:46:13 +02:00
|
|
|
|
return 0
|
2022-08-31 12:20:49 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_movies_for_poll():
|
|
|
|
|
list_poll = c.execute(f"SELECT * FROM poll ORDER BY year").fetchall()
|
|
|
|
|
return list_poll
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def write_votes(votes_list_tuples=list):
|
|
|
|
|
'''Запись результатов голосования'''
|
|
|
|
|
original = get_movies_for_poll()
|
|
|
|
|
print(original)
|
|
|
|
|
new = []
|
|
|
|
|
indexator = 0
|
|
|
|
|
for i in original:
|
|
|
|
|
try:
|
|
|
|
|
new.append((i[0], i[1], i[2], i[3], votes_list_tuples[indexator]))
|
|
|
|
|
except:
|
|
|
|
|
break
|
|
|
|
|
indexator += 1
|
|
|
|
|
if len(original) == len(new):
|
|
|
|
|
c.execute("DELETE FROM poll")
|
|
|
|
|
c.executemany("INSERT OR IGNORE INTO poll(user_suggested, original_name, ru_name, year, votes) VALUES (?, ?, ?, ?, ?)", (new))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def read_votes():
|
|
|
|
|
list_poll = c.execute(f"SELECT * FROM poll ORDER BY votes DESC").fetchall()
|
|
|
|
|
return list_poll
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def rewrite_db(winned_movies=list):
|
|
|
|
|
'''Переписываем базу победившими фильмами, на случай tie breaker'''
|
|
|
|
|
c.execute("DELETE FROM poll")
|
|
|
|
|
c.executemany("INSERT OR IGNORE INTO poll(user_suggested, original_name, ru_name, year, votes) VALUES (?, ?, ?, ?, ?)",
|
|
|
|
|
(winned_movies))
|
|
|
|
|
conn.commit()
|
2022-08-31 21:23:11 +02:00
|
|
|
|
|
|
|
|
|
def reset_poll():
|
|
|
|
|
'''Сброс содержимого предложки-опроса'''
|
|
|
|
|
c.execute("DELETE FROM poll")
|
|
|
|
|
conn.commit()
|
|
|
|
|
|