feat: add admin settings system and improve customer/pricing endpoints

Add centralized admin settings (company info, social links, quick calls,
sidebar visibility toggles, theme, logo upload) with singleton pattern
and full CRUD API. Add active/dedicated customer count endpoints for
dashboard stats. Fix automatic assignment route to use PUT instead of
GET. Refactor oil price endpoint to use schema serialization with null
safety.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 18:45:06 -05:00
parent 6d5f44db55
commit 3066754821
6 changed files with 233 additions and 13 deletions

View File

@@ -1,5 +1,6 @@
from app import db, ma
from datetime import datetime
import json
class Admin_Company(db.Model):
@@ -30,4 +31,30 @@ class Call(db.Model):
id = db.Column(db.Integer, primary_key=True, index=True)
current_phone = db.Column(db.String(500))
created_at = db.Column(db.DateTime, default=datetime.utcnow)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
class Admin_Settings(db.Model):
__tablename__ = 'admin_settings'
__table_args__ = {"schema": "public"}
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
updated_at = db.Column(db.TIMESTAMP(), default=datetime.utcnow, onupdate=datetime.utcnow)
logo_base64 = db.Column(db.Text, nullable=True)
logo_mime_type = db.Column(db.VARCHAR(50), nullable=True)
company_name = db.Column(db.VARCHAR(250), default='Auburn Oil')
link_facebook = db.Column(db.VARCHAR(500), nullable=True)
link_google = db.Column(db.VARCHAR(500), nullable=True)
link_website = db.Column(db.VARCHAR(500), nullable=True)
link_google_review = db.Column(db.VARCHAR(500), nullable=True)
quick_calls = db.Column(db.Text, nullable=True)
show_automatics = db.Column(db.Boolean, default=True)
show_stats = db.Column(db.Boolean, default=True)
show_service = db.Column(db.Boolean, default=True)
show_ticker = db.Column(db.Boolean, default=True)
default_theme = db.Column(db.VARCHAR(50), default='ocean')
class Admin_Settings_schema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Admin_Settings