-
Notifications
You must be signed in to change notification settings - Fork 157
/
task_read_repository.go
99 lines (81 loc) · 2.82 KB
/
task_read_repository.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package sqlite
import (
"database/sql"
"time"
"github.com/Tanibox/tania-core/src/tasks/domain"
"github.com/Tanibox/tania-core/src/tasks/repository"
"github.com/Tanibox/tania-core/src/tasks/storage"
"github.com/gofrs/uuid"
)
type TaskReadRepositorySqlite struct {
DB *sql.DB
}
func NewTaskReadRepositorySqlite(s *sql.DB) repository.TaskRead {
return &TaskReadRepositorySqlite{DB: s}
}
func (f *TaskReadRepositorySqlite) Save(taskRead *storage.TaskRead) <-chan error {
result := make(chan error)
go func() {
var dueDate *string
if taskRead.DueDate != nil && !taskRead.DueDate.IsZero() {
d := taskRead.DueDate.Format(time.RFC3339)
dueDate = &d
}
var completedDate *string
if taskRead.CompletedDate != nil && !taskRead.CompletedDate.IsZero() {
d := taskRead.CompletedDate.Format(time.RFC3339)
completedDate = &d
}
var cancelledDate *string
if taskRead.CancelledDate != nil && !taskRead.CancelledDate.IsZero() {
d := taskRead.CancelledDate.Format(time.RFC3339)
cancelledDate = &d
}
var domainDataMaterialID, domainDataAreaID *uuid.UUID
switch v := taskRead.DomainDetails.(type) {
case domain.TaskDomainArea:
domainDataMaterialID = v.MaterialID
case domain.TaskDomainCrop:
domainDataMaterialID = v.MaterialID
domainDataAreaID = v.AreaID
case domain.TaskDomainReservoir:
domainDataMaterialID = v.MaterialID
}
res, err := f.DB.Exec(`UPDATE TASK_READ SET
TITLE = ?, DESCRIPTION = ?, CREATED_DATE = ?, DUE_DATE = ?,
COMPLETED_DATE = ?, CANCELLED_DATE = ?, PRIORITY = ?, STATUS = ?,
DOMAIN_CODE = ?, DOMAIN_DATA_MATERIAL_ID = ?, DOMAIN_DATA_AREA_ID = ?,
CATEGORY = ?, IS_DUE = ?, ASSET_ID = ?
WHERE UID = ?`,
taskRead.Title, taskRead.Description, taskRead.CreatedDate.Format(time.RFC3339), dueDate,
completedDate, cancelledDate, taskRead.Priority, taskRead.Status,
taskRead.Domain, domainDataMaterialID, domainDataAreaID, taskRead.Category, taskRead.IsDue, taskRead.AssetID,
taskRead.UID)
if err != nil {
result <- err
}
rowsAffected := int64(0)
if res != nil {
rowsAffected, err = res.RowsAffected()
if err != nil {
result <- err
}
}
if rowsAffected == 0 {
_, err := f.DB.Exec(`INSERT INTO TASK_READ (
UID, TITLE, DESCRIPTION, CREATED_DATE, DUE_DATE,
COMPLETED_DATE, CANCELLED_DATE, PRIORITY, STATUS,
DOMAIN_CODE, DOMAIN_DATA_MATERIAL_ID, DOMAIN_DATA_AREA_ID, CATEGORY, IS_DUE, ASSET_ID)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
taskRead.UID, taskRead.Title, taskRead.Description, taskRead.CreatedDate.Format(time.RFC3339), dueDate,
completedDate, cancelledDate, taskRead.Priority, taskRead.Status,
taskRead.Domain, domainDataMaterialID, domainDataAreaID, taskRead.Category, taskRead.IsDue, taskRead.AssetID)
if err != nil {
result <- err
}
}
result <- nil
close(result)
}()
return result
}