first commit

This commit is contained in:
Mateusz Gruszczyński
2026-03-13 15:17:32 +01:00
commit 986ffb200a
91 changed files with 4423 additions and 0 deletions

0
app/cli/__init__.py Normal file
View File

81
app/cli/commands.py Normal file
View File

@@ -0,0 +1,81 @@
import click
from flask.cli import with_appcontext
from ..extensions import db
from ..models import User, seed_categories
from ..services.reporting import send_due_reports
@click.command('create-user')
@click.option('--email', prompt=True)
@click.option('--name', prompt=True)
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True)
@click.option('--admin', is_flag=True, default=False)
@with_appcontext
def create_user(email, name, password, admin):
user = User(email=email.lower(), full_name=name, role='admin' if admin else 'user', must_change_password=False)
user.set_password(password)
db.session.add(user)
db.session.commit()
click.echo(f'Created user {email}')
@click.command('reset-password')
@click.option('--email', prompt=True)
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=True)
@with_appcontext
def reset_password(email, password):
user = User.query.filter_by(email=email.lower()).first()
if not user:
raise click.ClickException('User not found')
user.set_password(password)
user.must_change_password = True
db.session.commit()
click.echo(f'Password reset for {email}')
@click.command('make-admin')
@click.option('--email', prompt=True)
@with_appcontext
def make_admin(email):
user = User.query.filter_by(email=email.lower()).first()
if not user:
raise click.ClickException('User not found')
user.role = 'admin'
db.session.commit()
click.echo(f'Granted admin to {email}')
@click.command('deactivate-user')
@click.option('--email', prompt=True)
@with_appcontext
def deactivate_user(email):
user = User.query.filter_by(email=email.lower()).first()
if not user:
raise click.ClickException('User not found')
user.is_active_user = False
db.session.commit()
click.echo(f'Deactivated {email}')
@click.command('send-reports')
@with_appcontext
def send_reports_command():
count = send_due_reports()
click.echo(f'Sent {count} reports')
@click.command('seed-categories')
@with_appcontext
def seed_categories_command():
seed_categories()
click.echo('Categories seeded')
def register_commands(app):
app.cli.add_command(create_user)
app.cli.add_command(reset_password)
app.cli.add_command(make_admin)
app.cli.add_command(deactivate_user)
app.cli.add_command(send_reports_command)
app.cli.add_command(seed_categories_command)