chat/internal/repository/schema.go

40 lines
1.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package repository
import (
"chat/internal/library/cassandra"
"context"
"fmt"
)
// InitSchema 初始化 Cassandra keyspace 和表結構
func InitSchema(ctx context.Context, db *cassandra.DB, keyspace string) error {
// 建立 keyspace如果不存在
createKeyspaceStmt := fmt.Sprintf(
"CREATE KEYSPACE IF NOT EXISTS %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}",
keyspace,
)
session := db.GetSession()
if err := session.Query(createKeyspaceStmt, nil).Exec(); err != nil {
return fmt.Errorf("failed to create keyspace: %w", err)
}
// 建立 messages_by_room 表
createTableStmt := fmt.Sprintf(`
CREATE TABLE IF NOT EXISTS %s.messages_by_room (
room_id text,
bucket_day text,
ts bigint,
message_id text,
uid text,
content text,
PRIMARY KEY ((room_id, bucket_day), ts, message_id)
) WITH CLUSTERING ORDER BY (ts DESC, message_id DESC)
`, keyspace)
if err := session.Query(createTableStmt, nil).Exec(); err != nil {
return fmt.Errorf("failed to create messages_by_room table: %w", err)
}
return nil
}