Transition from ex-GORM structs to sqlc structs (3/5)
Replace old used-to-be-GORM datastructures (#104305) with sqlc-generated structs. This also makes it possible to use more specific structs that are more taylored to the specific queries, increasing efficiency. This commit deals with worker tags (on both workers and jobs). Functional changes are kept to a minimum, as the API still serves the same data. Because this work covers so much of Flamenco's code, it's been split up into different commits. Each commit brings Flamenco to a state where it compiles and unit tests pass. Only the result of the final commit has actually been tested properly. Ref: #104343
This commit is contained in:
parent
84f93e7502
commit
c04e4992e0
@ -72,8 +72,8 @@ type PersistenceService interface {
|
|||||||
// Worker tag management.
|
// Worker tag management.
|
||||||
WorkerSetTags(ctx context.Context, worker *persistence.Worker, tagUUIDs []string) error
|
WorkerSetTags(ctx context.Context, worker *persistence.Worker, tagUUIDs []string) error
|
||||||
CreateWorkerTag(ctx context.Context, tag *persistence.WorkerTag) error
|
CreateWorkerTag(ctx context.Context, tag *persistence.WorkerTag) error
|
||||||
FetchWorkerTag(ctx context.Context, uuid string) (*persistence.WorkerTag, error)
|
FetchWorkerTag(ctx context.Context, uuid string) (persistence.WorkerTag, error)
|
||||||
FetchWorkerTags(ctx context.Context) ([]*persistence.WorkerTag, error)
|
FetchWorkerTags(ctx context.Context) ([]persistence.WorkerTag, error)
|
||||||
DeleteWorkerTag(ctx context.Context, uuid string) error
|
DeleteWorkerTag(ctx context.Context, uuid string) error
|
||||||
SaveWorkerTag(ctx context.Context, tag *persistence.WorkerTag) error
|
SaveWorkerTag(ctx context.Context, tag *persistence.WorkerTag) error
|
||||||
FetchTagsOfWorker(ctx context.Context, workerUUID string) ([]persistence.WorkerTag, error)
|
FetchTagsOfWorker(ctx context.Context, workerUUID string) ([]persistence.WorkerTag, error)
|
||||||
|
@ -330,7 +330,7 @@ func TestSubmitJobWithWorkerTag(t *testing.T) {
|
|||||||
|
|
||||||
workerTagUUID := "04435762-9dc8-4f13-80b7-643a6fa5b6fd"
|
workerTagUUID := "04435762-9dc8-4f13-80b7-643a6fa5b6fd"
|
||||||
tag := persistence.WorkerTag{
|
tag := persistence.WorkerTag{
|
||||||
Model: persistence.Model{ID: 47},
|
ID: 47,
|
||||||
UUID: workerTagUUID,
|
UUID: workerTagUUID,
|
||||||
Name: "first tag",
|
Name: "first tag",
|
||||||
Description: "my first tag",
|
Description: "my first tag",
|
||||||
@ -383,7 +383,7 @@ func TestSubmitJobWithWorkerTag(t *testing.T) {
|
|||||||
Settings: persistence.StringInterfaceMap{},
|
Settings: persistence.StringInterfaceMap{},
|
||||||
Metadata: persistence.StringStringMap{},
|
Metadata: persistence.StringStringMap{},
|
||||||
|
|
||||||
WorkerTagID: &tag.ID,
|
WorkerTagID: ptr(uint(tag.ID)),
|
||||||
WorkerTag: &tag,
|
WorkerTag: &tag,
|
||||||
}
|
}
|
||||||
mf.persistence.EXPECT().FetchJob(gomock.Any(), queuedJob.JobID).Return(&dbJob, nil)
|
mf.persistence.EXPECT().FetchJob(gomock.Any(), queuedJob.JobID).Return(&dbJob, nil)
|
||||||
|
16
internal/manager/api_impl/mocks/api_impl_mock.gen.go
generated
16
internal/manager/api_impl/mocks/api_impl_mock.gen.go
generated
@ -144,7 +144,7 @@ func (mr *MockPersistenceServiceMockRecorder) CreateWorker(arg0, arg1 interface{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CreateWorkerTag mocks base method.
|
// CreateWorkerTag mocks base method.
|
||||||
func (m *MockPersistenceService) CreateWorkerTag(arg0 context.Context, arg1 *persistence.WorkerTag) error {
|
func (m *MockPersistenceService) CreateWorkerTag(arg0 context.Context, arg1 *sqlc.WorkerTag) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "CreateWorkerTag", arg0, arg1)
|
ret := m.ctrl.Call(m, "CreateWorkerTag", arg0, arg1)
|
||||||
ret0, _ := ret[0].(error)
|
ret0, _ := ret[0].(error)
|
||||||
@ -231,10 +231,10 @@ func (mr *MockPersistenceServiceMockRecorder) FetchJobs(arg0 interface{}) *gomoc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FetchTagsOfWorker mocks base method.
|
// FetchTagsOfWorker mocks base method.
|
||||||
func (m *MockPersistenceService) FetchTagsOfWorker(arg0 context.Context, arg1 string) ([]persistence.WorkerTag, error) {
|
func (m *MockPersistenceService) FetchTagsOfWorker(arg0 context.Context, arg1 string) ([]sqlc.WorkerTag, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "FetchTagsOfWorker", arg0, arg1)
|
ret := m.ctrl.Call(m, "FetchTagsOfWorker", arg0, arg1)
|
||||||
ret0, _ := ret[0].([]persistence.WorkerTag)
|
ret0, _ := ret[0].([]sqlc.WorkerTag)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@ -306,10 +306,10 @@ func (mr *MockPersistenceServiceMockRecorder) FetchWorker(arg0, arg1 interface{}
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FetchWorkerTag mocks base method.
|
// FetchWorkerTag mocks base method.
|
||||||
func (m *MockPersistenceService) FetchWorkerTag(arg0 context.Context, arg1 string) (*persistence.WorkerTag, error) {
|
func (m *MockPersistenceService) FetchWorkerTag(arg0 context.Context, arg1 string) (sqlc.WorkerTag, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "FetchWorkerTag", arg0, arg1)
|
ret := m.ctrl.Call(m, "FetchWorkerTag", arg0, arg1)
|
||||||
ret0, _ := ret[0].(*persistence.WorkerTag)
|
ret0, _ := ret[0].(sqlc.WorkerTag)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@ -321,10 +321,10 @@ func (mr *MockPersistenceServiceMockRecorder) FetchWorkerTag(arg0, arg1 interfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FetchWorkerTags mocks base method.
|
// FetchWorkerTags mocks base method.
|
||||||
func (m *MockPersistenceService) FetchWorkerTags(arg0 context.Context) ([]*persistence.WorkerTag, error) {
|
func (m *MockPersistenceService) FetchWorkerTags(arg0 context.Context) ([]sqlc.WorkerTag, error) {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "FetchWorkerTags", arg0)
|
ret := m.ctrl.Call(m, "FetchWorkerTags", arg0)
|
||||||
ret0, _ := ret[0].([]*persistence.WorkerTag)
|
ret0, _ := ret[0].([]sqlc.WorkerTag)
|
||||||
ret1, _ := ret[1].(error)
|
ret1, _ := ret[1].(error)
|
||||||
return ret0, ret1
|
return ret0, ret1
|
||||||
}
|
}
|
||||||
@ -466,7 +466,7 @@ func (mr *MockPersistenceServiceMockRecorder) SaveWorkerStatus(arg0, arg1 interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SaveWorkerTag mocks base method.
|
// SaveWorkerTag mocks base method.
|
||||||
func (m *MockPersistenceService) SaveWorkerTag(arg0 context.Context, arg1 *persistence.WorkerTag) error {
|
func (m *MockPersistenceService) SaveWorkerTag(arg0 context.Context, arg1 *sqlc.WorkerTag) error {
|
||||||
m.ctrl.T.Helper()
|
m.ctrl.T.Helper()
|
||||||
ret := m.ctrl.Call(m, "SaveWorkerTag", arg0, arg1)
|
ret := m.ctrl.Call(m, "SaveWorkerTag", arg0, arg1)
|
||||||
ret0, _ := ret[0].(error)
|
ret0, _ := ret[0].(error)
|
||||||
|
@ -336,9 +336,6 @@ func (f *Flamenco) FetchWorkerTag(e echo.Context, tagUUID string) error {
|
|||||||
logger.Error().Err(err).Msg("fetching worker tag")
|
logger.Error().Err(err).Msg("fetching worker tag")
|
||||||
return sendAPIError(e, http.StatusInternalServerError, "error fetching worker tag: %v", err)
|
return sendAPIError(e, http.StatusInternalServerError, "error fetching worker tag: %v", err)
|
||||||
}
|
}
|
||||||
if tag == nil {
|
|
||||||
panic("Could fetch a worker tag without error, but then the returned tag was still nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
return e.JSON(http.StatusOK, workerTagDBtoAPI(tag))
|
return e.JSON(http.StatusOK, workerTagDBtoAPI(tag))
|
||||||
}
|
}
|
||||||
@ -388,7 +385,7 @@ func (f *Flamenco) UpdateWorkerTag(e echo.Context, tagUUID string) error {
|
|||||||
}
|
}
|
||||||
logger = logCtx.Logger()
|
logger = logCtx.Logger()
|
||||||
|
|
||||||
if err := f.persist.SaveWorkerTag(ctx, dbTag); err != nil {
|
if err := f.persist.SaveWorkerTag(ctx, &dbTag); err != nil {
|
||||||
logger.Error().Err(err).Msg("saving worker tag")
|
logger.Error().Err(err).Msg("saving worker tag")
|
||||||
return sendAPIError(e, http.StatusInternalServerError, "error saving worker tag")
|
return sendAPIError(e, http.StatusInternalServerError, "error saving worker tag")
|
||||||
}
|
}
|
||||||
@ -414,7 +411,7 @@ func (f *Flamenco) FetchWorkerTags(e echo.Context) error {
|
|||||||
apiTags := []api.WorkerTag{}
|
apiTags := []api.WorkerTag{}
|
||||||
for _, dbTag := range dbTags {
|
for _, dbTag := range dbTags {
|
||||||
apiTag := workerTagDBtoAPI(dbTag)
|
apiTag := workerTagDBtoAPI(dbTag)
|
||||||
apiTags = append(apiTags, *apiTag)
|
apiTags = append(apiTags, apiTag)
|
||||||
}
|
}
|
||||||
|
|
||||||
tagList := api.WorkerTagList{
|
tagList := api.WorkerTagList{
|
||||||
@ -466,10 +463,10 @@ func (f *Flamenco) CreateWorkerTag(e echo.Context) error {
|
|||||||
logger.Info().Msg("created new worker tag")
|
logger.Info().Msg("created new worker tag")
|
||||||
|
|
||||||
// SocketIO broadcast of tag creation.
|
// SocketIO broadcast of tag creation.
|
||||||
sioUpdate := eventbus.NewWorkerTagUpdate(&dbTag)
|
sioUpdate := eventbus.NewWorkerTagUpdate(dbTag)
|
||||||
f.broadcaster.BroadcastNewWorkerTag(sioUpdate)
|
f.broadcaster.BroadcastNewWorkerTag(sioUpdate)
|
||||||
|
|
||||||
return e.JSON(http.StatusOK, workerTagDBtoAPI(&dbTag))
|
return e.JSON(http.StatusOK, workerTagDBtoAPI(dbTag))
|
||||||
}
|
}
|
||||||
|
|
||||||
func workerSummary(w persistence.Worker) api.WorkerSummary {
|
func workerSummary(w persistence.Worker) api.WorkerSummary {
|
||||||
@ -504,11 +501,7 @@ func workerDBtoAPI(w persistence.Worker) api.Worker {
|
|||||||
return apiWorker
|
return apiWorker
|
||||||
}
|
}
|
||||||
|
|
||||||
func workerTagDBtoAPI(wc *persistence.WorkerTag) *api.WorkerTag {
|
func workerTagDBtoAPI(wc persistence.WorkerTag) api.WorkerTag {
|
||||||
if wc == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
uuid := wc.UUID // Take a copy for safety.
|
uuid := wc.UUID // Take a copy for safety.
|
||||||
|
|
||||||
apiTag := api.WorkerTag{
|
apiTag := api.WorkerTag{
|
||||||
@ -518,5 +511,5 @@ func workerTagDBtoAPI(wc *persistence.WorkerTag) *api.WorkerTag {
|
|||||||
if len(wc.Description) > 0 {
|
if len(wc.Description) > 0 {
|
||||||
apiTag.Description = &wc.Description
|
apiTag.Description = &wc.Description
|
||||||
}
|
}
|
||||||
return &apiTag
|
return apiTag
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
|
|||||||
assertResponseJSON(t, echo, http.StatusOK, &apiTag)
|
assertResponseJSON(t, echo, http.StatusOK, &apiTag)
|
||||||
|
|
||||||
// Fetch the tag
|
// Fetch the tag
|
||||||
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
|
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(expectDBTag, nil)
|
||||||
echo = mf.prepareMockedRequest(nil)
|
echo = mf.prepareMockedRequest(nil)
|
||||||
require.NoError(t, mf.flamenco.FetchWorkerTag(echo, UUID))
|
require.NoError(t, mf.flamenco.FetchWorkerTag(echo, UUID))
|
||||||
assertResponseJSON(t, echo, http.StatusOK, &apiTag)
|
assertResponseJSON(t, echo, http.StatusOK, &apiTag)
|
||||||
@ -330,7 +330,7 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
|
|||||||
Description: apiTag.Description,
|
Description: apiTag.Description,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
|
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(expectDBTag, nil)
|
||||||
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
||||||
echo = mf.prepareMockedJSONRequest(newAPITag)
|
echo = mf.prepareMockedJSONRequest(newAPITag)
|
||||||
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
||||||
@ -353,7 +353,7 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
|
|||||||
Description: newAPITag.Description,
|
Description: newAPITag.Description,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
|
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(expectDBTag, nil)
|
||||||
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
||||||
echo = mf.prepareMockedJSONRequest(newAPITag)
|
echo = mf.prepareMockedJSONRequest(newAPITag)
|
||||||
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
||||||
@ -376,14 +376,14 @@ func TestWorkerTagCRUDHappyFlow(t *testing.T) {
|
|||||||
Description: newAPITag.Description,
|
Description: newAPITag.Description,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
|
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(expectDBTag, nil)
|
||||||
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
mf.persistence.EXPECT().SaveWorkerTag(gomock.Any(), &expectNewDBTag)
|
||||||
echo = mf.prepareMockedJSONRequest(newAPITag)
|
echo = mf.prepareMockedJSONRequest(newAPITag)
|
||||||
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
require.NoError(t, mf.flamenco.UpdateWorkerTag(echo, UUID))
|
||||||
assertResponseNoContent(t, echo)
|
assertResponseNoContent(t, echo)
|
||||||
|
|
||||||
// Delete.
|
// Delete.
|
||||||
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(&expectDBTag, nil)
|
mf.persistence.EXPECT().FetchWorkerTag(gomock.Any(), UUID).Return(expectDBTag, nil)
|
||||||
mf.persistence.EXPECT().DeleteWorkerTag(gomock.Any(), UUID)
|
mf.persistence.EXPECT().DeleteWorkerTag(gomock.Any(), UUID)
|
||||||
mf.broadcaster.EXPECT().BroadcastWorkerTagUpdate(api.EventWorkerTagUpdate{
|
mf.broadcaster.EXPECT().BroadcastWorkerTagUpdate(api.EventWorkerTagUpdate{
|
||||||
Tag: api.WorkerTag{Id: &UUID},
|
Tag: api.WorkerTag{Id: &UUID},
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
// NewWorkerTagUpdate returns a partial EventWorkerTagUpdate struct for the
|
// NewWorkerTagUpdate returns a partial EventWorkerTagUpdate struct for the
|
||||||
// given worker tag. It only fills in the fields that represent the current
|
// given worker tag. It only fills in the fields that represent the current
|
||||||
// state of the tag.
|
// state of the tag.
|
||||||
func NewWorkerTagUpdate(tag *persistence.WorkerTag) api.EventWorkerTagUpdate {
|
func NewWorkerTagUpdate(tag persistence.WorkerTag) api.EventWorkerTagUpdate {
|
||||||
tagUpdate := api.EventWorkerTagUpdate{
|
tagUpdate := api.EventWorkerTagUpdate{
|
||||||
Tag: api.WorkerTag{
|
Tag: api.WorkerTag{
|
||||||
Id: &tag.UUID,
|
Id: &tag.UUID,
|
||||||
|
@ -355,7 +355,7 @@ func (db *DB) FetchJob(ctx context.Context, jobUUID string) (*Job, error) {
|
|||||||
case err != nil:
|
case err != nil:
|
||||||
return nil, workerTagError(err, "fetching worker tag of job")
|
return nil, workerTagError(err, "fetching worker tag of job")
|
||||||
}
|
}
|
||||||
gormJob.WorkerTag = workerTag
|
gormJob.WorkerTag = &workerTag
|
||||||
}
|
}
|
||||||
|
|
||||||
return &gormJob, nil
|
return &gormJob, nil
|
||||||
@ -384,7 +384,7 @@ func (db *DB) FetchJobs(ctx context.Context) ([]*Job, error) {
|
|||||||
case err != nil:
|
case err != nil:
|
||||||
return nil, workerTagError(err, "fetching worker tag of job")
|
return nil, workerTagError(err, "fetching worker tag of job")
|
||||||
}
|
}
|
||||||
gormJob.WorkerTag = workerTag
|
gormJob.WorkerTag = &workerTag
|
||||||
}
|
}
|
||||||
|
|
||||||
gormJobs[index] = &gormJob
|
gormJobs[index] = &gormJob
|
||||||
|
@ -97,7 +97,7 @@ func TestStoreAuthoredJobWithWorkerTag(t *testing.T) {
|
|||||||
require.NotNil(t, fetchedJob)
|
require.NotNil(t, fetchedJob)
|
||||||
|
|
||||||
require.NotNil(t, fetchedJob.WorkerTagID)
|
require.NotNil(t, fetchedJob.WorkerTagID)
|
||||||
assert.Equal(t, *fetchedJob.WorkerTagID, workerTag.ID)
|
assert.Equal(t, int64(*fetchedJob.WorkerTagID), workerTag.ID)
|
||||||
|
|
||||||
require.NotNil(t, fetchedJob.WorkerTag)
|
require.NotNil(t, fetchedJob.WorkerTag)
|
||||||
assert.Equal(t, fetchedJob.WorkerTag.Name, workerTag.Name)
|
assert.Equal(t, fetchedJob.WorkerTag.Name, workerTag.Name)
|
||||||
|
@ -9,32 +9,24 @@ import (
|
|||||||
"projects.blender.org/studio/flamenco/internal/manager/persistence/sqlc"
|
"projects.blender.org/studio/flamenco/internal/manager/persistence/sqlc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type WorkerTag struct {
|
type WorkerTag = sqlc.WorkerTag
|
||||||
Model
|
|
||||||
|
|
||||||
UUID string
|
func (db *DB) CreateWorkerTag(ctx context.Context, tag *WorkerTag) error {
|
||||||
Name string
|
|
||||||
Description string
|
|
||||||
|
|
||||||
Workers []*Worker
|
|
||||||
}
|
|
||||||
|
|
||||||
func (db *DB) CreateWorkerTag(ctx context.Context, wc *WorkerTag) error {
|
|
||||||
queries := db.queries()
|
queries := db.queries()
|
||||||
|
|
||||||
now := db.now()
|
now := db.now()
|
||||||
dbID, err := queries.CreateWorkerTag(ctx, sqlc.CreateWorkerTagParams{
|
dbID, err := queries.CreateWorkerTag(ctx, sqlc.CreateWorkerTagParams{
|
||||||
CreatedAt: now,
|
CreatedAt: now,
|
||||||
UUID: wc.UUID,
|
UUID: tag.UUID,
|
||||||
Name: wc.Name,
|
Name: tag.Name,
|
||||||
Description: wc.Description,
|
Description: tag.Description,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("creating new worker tag: %w", err)
|
return fmt.Errorf("creating new worker tag: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
wc.ID = uint(dbID)
|
tag.ID = dbID
|
||||||
wc.CreatedAt = now
|
tag.CreatedAt = now
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -51,25 +43,25 @@ func (db *DB) HasWorkerTags(ctx context.Context) (bool, error) {
|
|||||||
return count > 0, nil
|
return count > 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) FetchWorkerTag(ctx context.Context, uuid string) (*WorkerTag, error) {
|
func (db *DB) FetchWorkerTag(ctx context.Context, uuid string) (WorkerTag, error) {
|
||||||
queries := db.queries()
|
queries := db.queries()
|
||||||
|
|
||||||
workerTag, err := queries.FetchWorkerTagByUUID(ctx, uuid)
|
workerTag, err := queries.FetchWorkerTagByUUID(ctx, uuid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, workerTagError(err, "fetching worker tag")
|
return WorkerTag{}, workerTagError(err, "fetching worker tag")
|
||||||
}
|
}
|
||||||
|
|
||||||
return convertSqlcWorkerTag(workerTag), nil
|
return workerTag, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetchWorkerTagByID fetches the worker tag using the given database instance.
|
// fetchWorkerTagByID fetches the worker tag using the given database instance.
|
||||||
func fetchWorkerTagByID(ctx context.Context, queries *sqlc.Queries, id int64) (*WorkerTag, error) {
|
func fetchWorkerTagByID(ctx context.Context, queries *sqlc.Queries, id int64) (WorkerTag, error) {
|
||||||
workerTag, err := queries.FetchWorkerTagByID(ctx, id)
|
workerTag, err := queries.FetchWorkerTagByID(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, workerTagError(err, "fetching worker tag")
|
return WorkerTag{}, workerTagError(err, "fetching worker tag")
|
||||||
}
|
}
|
||||||
|
|
||||||
return convertSqlcWorkerTag(workerTag), nil
|
return workerTag, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) SaveWorkerTag(ctx context.Context, tag *WorkerTag) error {
|
func (db *DB) SaveWorkerTag(ctx context.Context, tag *WorkerTag) error {
|
||||||
@ -80,7 +72,7 @@ func (db *DB) SaveWorkerTag(ctx context.Context, tag *WorkerTag) error {
|
|||||||
UUID: tag.UUID,
|
UUID: tag.UUID,
|
||||||
Name: tag.Name,
|
Name: tag.Name,
|
||||||
Description: tag.Description,
|
Description: tag.Description,
|
||||||
WorkerTagID: int64(tag.ID),
|
WorkerTagID: tag.ID,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return workerTagError(err, "saving worker tag")
|
return workerTagError(err, "saving worker tag")
|
||||||
@ -112,36 +104,26 @@ func (db *DB) DeleteWorkerTag(ctx context.Context, uuid string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) FetchWorkerTags(ctx context.Context) ([]*WorkerTag, error) {
|
func (db *DB) FetchWorkerTags(ctx context.Context) ([]WorkerTag, error) {
|
||||||
queries := db.queries()
|
queries := db.queries()
|
||||||
|
|
||||||
tags, err := queries.FetchWorkerTags(ctx)
|
tags, err := queries.FetchWorkerTags(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, workerTagError(err, "fetching all worker tags")
|
return nil, workerTagError(err, "fetching all worker tags")
|
||||||
}
|
}
|
||||||
|
return tags, nil
|
||||||
gormTags := make([]*WorkerTag, len(tags))
|
|
||||||
for index, tag := range tags {
|
|
||||||
gormTags[index] = convertSqlcWorkerTag(tag)
|
|
||||||
}
|
|
||||||
return gormTags, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) fetchWorkerTagsWithUUID(
|
func (db *DB) fetchWorkerTagsWithUUID(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
queries *sqlc.Queries,
|
queries *sqlc.Queries,
|
||||||
tagUUIDs []string,
|
tagUUIDs []string,
|
||||||
) ([]*WorkerTag, error) {
|
) ([]WorkerTag, error) {
|
||||||
tags, err := queries.FetchWorkerTagsByUUIDs(ctx, tagUUIDs)
|
tags, err := queries.FetchWorkerTagsByUUIDs(ctx, tagUUIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, workerTagError(err, "fetching all worker tags")
|
return nil, workerTagError(err, "fetching all worker tags")
|
||||||
}
|
}
|
||||||
|
return tags, nil
|
||||||
gormTags := make([]*WorkerTag, len(tags))
|
|
||||||
for index, tag := range tags {
|
|
||||||
gormTags[index] = convertSqlcWorkerTag(tag)
|
|
||||||
}
|
|
||||||
return gormTags, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) WorkerSetTags(ctx context.Context, worker *Worker, tagUUIDs []string) error {
|
func (db *DB) WorkerSetTags(ctx context.Context, worker *Worker, tagUUIDs []string) error {
|
||||||
@ -180,10 +162,5 @@ func (db *DB) FetchTagsOfWorker(ctx context.Context, workerUUID string) ([]Worke
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, workerTagError(err, "fetching tags of worker %s", workerUUID)
|
return nil, workerTagError(err, "fetching tags of worker %s", workerUUID)
|
||||||
}
|
}
|
||||||
|
return tags, nil
|
||||||
gormTags := make([]WorkerTag, len(tags))
|
|
||||||
for index, tag := range tags {
|
|
||||||
gormTags[index] = *convertSqlcWorkerTag(tag)
|
|
||||||
}
|
|
||||||
return gormTags, nil
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ func TestCreateFetchTag(t *testing.T) {
|
|||||||
// Test fetching non-existent tag
|
// Test fetching non-existent tag
|
||||||
fetchedTag, err := f.db.FetchWorkerTag(f.ctx, "7ee21bc8-ff1a-42d2-a6b6-cc4b529b189f")
|
fetchedTag, err := f.db.FetchWorkerTag(f.ctx, "7ee21bc8-ff1a-42d2-a6b6-cc4b529b189f")
|
||||||
assert.ErrorIs(t, err, ErrWorkerTagNotFound)
|
assert.ErrorIs(t, err, ErrWorkerTagNotFound)
|
||||||
assert.Nil(t, fetchedTag)
|
assert.Zero(t, fetchedTag)
|
||||||
|
|
||||||
// New tag creation is already done in the workerTestFixtures() call.
|
// New tag creation is already done in the workerTestFixtures() call.
|
||||||
assert.NotNil(t, f.tag)
|
assert.NotNil(t, f.tag)
|
||||||
@ -32,7 +32,6 @@ func TestCreateFetchTag(t *testing.T) {
|
|||||||
assert.Equal(t, f.tag.UUID, fetchedTag.UUID)
|
assert.Equal(t, f.tag.UUID, fetchedTag.UUID)
|
||||||
assert.Equal(t, f.tag.Name, fetchedTag.Name)
|
assert.Equal(t, f.tag.Name, fetchedTag.Name)
|
||||||
assert.Equal(t, f.tag.Description, fetchedTag.Description)
|
assert.Equal(t, f.tag.Description, fetchedTag.Description)
|
||||||
assert.Zero(t, fetchedTag.Workers)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFetchDeleteTags(t *testing.T) {
|
func TestFetchDeleteTags(t *testing.T) {
|
||||||
|
@ -248,20 +248,3 @@ func (db *DB) SummarizeWorkerStatuses(ctx context.Context) (WorkerStatusCount, e
|
|||||||
|
|
||||||
return statusCounts, nil
|
return statusCounts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// convertSqlcWorkerTag converts a worker tag from the SQLC-generated model to
|
|
||||||
// the model expected by the rest of the code. This is mostly in place to aid in
|
|
||||||
// the GORM to SQLC migration. It is intended that eventually the rest of the
|
|
||||||
// code will use the same SQLC-generated model.
|
|
||||||
func convertSqlcWorkerTag(tag sqlc.WorkerTag) *WorkerTag {
|
|
||||||
return &WorkerTag{
|
|
||||||
Model: Model{
|
|
||||||
ID: uint(tag.ID),
|
|
||||||
CreatedAt: tag.CreatedAt,
|
|
||||||
UpdatedAt: tag.UpdatedAt.Time,
|
|
||||||
},
|
|
||||||
UUID: tag.UUID,
|
|
||||||
Name: tag.Name,
|
|
||||||
Description: tag.Description,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -362,11 +362,6 @@ func TestDeleteWorkerWithTagAssigned(t *testing.T) {
|
|||||||
|
|
||||||
// Delete the Worker.
|
// Delete the Worker.
|
||||||
require.NoError(t, f.db.DeleteWorker(f.ctx, f.worker.UUID))
|
require.NoError(t, f.db.DeleteWorker(f.ctx, f.worker.UUID))
|
||||||
|
|
||||||
// Check the Worker has been unassigned from the tag.
|
|
||||||
tag, err := f.db.FetchWorkerTag(f.ctx, f.tag.UUID)
|
|
||||||
require.NoError(t, err)
|
|
||||||
assert.Empty(t, tag.Workers)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSummarizeWorkerStatuses(t *testing.T) {
|
func TestSummarizeWorkerStatuses(t *testing.T) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user