Add task to update tablo name in stream

This commit is contained in:
Arthur Belleville 2025-10-28 18:04:16 +01:00
parent 7eea2ea340
commit 40171dc878
No known key found for this signature in database
9 changed files with 1188 additions and 1091 deletions

View file

@ -13,7 +13,7 @@ R2_ACCOUNT_ID="9715fa14c5e5d1612301572cf1c6bbee"
R2_ACCESS_KEY_ID="caeb987bbcd601708a93c6aa562064ef"
R2_SECRET_ACCESS_KEY="42e455b25804687f7cff3d15be23c1f0f47ca742d7a41b6fa1a05a91041e0215"
SYNC_CALS_SECRET="hello"
TASKS_SECRET="hello"
EMAIL_USER="baptiste@xtablo.com"
EMAIL_CLIENT_ID="904332563417-e2n7pchtgnkrkp360baaebfeig55maig.apps.googleusercontent.com"

View file

@ -11,7 +11,7 @@ R2_ACCOUNT_ID="9715fa14c5e5d1612301572cf1c6bbee"
R2_ACCESS_KEY_ID="caeb987bbcd601708a93c6aa562064ef"
R2_SECRET_ACCESS_KEY="42e455b25804687f7cff3d15be23c1f0f47ca742d7a41b6fa1a05a91041e0215"
SYNC_CALS_SECRET="gT3BAytmNwhe1wKmvgREBlWcqK0="
TASKS_SECRET="gT3BAytmNwhe1wKmvgREBlWcqK0="
EMAIL_USER="baptiste@xtablo.com"
EMAIL_CLIENT_ID="904332563417-e2n7pchtgnkrkp360baaebfeig55maig.apps.googleusercontent.com"

View file

@ -18,7 +18,7 @@ export interface AppConfig {
R2_SECRET_ACCESS_KEY: string;
CORS_ORIGIN: string;
LOG_LEVEL: "debug" | "info" | "warn" | "error";
SYNC_CALS_SECRET: string;
TASKS_SECRET: string;
}
function validateEnvVar(name: string, value: string | undefined): string {
@ -61,7 +61,7 @@ function createConfig(): AppConfig {
R2_ACCOUNT_ID: validateEnvVar("R2_ACCOUNT_ID", process.env.R2_ACCOUNT_ID),
R2_ACCESS_KEY_ID: validateEnvVar("R2_ACCESS_KEY_ID", process.env.R2_ACCESS_KEY_ID),
R2_SECRET_ACCESS_KEY: validateEnvVar("R2_SECRET_ACCESS_KEY", process.env.R2_SECRET_ACCESS_KEY),
SYNC_CALS_SECRET: process.env.SYNC_CALS_SECRET || "",
TASKS_SECRET: process.env.TASKS_SECRET || "",
LOG_LEVEL: "info",
};

File diff suppressed because it is too large Load diff

View file

@ -1,8 +1,10 @@
import { S3Client } from "@aws-sdk/client-s3";
import type { SupabaseClient } from "@supabase/supabase-js";
import { Hono } from "hono";
import { Hono, type Context } from "hono";
import { config } from "./config.js";
import { writeCalendarFileToR2 } from "./helpers.js";
import { streamChatMiddleware } from "./middleware.js";
import type { StreamChat } from "stream-chat";
export const taskRouter = new Hono<{
Variables: { supabase: SupabaseClient };
@ -10,7 +12,7 @@ export const taskRouter = new Hono<{
taskRouter.post("/sync-calendars", async (c) => {
const supabase = c.get("supabase");
if (c.req.header("Authorization") !== `Basic ${config.SYNC_CALS_SECRET}`) {
if (c.req.header("Authorization") !== `Basic ${config.TASKS_SECRET}`) {
return c.json({ error: "Unauthorized" }, 401);
}
@ -48,3 +50,45 @@ taskRouter.post("/sync-calendars", async (c) => {
return c.json({ message: "Synced calendars" });
});
taskRouter.post(
"/sync-tablo-names",
streamChatMiddleware,
async (
c: Context<{ Variables: { supabase: SupabaseClient; streamServerClient: StreamChat } }>
) => {
const supabase = c.get("supabase");
const streamServerClient = c.get("streamServerClient");
if (c.req.header("Authorization") !== `Basic ${config.TASKS_SECRET}`) {
return c.json({ error: "Unauthorized" }, 401);
}
const fifteenMinutesInMilliseconds = 1000 * 60 * 15;
const { data, error } = await supabase
.from("tablos")
.select("id, name")
.gt("updated_at", new Date(Date.now() - fifteenMinutesInMilliseconds).toISOString());
if (error) {
return c.json({ error: error.message }, 500);
}
const tablosData = data as { id: string; name: string }[];
tablosData.forEach(async (tablo) => {
const channel = streamServerClient.channel("messaging", tablo.id);
try {
await channel.update({
// @ts-ignore
name: tablo.name,
});
} catch (error) {
console.error(`error updating channel, tablo id: ${tablo.id}, error: ${error}`);
}
});
return c.json({ message: `Synced ${tablosData.length} tablo names` });
}
);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,28 @@
-- Add updated_at column to tablos table
ALTER TABLE tablos
ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;
-- Update existing rows to have updated_at = created_at for consistency
UPDATE tablos
SET updated_at = created_at
WHERE updated_at IS NULL;
-- Create function to update updated_at timestamp for tablos
CREATE OR REPLACE FUNCTION update_tablos_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ language 'plpgsql';
-- Create trigger to automatically update updated_at on tablos
CREATE TRIGGER update_tablos_updated_at
BEFORE UPDATE ON tablos
FOR EACH ROW
EXECUTE FUNCTION update_tablos_updated_at();
-- Add comment to document the column
COMMENT ON COLUMN tablos.updated_at IS
'Timestamp when the tablo was last updated (auto-updated by trigger)';

View file

@ -535,6 +535,7 @@ export type Database = {
owner_id: string
position: number
status: string
updated_at: string | null
}
Insert: {
color?: string | null
@ -546,6 +547,7 @@ export type Database = {
owner_id: string
position?: number
status?: string
updated_at?: string | null
}
Update: {
color?: string | null
@ -557,6 +559,7 @@ export type Database = {
owner_id?: string
position?: number
status?: string
updated_at?: string | null
}
Relationships: []
}