conditionally increment asset IDs

This commit is contained in:
Hayden 2022-11-13 13:15:26 -09:00
parent 46eaef12eb
commit de670a00ed
No known key found for this signature in database
GPG key ID: 17CF79474E257545
3 changed files with 59 additions and 6 deletions

View file

@ -8,17 +8,38 @@ type AllServices struct {
Items *ItemService Items *ItemService
} }
func New(repos *repo.AllRepos) *AllServices { type OptionsFunc func(*options)
type options struct {
autoIncrementAssetID bool
}
func WithAutoIncrementAssetID(v bool) func(*options) {
return func(o *options) {
o.autoIncrementAssetID = v
}
}
func New(repos *repo.AllRepos, opts ...OptionsFunc) *AllServices {
if repos == nil { if repos == nil {
panic("repos cannot be nil") panic("repos cannot be nil")
} }
options := &options{
autoIncrementAssetID: true,
}
for _, opt := range opts {
opt(options)
}
return &AllServices{ return &AllServices{
User: &UserService{repos}, User: &UserService{repos},
Group: &GroupService{repos}, Group: &GroupService{repos},
Items: &ItemService{ Items: &ItemService{
repo: repos, repo: repos,
at: attachmentTokens{}, at: attachmentTokens{},
autoIncrementAssetID: options.autoIncrementAssetID,
}, },
} }
} }

View file

@ -21,6 +21,21 @@ type ItemService struct {
// at is a map of tokens to attachment IDs. This is used to store the attachment ID // at is a map of tokens to attachment IDs. This is used to store the attachment ID
// for issued URLs // for issued URLs
at attachmentTokens at attachmentTokens
autoIncrementAssetID bool
}
func (svc *ItemService) Create(ctx Context, item repo.ItemCreate) (repo.ItemOut, error) {
if svc.autoIncrementAssetID {
highest, err := svc.repo.Items.GetHighestAssetID(ctx, ctx.GID)
if err != nil {
return repo.ItemOut{}, err
}
item.AssetID = repo.AssetID(highest + 1)
}
return svc.repo.Items.Create(ctx, ctx.GID, item)
} }
func (svc *ItemService) EnsureAssetID(ctx context.Context, GID uuid.UUID) (int, error) { func (svc *ItemService) EnsureAssetID(ctx context.Context, GID uuid.UUID) (int, error) {
@ -140,6 +155,14 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data [][]s
} }
} }
highest := repo.AssetID(-1)
if svc.autoIncrementAssetID {
highest, err = svc.repo.Items.GetHighestAssetID(ctx, GID)
if err != nil {
return 0, err
}
}
// Create the items // Create the items
var count int var count int
for _, row := range loaded { for _, row := range loaded {
@ -165,13 +188,20 @@ func (svc *ItemService) CsvImport(ctx context.Context, GID uuid.UUID, data [][]s
Str("location", row.Location). Str("location", row.Location).
Msgf("Creating Item: %s", row.Item.Name) Msgf("Creating Item: %s", row.Item.Name)
result, err := svc.repo.Items.Create(ctx, GID, repo.ItemCreate{ data := repo.ItemCreate{
ImportRef: row.Item.ImportRef, ImportRef: row.Item.ImportRef,
Name: row.Item.Name, Name: row.Item.Name,
Description: row.Item.Description, Description: row.Item.Description,
LabelIDs: labelIDs, LabelIDs: labelIDs,
LocationID: locationID, LocationID: locationID,
}) }
if svc.autoIncrementAssetID {
highest++
data.AssetID = highest
}
result, err := svc.repo.Items.Create(ctx, GID, data)
if err != nil { if err != nil {
return count, err return count, err

View file

@ -71,6 +71,7 @@ type (
ParentID uuid.UUID `json:"parentId" extensions:"x-nullable"` ParentID uuid.UUID `json:"parentId" extensions:"x-nullable"`
Name string `json:"name"` Name string `json:"name"`
Description string `json:"description"` Description string `json:"description"`
AssetID AssetID `json:"-"`
// Edges // Edges
LocationID uuid.UUID `json:"locationId"` LocationID uuid.UUID `json:"locationId"`
@ -431,7 +432,8 @@ func (e *ItemsRepository) Create(ctx context.Context, gid uuid.UUID, data ItemCr
SetName(data.Name). SetName(data.Name).
SetDescription(data.Description). SetDescription(data.Description).
SetGroupID(gid). SetGroupID(gid).
SetLocationID(data.LocationID) SetLocationID(data.LocationID).
SetAssetID(int(data.AssetID))
if data.LabelIDs != nil && len(data.LabelIDs) > 0 { if data.LabelIDs != nil && len(data.LabelIDs) > 0 {
q.AddLabelIDs(data.LabelIDs...) q.AddLabelIDs(data.LabelIDs...)