"""Peewee ORM models — full schema for phases 1-5.""" from datetime import UTC, datetime def _utcnow(): return datetime.now(UTC).replace(tzinfo=None) from peewee import ( BooleanField, CharField, DateTimeField, ForeignKeyField, IntegerField, Model, ) from imptune.db.database import db class BaseModel(Model): """Base model that binds all models to the shared db instance.""" class Meta: database = db class Owner(BaseModel): """Cookie-scoped identity — no accounts, just an opaque bearer key.""" key = CharField(unique=True, index=True) is_permanent = BooleanField(default=False) created_at = DateTimeField(default=_utcnow) class Meta: table_name = "owner" class Client(BaseModel): """Represents a deployment target (AD client / OU), scoped to an Owner.""" name = CharField() owner = ForeignKeyField(Owner, backref="clients") created_at = DateTimeField(default=_utcnow) class Meta: table_name = "client" indexes = ((("owner", "name"), True),) class Driver(BaseModel): """Uploaded printer driver package (content-addressed by SHA256).""" sha256 = CharField(unique=True, index=True) original_filename = CharField() size_bytes = IntegerField() uploaded_at = DateTimeField(default=_utcnow) driver_desc = CharField(null=True) inf_filename = CharField(null=True) architecture = CharField(null=True) has_cat_file = BooleanField(default=False) class Meta: table_name = "driver" class Printer(BaseModel): """Printer configuration record.""" name = CharField() ip_address = CharField() port_name = CharField() owner = ForeignKeyField(Owner, backref="printers") client = ForeignKeyField(Client, null=True, backref="printers") driver = ForeignKeyField(Driver, null=True, backref="printers") duplex_mode = CharField(default="OneSided") color_mode = BooleanField(default=True) paper_size = CharField(default="A4") collate = BooleanField(default=True) created_at = DateTimeField(default=_utcnow) updated_at = DateTimeField(default=_utcnow) class Meta: table_name = "printer" class Icon(BaseModel): """Printer icon image (one per printer).""" printer = ForeignKeyField(Printer, unique=True, backref="icons") sha256 = CharField() original_filename = CharField() size_bytes = IntegerField() uploaded_at = DateTimeField(default=_utcnow) class Meta: table_name = "icon"