from datetime import datetime, timezone from sqlalchemy import JSON, Boolean, DateTime, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column from .database import Base def utcnow() -> datetime: return datetime.now(timezone.utc) class AdminUser(Base): __tablename__ = "admin_users" id: Mapped[int] = mapped_column(primary_key=True) username: Mapped[str] = mapped_column(String(64), unique=True, index=True) password_hash: Mapped[str] = mapped_column(String(255)) class Brand(Base): __tablename__ = "brand" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(128), default="") logo: Mapped[str] = mapped_column(Text, default="") hero: Mapped[str] = mapped_column(Text, default="") contact_bg: Mapped[str] = mapped_column(Text, default="") phone: Mapped[str] = mapped_column(String(64), default="") phone_href: Mapped[str] = mapped_column(String(128), default="") email: Mapped[str] = mapped_column(String(128), default="") address: Mapped[str] = mapped_column(Text, default="") class Service(Base): __tablename__ = "services" id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(256)) desc: Mapped[str] = mapped_column(Text, default="") icon: Mapped[str] = mapped_column(String(32), default="draft") class Project(Base): __tablename__ = "projects" id: Mapped[int] = mapped_column(primary_key=True) slug: Mapped[str] = mapped_column(String(128), unique=True, index=True) title: Mapped[str] = mapped_column(String(256)) location: Mapped[str] = mapped_column(String(128), default="") year: Mapped[str] = mapped_column(String(64), default="") status: Mapped[str] = mapped_column(String(16), default="done") # done | progress image: Mapped[str] = mapped_column(Text, default="") gallery: Mapped[list] = mapped_column(JSON, default=list) area: Mapped[str] = mapped_column(String(64), default="") floors: Mapped[str] = mapped_column(String(64), default="") units: Mapped[str] = mapped_column(String(64), default="") client: Mapped[str] = mapped_column(String(128), default="") summary: Mapped[str] = mapped_column(Text, default="") body: Mapped[list] = mapped_column(JSON, default=list) class Article(Base): __tablename__ = "articles" id: Mapped[int] = mapped_column(primary_key=True) slug: Mapped[str] = mapped_column(String(128), unique=True, index=True) title: Mapped[str] = mapped_column(String(256)) date: Mapped[str] = mapped_column(String(64), default="") category: Mapped[str] = mapped_column(String(64), default="") image: Mapped[str] = mapped_column(Text, default="") read: Mapped[str] = mapped_column(String(32), default="") excerpt: Mapped[str] = mapped_column(Text, default="") body: Mapped[list] = mapped_column(JSON, default=list) class Testimonial(Base): __tablename__ = "testimonials" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(128)) role: Mapped[str] = mapped_column(String(128), default="") quote: Mapped[str] = mapped_column(Text, default="") class Faq(Base): __tablename__ = "faqs" id: Mapped[int] = mapped_column(primary_key=True) question: Mapped[str] = mapped_column(Text) answer: Mapped[str] = mapped_column(Text, default="") class TeamMember(Base): __tablename__ = "team" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(128)) role: Mapped[str] = mapped_column(String(128), default="") bio: Mapped[str] = mapped_column(Text, default="") class TimelineItem(Base): __tablename__ = "timeline" id: Mapped[int] = mapped_column(primary_key=True) year: Mapped[str] = mapped_column(String(32)) title: Mapped[str] = mapped_column(String(256)) desc: Mapped[str] = mapped_column(Text, default="") image: Mapped[str] = mapped_column(Text, default="") class Stat(Base): __tablename__ = "stats" id: Mapped[int] = mapped_column(primary_key=True) value: Mapped[int] = mapped_column(Integer) suffix: Mapped[str] = mapped_column(String(16), default="") label: Mapped[str] = mapped_column(String(128)) class WhyUsItem(Base): __tablename__ = "why_us" id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(256)) desc: Mapped[str] = mapped_column(Text, default="") class BeforeAfter(Base): __tablename__ = "before_after" id: Mapped[int] = mapped_column(primary_key=True) title: Mapped[str] = mapped_column(String(256), default="") lead: Mapped[str] = mapped_column(Text, default="") before: Mapped[str] = mapped_column(Text, default="") after: Mapped[str] = mapped_column(Text, default="") before_label: Mapped[str] = mapped_column(String(128), default="") after_label: Mapped[str] = mapped_column(String(128), default="") class ContactMessage(Base): __tablename__ = "contact_messages" id: Mapped[int] = mapped_column(primary_key=True) name: Mapped[str] = mapped_column(String(128)) phone: Mapped[str] = mapped_column(String(32)) note: Mapped[str] = mapped_column(Text, default="") is_read: Mapped[bool] = mapped_column(Boolean, default=False) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow) class Subscriber(Base): __tablename__ = "subscribers" id: Mapped[int] = mapped_column(primary_key=True) email: Mapped[str] = mapped_column(String(256), unique=True, index=True) is_active: Mapped[bool] = mapped_column(Boolean, default=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)