Skip to content

Commit

Permalink
Create in-db audit log for archtype changes.
Browse files Browse the repository at this point in the history
  • Loading branch information
bakert committed Feb 12, 2020
1 parent 39ea0e7 commit 05d3def
Show file tree
Hide file tree
Showing 6 changed files with 19 additions and 5 deletions.
2 changes: 1 addition & 1 deletion decksite/controllers/admin.py
Expand Up @@ -74,7 +74,7 @@ def post_archetypes() -> wrappers.Response:
for deck_id in request.form.getlist('deck_id'):
archetype_id = archetype_ids.pop(0)
if archetype_id:
archs.assign(deck_id, archetype_id)
archs.assign(deck_id, archetype_id, auth.person_id())
redis.clear(f'decksite:deck:{deck_id}')
elif request.form.get('q') is not None and request.form.get('notq') is not None:
search_results = ds.load_decks_by_cards(cast(str, request.form.get('q')).splitlines(), cast(str, request.form.get('notq')).splitlines())
Expand Down
2 changes: 1 addition & 1 deletion decksite/controllers/api.py
Expand Up @@ -203,7 +203,7 @@ def card_api(card: str) -> Response:
@auth.demimod_required
@fill_form('deck_id', 'archetype_id')
def post_reassign(deck_id: int, archetype_id: int) -> Response:
archs.assign(deck_id, archetype_id)
archs.assign(deck_id, archetype_id, auth.person_id())
redis.clear(f'decksite:deck:{deck_id}')
return return_json({'success':True, 'deck_id':deck_id})

Expand Down
5 changes: 4 additions & 1 deletion decksite/data/archetype.py
Expand Up @@ -82,11 +82,14 @@ def add(name: str, parent: int) -> None:
sql += '({ancestor}, {descendant}, {depth})'.format(ancestor=archetype_id, descendant=archetype_id, depth=0)
db().execute(sql)

def assign(deck_id: int, archetype_id: int, reviewed: bool = True, similarity: Optional[int] = None) -> None:
def assign(deck_id: int, archetype_id: int, person_id: Optional[int], reviewed: bool = True, similarity: Optional[int] = None) -> None:
db().begin('assign_archetype')
db().execute('INSERT INTO deck_archetype_change (changed_date, deck_id, archetype_id, person_id) VALUES (UNIX_TIMESTAMP(NOW()), %s, %s, %s)', [deck_id, archetype_id, person_id])
and_clause = '' if reviewed else 'AND reviewed is FALSE'
db().execute(f'UPDATE deck SET reviewed = %s, archetype_id = %s WHERE id = %s {and_clause}', [reviewed, archetype_id, deck_id])
if not reviewed and similarity is not None:
db().execute(f'UPDATE deck_cache SET similarity = %s WHERE deck_id = %s', [similarity, deck_id])
db().commit('assign_archetype')

def move(archetype_id: int, parent_id: int) -> None:
db().begin('move_archetype')
Expand Down
2 changes: 1 addition & 1 deletion decksite/scrapers/gatherling.py
Expand Up @@ -105,7 +105,7 @@ def guess_archetypes(ds: List[deck.Deck]) -> None:
deck.calculate_similar_decks(ds)
for d in ds:
if d.similar_decks:
archetype.assign(d.id, d.similar_decks[0].archetype_id, False)
archetype.assign(d.id, d.similar_decks[0].archetype_id, None, False)

def rankings(soup: BeautifulSoup) -> List[str]:
rows = soup.find(text='Current Standings').find_parent('table').find_all('tr')
Expand Down
11 changes: 11 additions & 0 deletions decksite/sql/56.sql
@@ -0,0 +1,11 @@
CREATE TABLE IF NOT EXISTS deck_archetype_change (
id INTEGER PRIMARY KEY AUTO_INCREMENT,
changed_date INT NOT NULL,
deck_id INT NOT NULL,
archetype_id INT NOT NULL,
person_id INT NOT NULL,
FOREIGN KEY(deck_id) REFERENCES deck(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(archetype_id) REFERENCES archetype(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY(person_id) REFERENCES person(id) ON UPDATE CASCADE ON DELETE CASCADE
);

2 changes: 1 addition & 1 deletion maintenance/guess_league_archetypes.py
Expand Up @@ -9,5 +9,5 @@ def run() -> None:
for s in d.similar_decks:
if s.reviewed and s.archetype_id is not None:
sim = int(100 * deck.similarity_score(d, s))
archetype.assign(d.id, s.archetype_id, False, sim)
archetype.assign(d.id, s.archetype_id, None, False, sim)
break

0 comments on commit 05d3def

Please sign in to comment.