mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 15:22:47 +01:00
93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
package busdb
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/arangodb/go-driver"
|
|
|
|
"github.com/SecurityBrewery/catalyst/generated/models"
|
|
"github.com/SecurityBrewery/catalyst/time"
|
|
)
|
|
|
|
const LogCollectionName = "logs"
|
|
|
|
func (db *BusDatabase) LogCreate(ctx context.Context, reference, message string) (*models.LogEntry, error) {
|
|
user, ok := UserFromContext(ctx)
|
|
if !ok {
|
|
return nil, errors.New("no user in context")
|
|
}
|
|
|
|
logentry := &models.LogEntry{
|
|
Reference: reference,
|
|
Created: time.Now(),
|
|
Creator: user.ID,
|
|
Message: message,
|
|
}
|
|
|
|
doc := models.LogEntry{}
|
|
_, err := db.logCollection.CreateDocument(driver.WithReturnNew(ctx, &doc), logentry)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &doc, db.bus.PublishUpdate([]driver.DocumentID{driver.DocumentID(logentry.Reference)})
|
|
}
|
|
|
|
func (db *BusDatabase) LogBatchCreate(ctx context.Context, logEntryForms []*models.LogEntry) error {
|
|
user, ok := UserFromContext(ctx)
|
|
if !ok {
|
|
return errors.New("no user in context")
|
|
}
|
|
|
|
var ids []driver.DocumentID
|
|
var logentries []*models.LogEntry
|
|
for _, logEntryForm := range logEntryForms {
|
|
logentry := &models.LogEntry{
|
|
Reference: logEntryForm.Reference,
|
|
Created: time.Now(),
|
|
Creator: user.ID,
|
|
Message: logEntryForm.Message,
|
|
}
|
|
|
|
logentries = append(logentries, logentry)
|
|
ids = append(ids, driver.DocumentID(logentry.Reference))
|
|
}
|
|
|
|
_, errs, err := db.logCollection.CreateDocuments(ctx, logentries)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = errs.FirstNonNil()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return db.bus.PublishUpdate(ids)
|
|
}
|
|
|
|
func (db *BusDatabase) LogList(ctx context.Context, reference string) ([]*models.LogEntry, error) {
|
|
query := "FOR d IN @@collection FILTER d.reference == @reference SORT d.created DESC RETURN d"
|
|
cursor, err := db.internal.Query(ctx, query, map[string]interface{}{
|
|
"@collection": LogCollectionName,
|
|
"reference": reference,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer cursor.Close()
|
|
var docs []*models.LogEntry
|
|
for {
|
|
var doc models.LogEntry
|
|
_, err := cursor.ReadDocument(ctx, &doc)
|
|
if driver.IsNoMoreDocuments(err) {
|
|
break
|
|
} else if err != nil {
|
|
return nil, err
|
|
}
|
|
docs = append(docs, &doc)
|
|
}
|
|
|
|
return docs, err
|
|
}
|