Backend: - DraftDocument: Claude generates legal documents from case data + template type (14 template types: Klageschrift, UPC claims, Abmahnung, etc.) - CaseStrategy: Opus-powered strategic analysis with next steps, risk assessment, and timeline optimization (structured tool output) - FindSimilarCases: queries youpc.org Supabase for UPC cases, Claude ranks by relevance with explanations and key holdings Endpoints: POST /api/ai/draft-document, /case-strategy, /similar-cases All rate-limited (5 req/min) and permission-gated (PermAIExtraction). YouPC database connection is optional (YOUPC_DATABASE_URL env var).
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
_ "github.com/lib/pq"
|
|
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/auth"
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/config"
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/db"
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/logging"
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/router"
|
|
"mgit.msbls.de/m/KanzlAI-mGMT/internal/services"
|
|
)
|
|
|
|
func main() {
|
|
logging.Setup()
|
|
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
slog.Error("failed to load config", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
database, err := db.Connect(cfg.DatabaseURL)
|
|
if err != nil {
|
|
slog.Error("failed to connect to database", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
defer database.Close()
|
|
|
|
authMW := auth.NewMiddleware(cfg.SupabaseJWTSecret, database)
|
|
|
|
// Optional: connect to youpc.org database for similar case finder
|
|
var youpcDB *sqlx.DB
|
|
if cfg.YouPCDatabaseURL != "" {
|
|
youpcDB, err = sqlx.Connect("postgres", cfg.YouPCDatabaseURL)
|
|
if err != nil {
|
|
slog.Warn("failed to connect to youpc.org database — similar case finder disabled", "error", err)
|
|
youpcDB = nil
|
|
} else {
|
|
youpcDB.SetMaxOpenConns(5)
|
|
youpcDB.SetMaxIdleConns(2)
|
|
defer youpcDB.Close()
|
|
slog.Info("connected to youpc.org database for similar case finder")
|
|
}
|
|
}
|
|
|
|
// Start CalDAV sync service
|
|
calDAVSvc := services.NewCalDAVService(database)
|
|
calDAVSvc.Start()
|
|
defer calDAVSvc.Stop()
|
|
|
|
// Start notification reminder service
|
|
notifSvc := services.NewNotificationService(database)
|
|
notifSvc.Start()
|
|
defer notifSvc.Stop()
|
|
|
|
handler := router.New(database, authMW, cfg, calDAVSvc, notifSvc, youpcDB)
|
|
|
|
slog.Info("starting KanzlAI API server", "port", cfg.Port)
|
|
if err := http.ListenAndServe(":"+cfg.Port, handler); err != nil {
|
|
slog.Error("server failed", "error", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|