-
Notifications
You must be signed in to change notification settings - Fork 0
/
service.go
78 lines (59 loc) · 2.53 KB
/
service.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
package timesheet
import (
"time"
"github.com/bryanmorgan/time-tracking-api/api"
"github.com/bryanmorgan/time-tracking-api/database"
)
// Compile Only: ensure interface is implemented
var _ TimeService = &TimeResource{}
type TimeService interface {
GetTimeEntriesForRange(profileId int, accountId int, start time.Time, end time.Time) ([]*TimeEntry, *api.Error)
SaveOrUpdateTimeEntries(entries []*TimeEntry) *api.Error
UpdateTimeEntries(entries []*TimeEntry) *api.Error
AddInitialProjectTimeEntries(profileId int, accountId int, start time.Time, end time.Time, projectId int, taskId int) *api.Error
DeleteProjectForDates(profileId int, accountId int, projectId int, taskId int, start time.Time, end time.Time) *api.Error
}
type TimeResource struct {
store TimeStore
}
func NewTimeService(store TimeStore) TimeService {
return &TimeResource{store: store}
}
func (c *TimeResource) GetTimeEntriesForRange(profileId int, accountId int, start time.Time, end time.Time) ([]*TimeEntry, *api.Error) {
timeEntries, err := c.store.GetTimeEntriesForRange(profileId, accountId, start, end)
if err != nil {
return nil, api.NewError(err, "Could not get time entries", api.SystemError)
}
return timeEntries, nil
}
func (c *TimeResource) SaveOrUpdateTimeEntries(entries []*TimeEntry) *api.Error {
err := c.store.SaveOrUpdateTimeEntries(entries)
if err != nil {
return api.NewError(err, "Failed to save or update time entries", api.SystemError)
}
return nil
}
func (c *TimeResource) UpdateTimeEntries(entries []*TimeEntry) *api.Error {
err := c.store.UpdateTimeEntries(entries)
if err != nil {
return api.NewError(err, "Failed to update time entries", api.SystemError)
}
return nil
}
func (c *TimeResource) AddInitialProjectTimeEntries(profileId int, accountId int, start time.Time, end time.Time, projectId int, taskId int) *api.Error {
err := c.store.AddInitialProjectTimeEntries(profileId, accountId, start, end, projectId, taskId)
if err != nil {
return api.NewError(err, "Failed to add initial project time entries", api.SystemError)
}
return nil
}
func (c *TimeResource) DeleteProjectForDates(profileId int, accountId int, projectId int, taskId int, start time.Time, end time.Time) *api.Error {
err := c.store.DeleteProjectForDates(profileId, accountId, projectId, taskId, start, end)
if err == database.NoRowAffectedError {
return api.NewError(err, "No matching project/task time entries found", api.InvalidField)
}
if err != nil {
return api.NewError(err, "Failed to delete project from time entries", api.SystemError)
}
return nil
}