Files
agent-evals/backend/cmd/server/main.go
Evan Reichard 5b67cb61d2 feat(markdown-editor): implement wysiswyg markdown editor with live preview
- Build Go backend with Cobra CLI and REST API
  - CRUD operations for markdown files (GET, POST, PUT, DELETE)
  - File storage with flat .md file structure
  - Comprehensive logrus logging with JSON format
  - Static asset serving for frontend

- Build React/TypeScript frontend with Tailwind CSS
  - Markdown editor with live GFM preview
  - File management UI (list, create, open, delete)
  - Theme system (Dark/Light/System) with persistence
  - Responsive design (320px mobile, 1920px desktop)

- Add comprehensive test coverage
  - Backend: API, storage, and logger tests (13 tests passing)
  - Frontend: Editor and App component tests

- Setup Nix development environment with Go, Node.js, and TypeScript
2026-02-05 17:48:23 -05:00

74 lines
1.6 KiB
Go

package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"github.com/markdown-editor/internal/api"
"github.com/markdown-editor/pkg/logger"
"github.com/spf13/cobra"
)
var (
dataDir string
host string
port int
)
func main() {
rootCmd := &cobra.Command{
Use: "server",
Short: "Markdown Editor Server",
Run: runServer,
}
rootCmd.Flags().StringVar(&dataDir, "data-dir", "./data", "Storage path for markdown files")
rootCmd.Flags().StringVar(&host, "host", "127.0.0.1", "Bind address")
rootCmd.Flags().IntVar(&port, "port", 8080, "Server port")
if err := rootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func runServer(cmd *cobra.Command, args []string) {
// Initialize logger
logger.Init()
logger.Info("Starting Markdown Editor Server")
logger.Infof("Data directory: %s", dataDir)
logger.Infof("Server will bind to %s:%d", host, port)
// Initialize API server
svr, err := api.NewServer(dataDir, host, port)
if err != nil {
logger.Fatalf("Failed to initialize server: %v", err)
}
// Setup signal handling for graceful shutdown
ctx, cancel := signal.NotifyContext(cmd.Context(), syscall.SIGINT, syscall.SIGTERM)
defer cancel()
// Start server in a goroutine
errChan := make(chan error, 1)
go func() {
logger.Infof("Server listening on %s:%d", host, port)
errChan <- svr.Start()
}()
// Wait for shutdown signal or error
select {
case <-ctx.Done():
logger.Info("Shutdown signal received")
case err := <-errChan:
if err != nil {
logger.Fatalf("Server error: %v", err)
}
}
logger.Info("Server stopped gracefully")
}