Advertisement
dayment

Project Management Heao

Feb 11th, 2025
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.50 KB | Source Code | 0 0
  1. package main
  2.  
  3. import (
  4.     "container/heap"
  5.     "fmt"
  6.     "time"
  7. )
  8.  
  9. type Task struct {
  10.     ID          int
  11.     Name        string
  12.     Description string
  13.     Priority    int
  14.     Deadline    time.Time
  15.     Assignee    string
  16.     Status      string
  17. }
  18.  
  19. type TaskHeap []Task
  20.  
  21. func (h TaskHeap) Len() int { return len(h) }
  22. func (h TaskHeap) Less(i, j int) bool {
  23.     return (h[i].Priority*10 + int(time.Until(h[i].Deadline).Hours()/24)) < (h[j].Priority*10 + int(time.Until(h[j].Deadline).Hours()/24))
  24. }
  25. func (h TaskHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
  26. func (h *TaskHeap) Push(x interface{}) {
  27.     *h = append(*h, x.(Task))
  28. }
  29. func (h *TaskHeap) Pop() interface{} {
  30.     old := *h
  31.     n := len(old)
  32.     item := old[n-1]
  33.     *h = old[0 : n-1]
  34.     return item
  35. }
  36.  
  37. type TaskManager struct {
  38.     tasks     TaskHeap
  39.     idCounter int
  40. }
  41.  
  42. func (tm *TaskManager) InsertTask(name, description string, priority int, deadlineStr string) {
  43.     deadline, _ := time.Parse("2006-01-02 15:04", deadlineStr)
  44.     tm.idCounter++
  45.     task := Task{
  46.         ID:          tm.idCounter,
  47.         Name:        name,
  48.         Description: description,
  49.         Priority:    priority,
  50.         Deadline:    deadline,
  51.         Assignee:    "",
  52.         Status:      "Pending",
  53.     }
  54.     heap.Push(&tm.tasks, task)
  55.     fmt.Printf("Task '%s' telah ditambahkan!\n", name)
  56. }
  57.  
  58. func (tm *TaskManager) AssignTask(assignee string) {
  59.     if len(tm.tasks) == 0 {
  60.         fmt.Println("Tidak ada task yang tersedia untuk diassign!")
  61.         return
  62.     }
  63.     task := heap.Pop(&tm.tasks).(Task)
  64.     task.Assignee = assignee
  65.     task.Status = "In Progress"
  66.     fmt.Printf("Task '%s' telah diassign ke %s!\n", task.Name, assignee)
  67. }
  68.  
  69. func (tm *TaskManager) UpdateTask(id int, name, description *string, priority *int, deadlineStr *string) {
  70.     for i, task := range tm.tasks {
  71.         if task.ID == id {
  72.             if name != nil {
  73.                 tm.tasks[i].Name = *name
  74.             }
  75.             if description != nil {
  76.                 tm.tasks[i].Description = *description
  77.             }
  78.             if priority != nil {
  79.                 tm.tasks[i].Priority = *priority
  80.             }
  81.             if deadlineStr != nil {
  82.                 deadline, _ := time.Parse("2006-01-02 15:04", *deadlineStr)
  83.                 tm.tasks[i].Deadline = deadline
  84.             }
  85.             heap.Init(&tm.tasks)
  86.             fmt.Printf("Task '%s' telah diperbarui!\n", tm.tasks[i].Name)
  87.             return
  88.         }
  89.     }
  90.     fmt.Println("Task ID tidak ditemukan!")
  91. }
  92.  
  93. func main() {
  94.     tm := &TaskManager{}
  95.     heap.Init(&tm.tasks)
  96.  
  97.     tm.InsertTask("Bug Fixing", "Perbaiki bug di login page", 2, "2025-02-15 12:00")
  98.     tm.InsertTask("UI Update", "Update UI halaman utama", 3, "2025-02-14 09:00")
  99.     tm.AssignTask("Budi")
  100.     tm.UpdateTask(1, nil, nil, nil, nil)
  101. }
  102.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement