mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-12 14:36:48 +03:00
feat: migrate to bun
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { z } from "zod";
|
||||
import { createClient } from "@libsql/client";
|
||||
import { drizzle } from "drizzle-orm/libsql";
|
||||
import { Database } from "bun:sqlite";
|
||||
import { drizzle } from "drizzle-orm/bun-sqlite";
|
||||
import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
|
||||
|
||||
import path from "path";
|
||||
@@ -11,11 +11,24 @@ const dataDir = path.join(process.cwd(), "data");
|
||||
const dbUrl =
|
||||
process.env.DATABASE_URL || `file:${path.join(dataDir, "gitea-mirror.db")}`;
|
||||
|
||||
// Create a client connection to the database
|
||||
export const client = createClient({ url: dbUrl });
|
||||
// Create a SQLite database instance using Bun's native driver
|
||||
export const sqlite = new Database(dbUrl);
|
||||
|
||||
// Simple async wrapper around Bun's SQLite API for compatibility
|
||||
export const client = {
|
||||
async execute(sql: string, params?: any[]) {
|
||||
const stmt = sqlite.query(sql);
|
||||
if (/^\s*select/i.test(sql)) {
|
||||
const rows = stmt.all(params ?? []);
|
||||
return { rows } as { rows: any[] };
|
||||
}
|
||||
stmt.run(params ?? []);
|
||||
return { rows: [] } as { rows: any[] };
|
||||
},
|
||||
};
|
||||
|
||||
// Create a drizzle instance
|
||||
export const db = drizzle(client);
|
||||
export const db = drizzle(sqlite);
|
||||
|
||||
// Define the tables
|
||||
export const users = sqliteTable("users", {
|
||||
|
||||
@@ -1,30 +1,23 @@
|
||||
import Redis from "ioredis";
|
||||
import { RedisClient } from "bun";
|
||||
|
||||
// Connect to Redis using REDIS_URL environment variable or default to redis://redis:6379
|
||||
// This ensures we have a fallback URL when running with Docker Compose
|
||||
const redisUrl = process.env.REDIS_URL ?? 'redis://redis:6379';
|
||||
const redisUrl = process.env.REDIS_URL ?? "redis://redis:6379";
|
||||
|
||||
console.log(`Connecting to Redis at: ${redisUrl}`);
|
||||
|
||||
// Configure Redis client with connection options
|
||||
const redisOptions = {
|
||||
retryStrategy: (times: number) => {
|
||||
// Retry with exponential backoff up to 30 seconds
|
||||
const delay = Math.min(times * 100, 3000);
|
||||
console.log(`Redis connection attempt ${times} failed. Retrying in ${delay}ms...`);
|
||||
return delay;
|
||||
},
|
||||
maxRetriesPerRequest: 5,
|
||||
enableReadyCheck: true,
|
||||
connectTimeout: 10000,
|
||||
function createClient() {
|
||||
return new RedisClient(redisUrl, {
|
||||
autoReconnect: true,
|
||||
});
|
||||
}
|
||||
|
||||
export const redis = createClient();
|
||||
export const redisPublisher = createClient();
|
||||
export const redisSubscriber = createClient();
|
||||
|
||||
redis.onconnect = () => console.log("Connected to Redis server");
|
||||
redis.onclose = (err) => {
|
||||
if (err) console.error("Disconnected from Redis server:", err);
|
||||
};
|
||||
|
||||
export const redis = new Redis(redisUrl, redisOptions);
|
||||
export const redisPublisher = new Redis(redisUrl, redisOptions); // For publishing
|
||||
export const redisSubscriber = new Redis(redisUrl, redisOptions); // For subscribing
|
||||
|
||||
// Log connection events
|
||||
redis.on('connect', () => console.log('Redis client connected'));
|
||||
redis.on('error', (err) => console.error('Redis client error:', err));
|
||||
redis.on('ready', () => console.log('Redis client ready'));
|
||||
redis.on('reconnecting', () => console.log('Redis client reconnecting...'));
|
||||
|
||||
Reference in New Issue
Block a user