this repo has no description
1import { Database } from "bun:sqlite";
2
3const db = new Database("bridge.db");
4
5db.run(`
6 CREATE TABLE IF NOT EXISTS channel_mappings (
7 id INTEGER PRIMARY KEY AUTOINCREMENT,
8 slack_channel_id TEXT NOT NULL UNIQUE,
9 irc_channel TEXT NOT NULL,
10 created_at INTEGER DEFAULT (strftime('%s', 'now'))
11 )
12`);
13
14db.run(`
15 CREATE TABLE IF NOT EXISTS user_mappings (
16 id INTEGER PRIMARY KEY AUTOINCREMENT,
17 slack_user_id TEXT NOT NULL UNIQUE,
18 irc_nick TEXT NOT NULL,
19 created_at INTEGER DEFAULT (strftime('%s', 'now'))
20 )
21`);
22
23export interface ChannelMapping {
24 id?: number;
25 slack_channel_id: string;
26 irc_channel: string;
27 created_at?: number;
28}
29
30export interface UserMapping {
31 id?: number;
32 slack_user_id: string;
33 irc_nick: string;
34 created_at?: number;
35}
36
37export const channelMappings = {
38 getAll(): ChannelMapping[] {
39 return db.query("SELECT * FROM channel_mappings").all() as ChannelMapping[];
40 },
41
42 getBySlackChannel(slackChannelId: string): ChannelMapping | null {
43 return db
44 .query("SELECT * FROM channel_mappings WHERE slack_channel_id = ?")
45 .get(slackChannelId) as ChannelMapping | null;
46 },
47
48 getByIrcChannel(ircChannel: string): ChannelMapping | null {
49 return db
50 .query("SELECT * FROM channel_mappings WHERE irc_channel = ?")
51 .get(ircChannel) as ChannelMapping | null;
52 },
53
54 create(slackChannelId: string, ircChannel: string): void {
55 db.run(
56 "INSERT OR REPLACE INTO channel_mappings (slack_channel_id, irc_channel) VALUES (?, ?)",
57 [slackChannelId, ircChannel],
58 );
59 },
60
61 delete(slackChannelId: string): void {
62 db.run("DELETE FROM channel_mappings WHERE slack_channel_id = ?", [
63 slackChannelId,
64 ]);
65 },
66};
67
68export const userMappings = {
69 getAll(): UserMapping[] {
70 return db.query("SELECT * FROM user_mappings").all() as UserMapping[];
71 },
72
73 getBySlackUser(slackUserId: string): UserMapping | null {
74 return db
75 .query("SELECT * FROM user_mappings WHERE slack_user_id = ?")
76 .get(slackUserId) as UserMapping | null;
77 },
78
79 getByIrcNick(ircNick: string): UserMapping | null {
80 return db
81 .query("SELECT * FROM user_mappings WHERE irc_nick = ?")
82 .get(ircNick) as UserMapping | null;
83 },
84
85 create(slackUserId: string, ircNick: string): void {
86 db.run(
87 "INSERT OR REPLACE INTO user_mappings (slack_user_id, irc_nick) VALUES (?, ?)",
88 [slackUserId, ircNick],
89 );
90 },
91
92 delete(slackUserId: string): void {
93 db.run("DELETE FROM user_mappings WHERE slack_user_id = ?", [slackUserId]);
94 },
95};
96
97export default db;