diff --git a/main.go b/main.go index 339c23f..a923d4c 100644 --- a/main.go +++ b/main.go @@ -44,6 +44,8 @@ func main() { errl.Fatalf("repository: %v", err) } + seedDemoData(repo) + s := &Server{ Cfg: cfg, initialCfg: cfg, @@ -79,6 +81,10 @@ func (s *Server) resetLoop(interval time.Duration) { if resetter, ok := s.repo.(interface{ Reset() }); ok { resetter.Reset() } + + // Re-seed demo data after reset + seedDemoData(s.repo) + s.mu.Lock() s.Cfg = s.initialCfg s.resetAt = time.Now().Add(interval) diff --git a/seed.go b/seed.go new file mode 100644 index 0000000..14c471e --- /dev/null +++ b/seed.go @@ -0,0 +1,133 @@ +package main + +import ( + "fmt" + "time" + + "zeitkort-web/repository" +) + +func seedDemoData(repo repository.Repository) { + if resetter, ok := repo.(interface{ Reset() }); ok { + resetter.Reset() + } + + now := time.Now() + loc := now.Location() + + mukki, _ := repo.InsertCompany(repository.Company{ + Name: "Mukki", + Address: "Snoppiesgøta 1, FO-100 Tórshavn", + ContactEmail: "kontakt@mukki.fo", + ContactPhone: "+298 210000", + HourlyRate: 850, + }) + + teltlar, _ := repo.InsertCompany(repository.Company{ + Name: "Teldlar og Teldur", + Address: "Teldutrøð 5, FO-100 Tórshavn", + ContactEmail: "info@teltlar.fo", + ContactPhone: "+298 310000", + HourlyRate: 750, + }) + + sjogvur, _ := repo.InsertCompany(repository.Company{ + Name: "Sjógvur.fo", + Address: "Vesturgøta 22, FO-100 Tórshavn", + ContactEmail: "heiðri@sjogvur.fo", + ContactPhone: "+298 410000", + HourlyRate: 650, + }) + + mukkiAPI, _ := repo.InsertAssignment(repository.Assignment{ + CompanyID: mukki.ID, + Name: "Microservices Backend Migration", + Description: "Refactoring legacy monolith into Go microservices.", + HourlyRate: 850, + Status: "active", + }) + mukkiInfra, _ := repo.InsertAssignment(repository.Assignment{ + CompanyID: mukki.ID, + Name: "Kubernetes Cluster Setup", + Description: "Deploying K3s cluster.", + HourlyRate: 850, + Status: "active", + }) + + teltlarERP, _ := repo.InsertAssignment(repository.Assignment{ + CompanyID: teltlar.ID, + Name: "ERP Integration Module", + Description: "REST API bridge between SQL Server and frontend.", + HourlyRate: 750, + Status: "active", + }) + + sjogvurWeb, _ := repo.InsertAssignment(repository.Assignment{ + CompanyID: sjogvur.ID, + Name: "Corporate Website Redesign", + Description: "Modernizing frontend with Tailwind and static generation.", + HourlyRate: 650, + Status: "active", + }) + + tMukkiAPI, _ := repo.InsertTask(repository.Task{AssignmentID: mukkiAPI.ID, Name: "Design gRPC Protobufs"}) + tMukkiAPI2, _ := repo.InsertTask(repository.Task{AssignmentID: mukkiAPI.ID, Name: "Implement Auth Middleware"}) + tMukkiInfra, _ := repo.InsertTask(repository.Task{AssignmentID: mukkiInfra.ID, Name: "Ansible Playbooks"}) + + tTeltlar, _ := repo.InsertTask(repository.Task{AssignmentID: teltlarERP.ID, Name: "SQL Stored Procedures"}) + tTeltlar2, _ := repo.InsertTask(repository.Task{AssignmentID: teltlarERP.ID, Name: "API Endpoints"}) + + tSjogvur, _ := repo.InsertTask(repository.Task{AssignmentID: sjogvurWeb.ID, Name: "Design System"}) + tSjogvur2, _ := repo.InsertTask(repository.Task{AssignmentID: sjogvurWeb.ID, Name: "SEO Optimization"}) + + addSession := func(assignID, taskID int64, daysAgo int, hours float64) { + start := time.Date(now.Year(), now.Month(), now.Day()-daysAgo, 9, 0, 0, 0, loc) + end := start.Add(time.Duration(hours * float64(time.Hour))) + + task, _ := repo.GetTaskByID(taskID) + desc := fmt.Sprintf("%d - %s", task.Number, task.Name) + + repo.InsertManualWorkSession(repository.WorkSession{ + AssignmentID: assignID, + TaskID: taskID, + TaskDescription: desc, + StartTime: start, + EndTime: &end, + }) + } + + addSession(mukkiAPI.ID, tMukkiAPI.ID, 5, 4.5) + addSession(mukkiAPI.ID, tMukkiAPI2.ID, 3, 2.0) + addSession(mukkiInfra.ID, tMukkiInfra.ID, 1, 6.0) + + addSession(teltlarERP.ID, tTeltlar.ID, 4, 3.5) + addSession(teltlarERP.ID, tTeltlar2.ID, 2, 5.0) + + addSession(sjogvurWeb.ID, tSjogvur.ID, 6, 2.5) + addSession(sjogvurWeb.ID, tSjogvur2.ID, 0, 1.5) + + runningStart := now.Add(-45 * time.Minute) + task, _ := repo.GetTaskByID(tSjogvur2.ID) + desc := fmt.Sprintf("%d - %s", task.Number, task.Name) + + runningSession, _ := repo.InsertWorkSession(repository.WorkSession{ + AssignmentID: sjogvurWeb.ID, + TaskID: tSjogvur2.ID, + TaskDescription: desc, + StartTime: runningStart, + EndTime: nil, + }) + + if runningSession != nil { + updated := repository.WorkSession{ + ID: runningSession.ID, + AssignmentID: runningSession.AssignmentID, + TaskID: runningSession.TaskID, + TaskDescription: desc, + StartTime: runningSession.StartTime, + EndTime: runningSession.EndTime, + DurationMinutes: runningSession.DurationMinutes, + } + repo.UpdateWorkSession(runningSession.ID, updated) + } +}