Renames all domain terminology from "Server" to "Space" throughout the application — database schema, API routes, shared types, stores, components, and UI strings. Files renamed: ServerSidebar → SpaceSidebar, CreateServer → CreateSpace, JoinServer → JoinSpace, ServerSettings → SpaceSettings, serverStore → spaceStore, routes/servers → routes/spaces.
82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import { getDb, schema } from './index.js';
|
|
import { generateSnowflake } from '../utils/snowflake.js';
|
|
import { hashPassword } from '../utils/auth.js';
|
|
import { eq } from 'drizzle-orm';
|
|
import { DEFAULT_EVERYONE_PERMISSIONS, permissionsToString } from '@backspace/shared/src/permissions.js';
|
|
|
|
export async function seedDatabase(): Promise<void> {
|
|
const db = getDb();
|
|
|
|
const existingSpaces = db.select().from(schema.spaces).all();
|
|
if (existingSpaces.length > 0) {
|
|
console.log('Database already has data, skipping seed');
|
|
return;
|
|
}
|
|
|
|
console.log('Seeding database with default data...');
|
|
|
|
const adminId = generateSnowflake();
|
|
const adminPasswordHash = await hashPassword('admin123');
|
|
|
|
db.insert(schema.users).values({
|
|
id: adminId,
|
|
username: 'admin',
|
|
displayName: 'Admin',
|
|
passwordHash: adminPasswordHash,
|
|
status: 'offline',
|
|
isAdmin: 1,
|
|
createdAt: Date.now(),
|
|
}).run();
|
|
|
|
const spaceId = generateSnowflake();
|
|
db.insert(schema.spaces).values({
|
|
id: spaceId,
|
|
name: 'Backspace',
|
|
ownerId: adminId,
|
|
inviteCode: 'backspace',
|
|
createdAt: Date.now(),
|
|
}).run();
|
|
|
|
db.insert(schema.spaceMembers).values({
|
|
spaceId: spaceId,
|
|
userId: adminId,
|
|
joinedAt: Date.now(),
|
|
}).run();
|
|
|
|
const generalChannelId = generateSnowflake();
|
|
db.insert(schema.channels).values({
|
|
id: generalChannelId,
|
|
spaceId: spaceId,
|
|
name: 'general',
|
|
type: 'text',
|
|
topic: 'General discussion',
|
|
position: 0,
|
|
createdAt: Date.now(),
|
|
}).run();
|
|
|
|
const voiceChannelId = generateSnowflake();
|
|
db.insert(schema.channels).values({
|
|
id: voiceChannelId,
|
|
spaceId: spaceId,
|
|
name: 'General Voice',
|
|
type: 'voice',
|
|
position: 1,
|
|
createdAt: Date.now(),
|
|
}).run();
|
|
|
|
// Create @everyone role (id === spaceId convention)
|
|
db.insert(schema.roles).values({
|
|
id: spaceId,
|
|
spaceId: spaceId,
|
|
name: '@everyone',
|
|
color: '#b9bbbe',
|
|
position: 0,
|
|
permissions: permissionsToString(DEFAULT_EVERYONE_PERMISSIONS),
|
|
createdAt: Date.now(),
|
|
}).run();
|
|
|
|
console.log('Database seeded successfully');
|
|
console.log(` Default space: Backspace (invite code: backspace)`);
|
|
console.log(` Admin user: admin / admin123`);
|
|
}
|