A discord bot for teal.fm
discord tealfm music

make release_name and played_time optional

besaid.zone 2aa95438 e4a8259a

verified
Changed files
+39 -19
apps
tapper
packages
+19 -17
apps/tapper/index.ts
··· 1 1 import { SimpleIndexer, Tap } from "@atproto/tap"; 2 2 import { env } from "@tealfmbot/common/constants"; 3 - // import { isTealRecord } from "./utils"; 4 - // import { db } from "@tealfmbot/database/db" 3 + import { db } from "@tealfmbot/database/db"; 4 + 5 + import { isTealRecord } from "./utils"; 5 6 6 7 const tap = new Tap("https://tap.xero.systems", { 7 8 adminPassword: env.TAP_ADMIN_PASSWORD, ··· 12 13 indexer.record(async (evt, opts) => { 13 14 const uri = `at://${evt.did}/${evt.collection}/${evt.rkey}`; 14 15 if (evt.action === "create") { 15 - // if (isTealRecord(evt.record) && typeof evt !== "undefined" && typeof evt.record !== 'undefined') { 16 - // await db.insertInto("plays").values({ 17 - // release_name: evt?.record?.releaseName, 18 - // played_time: evt?.record?.playedTime, 19 - // track_name: evt?.record?.trackName, 20 - // indexed_at: new Date().toJSON(), 21 - // live: evt.live 22 - // }).execute() 23 - // } 24 - // await db.insertInto("plays").values({ 25 - // played_time: evt?.record?.playedTime, 26 - // release_name: evt?.record?.releaseName, 27 - // track_name: evt?.record?.trackName, 28 - // user_id: 4 29 - // }).execute 16 + if (isTealRecord(evt.record)) { 17 + await db 18 + .insertInto("plays") 19 + .values({ 20 + cid: evt?.cid, 21 + rkey: evt?.rkey, 22 + uri, 23 + release_name: evt?.record?.releaseName, 24 + played_time: evt?.record?.playedTime, 25 + track_name: evt?.record?.trackName, 26 + indexed_at: new Date().toJSON(), 27 + live: evt.live, 28 + user_id: 1 29 + }) 30 + .execute(); 31 + } 30 32 console.log(evt.record); 31 33 } else { 32 34 console.log(`deleted: ${uri}`);
+2 -2
packages/database/database.d.ts
··· 31 31 id: Generated<number>; 32 32 indexed_at: Generated<Timestamp>; 33 33 live: boolean | null; 34 - played_time: Timestamp; 35 - release_name: string; 34 + played_time: Timestamp | null; 35 + release_name: string | null; 36 36 rkey: string | null; 37 37 track_name: string; 38 38 uri: string | null;
+18
packages/database/migrations/1767554974033_release_name_and_played_time_optional.ts
··· 1 + import type { Kysely } from 'kysely' 2 + 3 + // `any` is required here since migrations should be frozen in time. alternatively, keep a "snapshot" db interface. 4 + export async function up(db: Kysely<any>): Promise<void> { 5 + // up migration code goes here... 6 + // note: up migrations are mandatory. you must implement this function. 7 + // For more info, see: https://kysely.dev/docs/migrations 8 + await db.schema.alterTable("plays").alterColumn("release_name", (col) => col.dropNotNull()).alterColumn("played_time", (col) => col.dropNotNull()).execute() 9 + } 10 + 11 + // `any` is required here since migrations should be frozen in time. alternatively, keep a "snapshot" db interface. 12 + export async function down(db: Kysely<any>): Promise<void> { 13 + // down migration code goes here... 14 + // note: down migrations are optional. you can safely delete this function. 15 + // For more info, see: https://kysely.dev/docs/migrations 16 + await db.schema.alterTable("plays").alterColumn("played_time", (col) => col.setNotNull()) 17 + .alterColumn("release_name", (col) => col.setNotNull()).execute() 18 + }