Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "container/heap"
- "fmt"
- "time"
- )
- type Task struct {
- ID int
- Name string
- Description string
- Priority int
- Deadline time.Time
- Assignee string
- Status string
- }
- type TaskHeap []Task
- func (h TaskHeap) Len() int { return len(h) }
- func (h TaskHeap) Less(i, j int) bool {
- 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))
- }
- func (h TaskHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
- func (h *TaskHeap) Push(x interface{}) {
- *h = append(*h, x.(Task))
- }
- func (h *TaskHeap) Pop() interface{} {
- old := *h
- n := len(old)
- item := old[n-1]
- *h = old[0 : n-1]
- return item
- }
- type TaskManager struct {
- tasks TaskHeap
- idCounter int
- }
- func (tm *TaskManager) InsertTask(name, description string, priority int, deadlineStr string) {
- deadline, _ := time.Parse("2006-01-02 15:04", deadlineStr)
- tm.idCounter++
- task := Task{
- ID: tm.idCounter,
- Name: name,
- Description: description,
- Priority: priority,
- Deadline: deadline,
- Assignee: "",
- Status: "Pending",
- }
- heap.Push(&tm.tasks, task)
- fmt.Printf("Task '%s' telah ditambahkan!\n", name)
- }
- func (tm *TaskManager) AssignTask(assignee string) {
- if len(tm.tasks) == 0 {
- fmt.Println("Tidak ada task yang tersedia untuk diassign!")
- return
- }
- task := heap.Pop(&tm.tasks).(Task)
- task.Assignee = assignee
- task.Status = "In Progress"
- fmt.Printf("Task '%s' telah diassign ke %s!\n", task.Name, assignee)
- }
- func (tm *TaskManager) UpdateTask(id int, name, description *string, priority *int, deadlineStr *string) {
- for i, task := range tm.tasks {
- if task.ID == id {
- if name != nil {
- tm.tasks[i].Name = *name
- }
- if description != nil {
- tm.tasks[i].Description = *description
- }
- if priority != nil {
- tm.tasks[i].Priority = *priority
- }
- if deadlineStr != nil {
- deadline, _ := time.Parse("2006-01-02 15:04", *deadlineStr)
- tm.tasks[i].Deadline = deadline
- }
- heap.Init(&tm.tasks)
- fmt.Printf("Task '%s' telah diperbarui!\n", tm.tasks[i].Name)
- return
- }
- }
- fmt.Println("Task ID tidak ditemukan!")
- }
- func main() {
- tm := &TaskManager{}
- heap.Init(&tm.tasks)
- tm.InsertTask("Bug Fixing", "Perbaiki bug di login page", 2, "2025-02-15 12:00")
- tm.InsertTask("UI Update", "Update UI halaman utama", 3, "2025-02-14 09:00")
- tm.AssignTask("Budi")
- tm.UpdateTask(1, nil, nil, nil, nil)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement