Files
simbarag/blueprints/beli/models.py
T
ryan c682d2b320 Add beli_category (RES/DES/BAR/BAK) to restaurant records
Store Beli's category code on each ranking so the agent can filter by type
(restaurant/bar/cafe/bakery). Category label shown in tool output.

Requires migration for beli_category column + updated unique constraint.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-09-17 22:09:09 -04:00

67 lines
2.5 KiB
Python

import enum
import uuid
from tortoise import fields
from tortoise.models import Model
from blueprints.email.crypto_service import EncryptedTextField
class BeliStatus(str, enum.Enum):
BEEN = "been"
WANT_TO_TRY = "want_to_try"
class BeliProfile(Model):
id = fields.UUIDField(primary_key=True, default=uuid.uuid4)
user = fields.ForeignKeyField("models.User", related_name="beli_profiles")
beli_email = fields.CharField(max_length=255)
beli_password = EncryptedTextField()
beli_user_id = fields.CharField(max_length=255, null=True)
# refresh token lasts 7 days; we store it encrypted to avoid re-authenticating each run
beli_refresh_token = EncryptedTextField(null=True)
last_refreshed_at = fields.DatetimeField(null=True)
last_error = fields.TextField(null=True)
enabled = fields.BooleanField(default=True)
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
class Meta:
table = "beli_profiles"
unique_together = (("user", "beli_email"),)
class BeliRestaurant(Model):
id = fields.UUIDField(primary_key=True, default=uuid.uuid4)
profile = fields.ForeignKeyField("models.BeliProfile", related_name="restaurants")
beli_business_id = fields.CharField(max_length=255)
# Empty string = profile owner's own ranking; UUID string = a followed user's ranking
friend_beli_user_id = fields.CharField(max_length=255, default="")
friend_name = fields.CharField(max_length=255, null=True)
# Beli category code: RES / DES / BAR / BAK; empty for bookmarks
beli_category = fields.CharField(max_length=10, default="")
name = fields.CharField(max_length=500)
city = fields.CharField(max_length=255, null=True)
neighborhood = fields.CharField(max_length=255, null=True)
cuisine = fields.JSONField(default=list)
price_range = fields.CharField(max_length=10, null=True)
status = fields.CharEnumField(enum_type=BeliStatus, max_length=20)
rank_index = fields.IntField(null=True)
score = fields.DecimalField(max_digits=5, decimal_places=2, null=True)
notes = fields.TextField(null=True)
tags = fields.JSONField(default=list)
fetched_at = fields.DatetimeField(auto_now=True)
created_at = fields.DatetimeField(auto_now_add=True)
class Meta:
table = "beli_restaurants"
unique_together = (
(
"profile",
"beli_business_id",
"status",
"friend_beli_user_id",
"beli_category",
),
)