konfa-server/cmd/main.go
royalcat 77fa53dd1a
All checks were successful
docker / build-docker (push) Successful in 3m0s
config
2024-12-23 19:09:20 +03:00

100 lines
2.2 KiB
Go

package main
import (
"context"
"fmt"
"log"
"net"
"github.com/ilyakaznacheev/cleanenv"
"github.com/royalcat/konfa-server/pkg/uuid"
"github.com/royalcat/konfa-server/src/konfa"
"github.com/royalcat/konfa-server/src/proto"
chatv1 "github.com/royalcat/konfa-server/src/proto/konfa/chat/v1"
serverv1 "github.com/royalcat/konfa-server/src/proto/konfa/server/v1"
"github.com/royalcat/konfa-server/src/store"
"google.golang.org/grpc"
)
type Config struct {
DB string `env:"DB"`
}
func main() {
ctx := context.Background()
var cfg Config
err := cleanenv.ReadEnv(&cfg)
if err != nil {
panic(err)
}
db, dbpool, err := store.ConnectPostgres(ctx, cfg.DB)
if err != nil {
panic(err)
}
srv := konfa.NewService(db, dbpool)
grpcServer := grpc.NewServer(grpc.UnaryInterceptor(proto.Authenticate))
chatv1.RegisterChatServiceServer(grpcServer, proto.NewChatService(srv))
serverv1.RegisterServerServiceServer(grpcServer, proto.NewServerService(srv))
serverID, chanID, err := createKonfach(ctx, srv)
if err != nil {
panic(err)
}
println(serverID.String())
println(chanID.String())
port := 38100
lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
println("Server is running on port", port)
panic(grpcServer.Serve(lis))
}
func createKonfach(ctx context.Context, srv *konfa.Service) (uuid.UUID, uuid.UUID, error) {
var serverID uuid.UUID
servers, err := srv.ListServers(ctx)
if err != nil {
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to list servers: %w", err)
}
for _, serv := range servers {
if serv.Name == "konfach" {
serverID = serv.ID
}
}
if serverID == uuid.Nil {
serverID, err = srv.CreateServer(ctx, "konfach")
if err != nil {
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to create server: %w", err)
}
}
var chanID uuid.UUID
channels, err := srv.ListChannelsOnServer(ctx, serverID)
if err != nil {
return uuid.Nil, uuid.Nil, err
}
for _, channel := range channels {
if channel.Name == "general" {
chanID = channel.ID
}
}
if chanID == uuid.Nil {
chanID, err = srv.CreateChannel(ctx, serverID, "general")
if err != nil {
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to create channel: %w", err)
}
}
return serverID, chanID, nil
}