feat: Implement Supabase Improvement Repo

This commit is contained in:
Marty Oehme 2025-06-09 16:12:04 +02:00
parent d8be52e2cf
commit 29748178ec
Signed by: Marty
GPG key ID: 4E535BC19C61886E

View file

@ -1,10 +1,103 @@
from supabase import Client, create_client
from datetime import timezone
from typing import override
from gotrue import datetime
from supabase import Client
from prophet.config import SupaConfig
from prophet.domain.improvement import Improvement
from prophet.domain.improvement_repo import IImprovementRepo
from prophet.domain.original import Original
c = SupaConfig.from_env()
supabase: Client = create_client(c.URL, c.KEY)
class ImprovementSupaRepo(IImprovementRepo):
config: SupaConfig
client: Client
def __init__(self, config: SupaConfig | None = None) -> None:
self.config = config if config else SupaConfig.from_env()
self.client = Client(self.config.URL, self.config.KEY)
try:
_ = self.client.table(self.config.TABLE).select("*").limit(1)
except Exception as e:
print(e)
@override
def add(self, improvement: Improvement) -> None:
_ = (
self.client.table(self.config.TABLE)
.insert(self._to_tbl_row(improvement))
.execute()
)
@override
def add_all(self, improvements: list[Improvement]) -> None:
_ = (
self.client.table(self.config.TABLE)
.insert([self._to_tbl_row(i) for i in improvements])
.execute()
)
@override
def get(self, id: str) -> Improvement:
return self._from_tbl_row(
self.client.table(self.config.TABLE)
.select("*")
.eq("uuid", id)
.execute()
.data[0]
)
@override
def get_all(self) -> list[Improvement]:
return [
self._from_tbl_row(row)
for row in self.client.table(self.config.TABLE).select("*").execute().data
]
def _to_tbl_row(self, imp: Improvement) -> dict[str, str | int]:
return {
"uuid": imp.id,
"title": imp.title,
"summary": imp.summary,
"title_orig": imp.original.title,
"summary_orig": imp.original.summary,
"link_orig": imp.original.link,
"image_link_orig": imp.original.image_link or "",
"date_orig_ts": int(imp.original.date.astimezone(timezone.utc).timestamp()),
}
def _from_tbl_row(self, row: dict[str, str | int]) -> Improvement:
return Improvement(
id=str(row["uuid"]),
title=str(row["title"]),
summary=str(row["summary"]),
original=Original(
title=str(row["title_orig"]),
summary=str(row["summary_orig"]),
link=str(row["link_orig"]),
date=datetime.fromtimestamp(int(row["date_orig_ts"]), tz=timezone.utc),
image_link=str(row["image_link_orig"]),
),
)
if __name__ == "__main__":
print(supabase)
# response = supabase.table("improvements").select("*").execute()
repo = ImprovementSupaRepo()
# from prophet.app import grab_latest_originals
# latest = grab_latest_originals()
# print("LATEST", latest)
# improvements = [
# Improvement(
# title=f"{o.title} but cool",
# summary=f"{o.summary} but really cool",
# original=o,
# )
# for o in latest
# ]
# repo.add_all(improvements)
# print(repo.get_all())
# print(repo.get("6587d90e-952b-4866-85cc-836cebafcca2"))