Jul 8 - Implement QR code per facility
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import secrets
|
||||
from app import db
|
||||
from app.utils.time_utils import now_eastern
|
||||
|
||||
@@ -16,10 +17,28 @@ class Facility(db.Model):
|
||||
project_id = db.Column(db.Integer, db.ForeignKey('projects.id', ondelete='SET NULL'),
|
||||
nullable=True, index=True)
|
||||
|
||||
# Phase 34: unguessable token encoded in the facility's public QR code.
|
||||
# The QR points at /f/<public_token>, a login-free occupant summary page.
|
||||
# Backfilled for existing rows by phase34; set at creation for new rows.
|
||||
public_token = db.Column(db.String(48), nullable=True, unique=True, index=True)
|
||||
|
||||
# Relationships
|
||||
areas = db.relationship('Area', backref='facility', lazy='dynamic')
|
||||
inspections = db.relationship('Inspection', backref='facility', lazy='dynamic')
|
||||
|
||||
@staticmethod
|
||||
def generate_public_token() -> str:
|
||||
"""Return a fresh URL-safe token for the public QR link."""
|
||||
return secrets.token_urlsafe(24)
|
||||
|
||||
def ensure_public_token(self) -> str:
|
||||
"""Return this facility's public_token, generating & persisting one
|
||||
if it is missing (e.g. a row created before phase34 ran). The caller
|
||||
is responsible for db.session.commit()."""
|
||||
if not self.public_token:
|
||||
self.public_token = self.generate_public_token()
|
||||
return self.public_token
|
||||
|
||||
def __repr__(self):
|
||||
return f'<Facility {self.name}>'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user