+13
-3
apps/tapper/index.ts
+13
-3
apps/tapper/index.ts
···
1
import { SimpleIndexer, Tap } from "@atproto/tap";
2
import { env } from "@tealfmbot/common/constants";
3
-
// import { db } from "./kysely/db.ts"
4
5
const tap = new Tap("https://tap.xero.systems", {
6
adminPassword: env.TAP_ADMIN_PASSWORD,
···
10
11
indexer.record(async (evt, opts) => {
12
const uri = `at://${evt.did}/${evt.collection}/${evt.rkey}`;
13
-
if (evt.action === "create" || evt.action === "update") {
14
// await db.insertInto("plays").values({
15
// played_time: evt?.record?.playedTime,
16
// release_name: evt?.record?.releaseName,
17
// track_name: evt?.record?.trackName,
18
// user_id: 4
19
-
// }).execute()
20
console.log(evt.record);
21
} else {
22
console.log(`deleted: ${uri}`);
···
1
import { SimpleIndexer, Tap } from "@atproto/tap";
2
import { env } from "@tealfmbot/common/constants";
3
+
// import { isTealRecord } from "./utils";
4
+
// import { db } from "@tealfmbot/database/db"
5
6
const tap = new Tap("https://tap.xero.systems", {
7
adminPassword: env.TAP_ADMIN_PASSWORD,
···
11
12
indexer.record(async (evt, opts) => {
13
const uri = `at://${evt.did}/${evt.collection}/${evt.rkey}`;
14
+
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
30
console.log(evt.record);
31
} else {
32
console.log(`deleted: ${uri}`);
+2
-1
apps/tapper/package.json
+2
-1
apps/tapper/package.json
+24
apps/tapper/utils.ts
+24
apps/tapper/utils.ts
···
···
1
+
type TealRecord = {
2
+
$type: "fm.teal.alpha.feed.play";
3
+
trackName: string;
4
+
trackMbId?: string;
5
+
recordingMbId?: string;
6
+
duration?: number;
7
+
releaseName?: string;
8
+
releaseMbId?: string;
9
+
isrc?: string;
10
+
originUrl?: string;
11
+
musicServiceBaseDomain?: string;
12
+
submissionClientAgent?: string;
13
+
playedTime?: Date;
14
+
artists: Artist[];
15
+
};
16
+
17
+
type Artist = {
18
+
artistMbId?: string;
19
+
artistName?: string;
20
+
};
21
+
22
+
export function isTealRecord(record: unknown): record is TealRecord {
23
+
return (record as TealRecord).$type === "fm.teal.alpha.feed.play";
24
+
}
+3
packages/database/database.d.ts
+3
packages/database/database.d.ts
···
27
}
28
29
export interface Plays {
30
+
cid: string | null;
31
id: Generated<number>;
32
indexed_at: Generated<Timestamp>;
33
live: boolean | null;
34
played_time: Timestamp;
35
release_name: string;
36
+
rkey: string | null;
37
track_name: string;
38
+
uri: string | null;
39
user_id: number;
40
}
41
+17
packages/database/migrations/1767553973566_add_cid_uri_rkey.ts
+17
packages/database/migrations/1767553973566_add_cid_uri_rkey.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").addColumn("cid", "varchar").addColumn("uri", "varchar").addColumn("rkey", "varchar").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").dropColumn("cid").dropColumn("uri").dropColumn("rkey").execute()
17
+
}
+3
pnpm-lock.yaml
+3
pnpm-lock.yaml