Add the event service
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package event
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
. "git.gorlug.de/code/ersteller"
|
||||
"git.gorlug.de/code/ersteller/schema/ent"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
entClient *ent.Client
|
||||
}
|
||||
|
||||
func NewService(entClient *ent.Client) *Service {
|
||||
return &Service{
|
||||
entClient: entClient,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) Create(htmxContext HtmxContext, name string, data any) error {
|
||||
return Create(s.entClient, htmxContext, name, data)
|
||||
}
|
||||
|
||||
func Should(err error) {
|
||||
if err != nil {
|
||||
Error("should not happen: ", err)
|
||||
}
|
||||
}
|
||||
|
||||
func Create(entClient *ent.Client, c HtmxContext, name string, data any) error {
|
||||
Debug("event", name, data)
|
||||
hasAuth, authContext := c.GetAuthContext()
|
||||
if !hasAuth {
|
||||
return fmt.Errorf("failed to get auth context")
|
||||
}
|
||||
return CreateWithSession(entClient, c.GetGoContext(), authContext, name, data)
|
||||
}
|
||||
|
||||
func CreateWithSession(entClient *ent.Client, ctx context.Context,
|
||||
auth AuthContext, name string, data any) error {
|
||||
Debug("event", name, data)
|
||||
var mapData JSONB
|
||||
if data == nil {
|
||||
mapData = make(JSONB)
|
||||
} else {
|
||||
mappedStruct, err := StructToMap(data)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to map data to map for event create: %w", err)
|
||||
}
|
||||
mapData = mappedStruct
|
||||
}
|
||||
_, err := entClient.Event.Create().
|
||||
SetUserID(auth.UserId).
|
||||
SetName(name).
|
||||
SetData(mapData).
|
||||
Save(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create event: %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user