mirror of
https://github.com/SecurityBrewery/catalyst.git
synced 2025-12-06 23:32:47 +01:00
87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
package database
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/arangodb/go-driver"
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/SecurityBrewery/catalyst/database/busdb"
|
|
"github.com/SecurityBrewery/catalyst/generated/models"
|
|
)
|
|
|
|
func toUserDataResponse(key string, doc *models.UserData) *models.UserDataResponse {
|
|
return &models.UserDataResponse{
|
|
Email: doc.Email,
|
|
ID: key,
|
|
Image: doc.Image,
|
|
Name: doc.Name,
|
|
Timeformat: doc.Timeformat,
|
|
}
|
|
}
|
|
|
|
func (db *Database) UserDataCreate(ctx context.Context, id string, userdata *models.UserData) error {
|
|
if userdata == nil {
|
|
return errors.New("requires setting")
|
|
}
|
|
if id == "" {
|
|
return errors.New("requires username")
|
|
}
|
|
|
|
_, err := db.userdataCollection.CreateDocument(ctx, ctx, id, userdata)
|
|
return err
|
|
}
|
|
|
|
func (db *Database) UserDataGetOrCreate(ctx *gin.Context, id string, newUserData *models.UserData) (*models.UserDataResponse, error) {
|
|
setting, err := db.UserDataGet(ctx, id)
|
|
if err != nil {
|
|
return toUserDataResponse(id, newUserData), db.UserDataCreate(ctx, id, newUserData)
|
|
}
|
|
return setting, nil
|
|
}
|
|
|
|
func (db *Database) UserDataGet(ctx context.Context, id string) (*models.UserDataResponse, error) {
|
|
var doc models.UserData
|
|
meta, err := db.userdataCollection.ReadDocument(ctx, id, &doc)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return toUserDataResponse(meta.Key, &doc), err
|
|
}
|
|
|
|
func (db *Database) UserDataList(ctx context.Context) ([]*models.UserDataResponse, error) {
|
|
query := "FOR d IN @@collection SORT d.username ASC RETURN d"
|
|
cursor, _, err := db.Query(ctx, query, map[string]interface{}{"@collection": UserDataCollectionName}, busdb.ReadOperation)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer cursor.Close()
|
|
var docs []*models.UserDataResponse
|
|
for {
|
|
var doc models.UserData
|
|
meta, err := cursor.ReadDocument(ctx, &doc)
|
|
if driver.IsNoMoreDocuments(err) {
|
|
break
|
|
} else if err != nil {
|
|
return nil, err
|
|
}
|
|
docs = append(docs, toUserDataResponse(meta.Key, &doc))
|
|
}
|
|
|
|
return docs, err
|
|
}
|
|
|
|
func (db *Database) UserDataUpdate(ctx context.Context, id string, userdata *models.UserData) (*models.UserDataResponse, error) {
|
|
var doc models.UserData
|
|
ctx = driver.WithReturnNew(ctx, &doc)
|
|
|
|
meta, err := db.userdataCollection.ReplaceDocument(ctx, id, userdata)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return toUserDataResponse(meta.Key, &doc), nil
|
|
}
|