@@ -12,15 +12,24 @@ type JobService struct {
1212 db * sql.DB
1313}
1414
15+ const (
16+ JobStatePending = "PENDING"
17+ JobStateSucceeded = "SUCCEEDED"
18+ JobStateFailed = "FAILED"
19+ )
20+
1521func NewJobService (db * sql.DB ) * JobService {
1622 return & JobService {db }
1723}
1824
1925func (service * JobService ) Get (guid string ) (* core.Job , error ) {
20- candidates := service .getCollection (
21- "select * from jobs where guid = $1" ,
26+ candidates , err := service .getCollection (
27+ "SELECT * FROM jobs WHERE guid = $1" ,
2228 guid ,
2329 )
30+ if err != nil {
31+ return nil , err
32+ }
2433
2534 if err := expectingOne (len (candidates )); err != nil {
2635 return nil , err
@@ -32,7 +41,7 @@ func (service *JobService) Get(guid string) (*core.Job, error) {
3241func (service * JobService ) Delete (job * core.Job ) error {
3342 // Let's not try to delete something that isn't in the db
3443 if _ , err := service .Get (job .GUID ); err != nil {
35- return nil
44+ return fmt . Errorf ( "job with GUID %s not found: %v" , job . GUID , err )
3645 }
3746
3847 err := WithTransaction (service .db , func (tx Transaction ) error {
@@ -48,10 +57,13 @@ func (service *JobService) Delete(job *core.Job) error {
4857}
4958
5059func (service * JobService ) Named (name string ) (* core.Job , error ) {
51- candidates := service .getCollection (
52- "select * from jobs where name = $1" ,
60+ candidates , err := service .getCollection (
61+ "SELECT * FROM jobs WHERE name = $1" ,
5362 name ,
5463 )
64+ if err != nil {
65+ return nil , err
66+ }
5567
5668 if err := expectingOne (len (candidates )); err != nil {
5769 return nil , err
@@ -65,13 +77,13 @@ func (service *JobService) Persist(candidate *core.Job) (*core.Job, error) {
6577
6678 guid , err := core .GenGUID ()
6779 if err != nil {
68- return nil , fmt .Errorf ("coult not generate a job id" )
80+ return nil , fmt .Errorf ("could not generate a job id: %v" , err )
6981 }
7082
7183 candidate .GUID = guid
7284 candidate .CreatedAt = now
7385 candidate .UpdatedAt = now
74- candidate .State = "PENDING"
86+ candidate .State = JobStatePending
7587
7688 if candidate .DiskInMb == 0 {
7789 candidate .DiskInMb = 1024
@@ -83,7 +95,7 @@ func (service *JobService) Persist(candidate *core.Job) (*core.Job, error) {
8395
8496 err = WithTransaction (service .db , func (tx Transaction ) error {
8597 _ , aErr := tx .Exec (
86- "INSERT INTO jobs VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
98+ "INSERT INTO jobs (guid, name, command, disk_in_mb, memory_in_mb, state, app_guid, space_guid, created_at, updated_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
8799 candidate .GUID ,
88100 candidate .Name ,
89101 candidate .Command ,
@@ -107,14 +119,12 @@ func (service *JobService) Persist(candidate *core.Job) (*core.Job, error) {
107119}
108120
109121func (service * JobService ) Success (candidate * core.Job ) (* core.Job , error ) {
110- candidate .State = "SUCCEEDED"
111-
122+ candidate .State = JobStateSucceeded
112123 return service .update (candidate )
113124}
114125
115126func (service * JobService ) Fail (candidate * core.Job ) (* core.Job , error ) {
116- candidate .State = "FAILED"
117-
127+ candidate .State = JobStateFailed
118128 return service .update (candidate )
119129}
120130
@@ -125,7 +135,7 @@ func (service *JobService) update(candidate *core.Job) (*core.Job, error) {
125135
126136 err := WithTransaction (service .db , func (tx Transaction ) error {
127137 _ , aErr := tx .Exec (
128- "update jobs set updated_at = $3, state = $2 where guid = $1" ,
138+ "UPDATE jobs SET updated_at = $3, state = $2 WHERE guid = $1" ,
129139 candidate .GUID ,
130140 candidate .State ,
131141 candidate .UpdatedAt ,
@@ -141,53 +151,42 @@ func (service *JobService) update(candidate *core.Job) (*core.Job, error) {
141151 return candidate , nil
142152}
143153
144- func (service * JobService ) InSpace (guid string ) []* core.Job {
145- return service .getCollection (
146- "select * from jobs where space_guid = $1 ORDER BY name ASC" ,
154+ func (service * JobService ) InSpace (guid string ) ( []* core.Job , error ) {
155+ candidates , err := service .getCollection (
156+ "SELECT * FROM jobs WHERE space_guid = $1 ORDER BY name ASC" ,
147157 guid ,
148158 )
159+ if err != nil {
160+ return nil , err
161+ }
162+ return candidates , nil
149163}
150164
151- func (service * JobService ) getCollection (query string , args ... interface {}) []* core.Job {
152- collection := make ([]* core.Job , 0 )
165+ func (service * JobService ) scanJob (rows * sql.Rows ) (* core.Job , error ) {
166+ var job core.Job
167+ err := rows .Scan (& job .GUID , & job .Name , & job .Command , & job .DiskInMb , & job .MemoryInMb , & job .State , & job .AppGUID , & job .SpaceGUID , & job .CreatedAt , & job .UpdatedAt )
168+ if err != nil {
169+ return nil , err
170+ }
171+ return & job , nil
172+ }
173+
174+ func (service * JobService ) getCollection (query string , args ... interface {}) ([]* core.Job , error ) {
175+ var collection []* core.Job
153176
154177 rows , err := service .db .Query (query , args ... )
155178 if err != nil {
156- return collection
179+ return nil , err
157180 }
181+ defer rows .Close ()
158182
159183 for rows .Next () {
160- var guid string
161- var name string
162- var command string
163- var diskInMb int
164- var memoryInMb int
165- var state string
166- var spaceGUID string
167- var appGUID string
168- var createdAt time.Time
169- var updatedAt time.Time
170-
171- err := rows .Scan (& guid , & name , & command , & diskInMb , & memoryInMb , & state , & appGUID , & spaceGUID , & createdAt , & updatedAt )
184+ job , err := service .scanJob (rows )
172185 if err != nil {
173- continue
186+ return nil , err
174187 }
175-
176- candidate := & core.Job {
177- GUID : guid ,
178- Name : name ,
179- Command : command ,
180- DiskInMb : diskInMb ,
181- MemoryInMb : memoryInMb ,
182- State : state ,
183- SpaceGUID : spaceGUID ,
184- AppGUID : appGUID ,
185- CreatedAt : createdAt ,
186- UpdatedAt : updatedAt ,
187- }
188-
189- collection = append (collection , candidate )
188+ collection = append (collection , job )
190189 }
191190
192- return collection
191+ return collection , rows . Err ()
193192}
0 commit comments