diff --git a/app.py b/app.py index ec2e246..ec00aba 100644 --- a/app.py +++ b/app.py @@ -213,12 +213,42 @@ def enemies(): 'columns': [ ('id', 'ID'), ('name', 'Enemy Name'), - ('vol', 'Is Boss') + ('boss', 'Is Boss') ], 'controls': [('edit', 'Edit')] } return render_template('enemies.html', model=model) +@app.route('/newenemy', methods=['GET']) +@authorize +def new_enemy(preselect_season=None): + sql, args = db.load_season() + db_seasons = db.query_db(sql, args, cls=models.Season) + db_seasons = sorted(db_seasons, key=lambda s: s.code) + + view_seasons = [(s.id, f'{s.code} - {s.game}') for s in db_seasons] + view_seasons.insert(0, (None, 'No Season')) + model = { + 'boss': True, + 'seasons': view_seasons, + 'select_season': preselect_season + } + return render_template('editenemy.html', model=model) + + +@app.route('/saveenemy', methods=['POST']) +@authorize +def save_enemy(): + valid_enemy = models.Enemy.from_form(request.form) + sql, args = db.save_enemy(valid_enemy) + error = db.update_db(sql, args) + + if 'continue' not in request.form: + return redirect('/enemies') + last_selection = valid_enemy.season_id + return new_enemy(preselect_season=last_selection) + + if __name__ == '__main__': app.run() diff --git a/db.py b/db.py index bf475d0..c1971e3 100644 --- a/db.py +++ b/db.py @@ -126,7 +126,19 @@ def load_enemies(id=None): return enemies -def save_season_query(season): +def save_enemy(enemy: models.Enemy): + if not enemy.id: + sql = 'insert into enemy values (?, ?, ?, ?)' + args = (None, enemy.name, enemy.boss, enemy.season_id) + else: + sql = 'update enemy ' \ + 'set name=?, boss=?, season_id=? ' \ + 'where id==?' + args = (enemy.name, enemy.boss, enemy.season_id) + return sql, args + + +def save_season_query(season: models.Season): if not season.id: sql = 'insert into season values (?, ?, ?, ?, ?, ?)' args = (None, @@ -156,3 +168,4 @@ def load_season(id=None): args = (id, ) sql += ' order by season.start' return sql, args + diff --git a/models.py b/models.py index f5482bf..cfe5732 100644 --- a/models.py +++ b/models.py @@ -52,6 +52,7 @@ class Enemy: id: int name: str boss: bool + season_id: int @classmethod def from_form(cls, form): @@ -63,11 +64,19 @@ class Enemy: raise AttributeError(INVALID_STR.format('name')) name = str(name) - boss = form.get('boss', '') + boss = form.get('boss', False) if boss not in [True, False, 'True', 'False']: raise AttributeError(INVALID_STR.format('boss')) + boss = bool(boss) - self = cls(id=id, name=name, boss=boss) + season = form.get('season', None) + if season not in ['None', None]: + try: + season = int(season) + except ValueError: + raise AttributeError(INVALID_STR.format('boss')) + + self = cls(id=id, name=name, boss=boss, season_id=season) return self diff --git a/schema.sql b/schema.sql index 2c9b603..d96f09f 100644 --- a/schema.sql +++ b/schema.sql @@ -47,27 +47,11 @@ create table if not exists enemy constraint enemy_pk primary key autoincrement, name text not null, - boss integer not null + boss integer not null, + season_id integer, + + foreign key (season_id) references season(id) ); create unique index if not exists enemy_id_uindex on enemy (id); - -create table if not exists season_enemy -( - id integer not null - constraint season_enemy_pk - primary key autoincrement, - season_id integer - constraint season_enemy_season_id_fk - references season, - enemy_id integer - constraint season_enemy_enemy_id_fk - references enemy -); - -create unique index if not exists season_enemy_id_uindex - on season_enemy (id); - - - diff --git a/templates/editenemy.html b/templates/editenemy.html new file mode 100644 index 0000000..9d55d8c --- /dev/null +++ b/templates/editenemy.html @@ -0,0 +1,76 @@ +{% extends "base.html" %} +{% set active_page = "enemies" %} +{% block title %}Enemies{% endblock %} + + +{% block content %} +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+ + +{% endblock %} \ No newline at end of file