Refactor application to MVC architecture with Flask blueprints
Major architectural refactoring to improve code organization, maintainability, and scalability: - Implement MVC pattern with clear separation of concerns - Organize code into blueprints for different functional areas (main, tenant, admin, api) - Create models layer to encapsulate all database operations - Create services layer for business logic (auth, product, barcode) - Implement application factory pattern for better testability - Add environment-based configuration management - Remove old monolithic app.py and consolidate routes New structure: - app/models/ - Database operations (Tenant, Product, ARField, Settings) - app/services/ - Business logic (Auth, Product, Barcode services) - app/blueprints/ - Controllers organized by function - app/config.py - Environment configurations - run.py - Application entry point All routes remain backward compatible. No changes to API or templates functionality.
This commit is contained in:
30
src/app/models/settings.py
Normal file
30
src/app/models/settings.py
Normal file
@@ -0,0 +1,30 @@
|
||||
from typing import Optional
|
||||
from .base import get_db
|
||||
|
||||
class SettingsModel:
|
||||
"""Model for application settings"""
|
||||
|
||||
@staticmethod
|
||||
def get(key: str, default: Optional[str] = None) -> Optional[str]:
|
||||
"""Get a setting value by key"""
|
||||
with get_db() as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('SELECT value FROM settings WHERE key = ?', (key,))
|
||||
row = cursor.fetchone()
|
||||
return row['value'] if row else default
|
||||
|
||||
@staticmethod
|
||||
def set(key: str, value: str):
|
||||
"""Set a setting value"""
|
||||
with get_db() as conn:
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
INSERT OR REPLACE INTO settings (key, value, updated_at)
|
||||
VALUES (?, ?, CURRENT_TIMESTAMP)
|
||||
''', (key, value))
|
||||
conn.commit()
|
||||
|
||||
@staticmethod
|
||||
def get_server_url() -> str:
|
||||
"""Get server URL setting"""
|
||||
return SettingsModel.get('server_url', 'http://localhost:5555')
|
||||
Reference in New Issue
Block a user