Refactor: Attempt II at removing pgtype.UUID everywhere + convert string UUIDs into uuid.UUID (#2894)

* fix: add type override in sqlc.yaml

* chore: gen sqlc

* chore: big find and replace

* chore: more

* fix: clean up bunch of outdated `.Valid` refs

* refactor: remove `sqlchelpers.uuidFromStr()` in favor of `uuid.MustParse()`

* refactor: remove uuidToStr

* fix: lint

* fix: use pointers for null uuids

* chore: clean up more null pointers

* chore: clean up a bunch more

* fix: couple more

* fix: some types on the api

* fix: incorrectly non-null param

* fix: more nullable params

* fix: more refs

* refactor: start replacing tenant id strings with uuids

* refactor: more tenant id uuid casting

* refactor: fix a bunch more

* refactor: more

* refactor: more

* refactor: is that all of them?!

* fix: panic

* fix: rm scans

* fix: unwind some broken things

* chore: tests

* fix: rebase issues

* fix: more tests

* fix: nil checks

* Refactor: Make all UUIDs into `uuid.UUID` (#2897)

* refactor: remove a bunch more string uuids

* refactor: pointers and lists

* refactor: fix all the refs

* refactor: fix a few more

* fix: config loader

* fix: revert some changes

* fix: tests

* fix: test

* chore: proto

* fix: durable listener

* fix: some more string types

* fix: python health worker sleep

* fix: remove a bunch of `MustParse`s from the various gRPC servers

* fix: rm more uuid.MustParse calls

* fix: rm mustparse from api

* fix: test

* fix: merge issues

* fix: handle a bunch more uses of `MustParse` everywhere

* fix: nil id for worker label

* fix: more casting in the oss

* fix: more id parsing

* fix: stringify jwt opt

* fix: couple more bugs in untyped calls

* fix: more types

* fix: broken test

* refactor: implement `GetKeyUuid`

* chore: regen sqlc

* chore: replace pgtype.UUID again

* fix: bunch more type errors

* fix: panic
This commit is contained in:
matt
2026-02-03 11:02:59 -05:00
committed by GitHub
parent 829a3c816c
commit 058968c06b
271 changed files with 4613 additions and 4461 deletions
+10 -3
View File
@@ -6,6 +6,7 @@ import (
"net/http"
"strings"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/labstack/echo/v4"
"github.com/rs/zerolog"
@@ -13,7 +14,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/middleware"
"github.com/hatchet-dev/hatchet/api/v1/server/middleware/redirect"
"github.com/hatchet-dev/hatchet/pkg/config/server"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -169,7 +169,14 @@ func (a *AuthN) handleCookieAuth(c echo.Context) error {
return forbidden
}
user, err := a.config.V1.User().GetUserByID(c.Request().Context(), userID)
userIdUUID, err := uuid.Parse(userID)
if err != nil {
a.l.Debug().Err(err).Msg("error parsing user id from session")
return forbidden
}
user, err := a.config.V1.User().GetUserByID(c.Request().Context(), userIdUUID)
if err != nil {
a.l.Debug().Err(err).Msg("error getting user by id")
@@ -219,7 +226,7 @@ func (a *AuthN) handleBearerAuth(c echo.Context) error {
// Verify that the tenant id which exists in the context is the same as the tenant id
// in the token.
if sqlchelpers.UUIDToStr(queriedTenant.ID) != tenantId {
if queriedTenant.ID != tenantId {
a.l.Debug().Msgf("tenant id in token does not match tenant id in context")
return forbidden
+21 -2
View File
@@ -3,12 +3,12 @@ package authn
import (
"fmt"
"github.com/google/uuid"
"github.com/gorilla/sessions"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/pkg/config/server"
"github.com/hatchet-dev/hatchet/pkg/random"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -30,7 +30,7 @@ func (s *SessionHelpers) SaveAuthenticated(c echo.Context, user *sqlcv1.User) er
}
session.Values["authenticated"] = true
session.Values["user_id"] = sqlchelpers.UUIDToStr(user.ID)
session.Values["user_id"] = user.ID.String()
return session.Save(c.Request(), c.Response())
}
@@ -94,6 +94,25 @@ func (s *SessionHelpers) GetKey(
return vStr, nil
}
func (s *SessionHelpers) GetKeyUuid(
c echo.Context,
k string,
) (*uuid.UUID, error) {
vStr, err := s.GetKey(c, k)
if err != nil {
return nil, err
}
vUuid, err := uuid.Parse(vStr)
if err != nil {
return nil, err
}
return &vUuid, nil
}
func (s *SessionHelpers) RemoveKey(
c echo.Context,
k string,
+1 -2
View File
@@ -10,7 +10,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/middleware"
"github.com/hatchet-dev/hatchet/pkg/config/server"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -78,7 +77,7 @@ func (a *AuthZ) handleCookieAuth(c echo.Context, r *middleware.RouteInfo) error
}
// check if the user is a member of the tenant
tenantMember, err := a.config.V1.Tenant().GetTenantMemberByUserID(c.Request().Context(), sqlchelpers.UUIDToStr(tenant.ID), sqlchelpers.UUIDToStr(user.ID))
tenantMember, err := a.config.V1.Tenant().GetTenantMemberByUserID(c.Request().Context(), tenant.ID, user.ID)
if err != nil {
a.l.Debug().Err(err).Msgf("error getting tenant member")
+3 -4
View File
@@ -8,7 +8,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/constants"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -16,7 +15,7 @@ func (a *APITokenService) ApiTokenCreate(ctx echo.Context, request gen.ApiTokenC
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
user := ctx.Get("user").(*sqlcv1.User)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// validate the request
if apiErrors, err := a.config.Validator.ValidateAPI(request.Body); err != nil {
@@ -50,13 +49,13 @@ func (a *APITokenService) ApiTokenCreate(ctx echo.Context, request gen.ApiTokenC
a.config.Analytics.Enqueue(
"api-token:create",
sqlchelpers.UUIDToStr(user.ID),
user.ID.String(),
&tenantId,
nil,
map[string]interface{}{
"name": request.Body.Name,
"expires_at": expiresAt,
"token_id": token.TokenId,
"token_id": token.TokenId.String(),
},
)
+1 -2
View File
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (a *APITokenService) ApiTokenList(ctx echo.Context, request gen.ApiTokenListRequestObject) (gen.ApiTokenListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
tokens, err := a.config.V1.APIToken().ListAPITokensByTenant(ctx.Request().Context(), tenantId)
+4 -7
View File
@@ -6,7 +6,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/constants"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -20,7 +19,7 @@ func (a *APITokenService) ApiTokenUpdateRevoke(ctx echo.Context, request gen.Api
), nil
}
err := a.config.V1.APIToken().RevokeAPIToken(ctx.Request().Context(), sqlchelpers.UUIDToStr(apiToken.ID))
err := a.config.V1.APIToken().RevokeAPIToken(ctx.Request().Context(), apiToken.ID)
if err != nil {
return nil, err
@@ -29,15 +28,13 @@ func (a *APITokenService) ApiTokenUpdateRevoke(ctx echo.Context, request gen.Api
ctx.Set(constants.ResourceIdKey.String(), apiToken.ID.String())
ctx.Set(constants.ResourceTypeKey.String(), constants.ResourceTypeApiToken.String())
tenantId := sqlchelpers.UUIDToStr(apiToken.TenantId)
a.config.Analytics.Enqueue(
"api-token:revoke",
sqlchelpers.UUIDToStr(user.ID),
&tenantId,
user.ID.String(),
apiToken.TenantId,
nil,
map[string]interface{}{
"token_id": apiToken.ID,
"token_id": apiToken.ID.String(),
},
)
return gen.ApiTokenUpdateRevoke204Response{}, nil
+1 -1
View File
@@ -31,7 +31,7 @@ func (i *IngestorsService) SnsUpdate(ctx echo.Context, req gen.SnsUpdateRequestO
return nil, err
}
tenantId := req.Tenant.String()
tenantId := req.Tenant
// verify that the tenant and the topic ARN are set in the database
snsInt, err := i.config.V1.SNS().GetSNSIntegration(ctx.Request().Context(), tenantId, payload.TopicArn)
@@ -7,13 +7,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (i *IngestorsService) SnsCreate(ctx echo.Context, req gen.SnsCreateRequestObject) (gen.SnsCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// validate the request
if apiErrors, err := i.config.Validator.ValidateAPI(req.Body); err != nil {
@@ -5,17 +5,16 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (i *IngestorsService) SnsDelete(ctx echo.Context, req gen.SnsDeleteRequestObject) (gen.SnsDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
sns := ctx.Get("sns").(*sqlcv1.SNSIntegration)
// create the SNS integration
err := i.config.V1.SNS().DeleteSNSIntegration(ctx.Request().Context(), tenantId, sqlchelpers.UUIDToStr(sns.ID))
err := i.config.V1.SNS().DeleteSNSIntegration(ctx.Request().Context(), tenantId, sns.ID)
if err != nil {
return nil, err
+1 -2
View File
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (i *IngestorsService) SnsList(ctx echo.Context, req gen.SnsListRequestObject) (gen.SnsListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// create the SNS integration
snsIntegrations, err := i.config.V1.SNS().ListSNSIntegrations(ctx.Request().Context(), tenantId)
+1 -2
View File
@@ -11,13 +11,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *RateLimitService) RateLimitList(ctx echo.Context, request gen.RateLimitListRequestObject) (gen.RateLimitListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limit := 50
offset := 0
@@ -22,7 +22,7 @@ func (g *SlackAppService) UserUpdateSlackOauthCallback(ctx echo.Context, _ gen.U
sh := authn.NewSessionHelpers(g.config)
tenantId, err := sh.GetKey(ctx, "tenant")
tenantId, err := sh.GetKeyUuid(ctx, "tenant")
if err != nil {
return nil, redirect.GetRedirectWithError(ctx, g.config.Logger, err, "Could not link Slack account. Please try again and make sure cookies are enabled.")
@@ -63,7 +63,7 @@ func (g *SlackAppService) UserUpdateSlackOauthCallback(ctx echo.Context, _ gen.U
_, err = g.config.V1.Slack().UpsertSlackWebhook(
ctx.Request().Context(),
tenantId,
*tenantId,
&v1.UpsertSlackWebhookOpts{
TeamId: resp.Team.ID,
TeamName: resp.Team.Name,
@@ -7,14 +7,13 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/authn"
"github.com/hatchet-dev/hatchet/api/v1/server/middleware/redirect"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
// Note: we want all errors to redirect, otherwise the user will be greeted with raw JSON in the middle of the login flow.
func (g *SlackAppService) UserUpdateSlackOauthStart(ctx echo.Context, _ gen.UserUpdateSlackOauthStartRequestObject) (gen.UserUpdateSlackOauthStartResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
oauth, ok := g.config.AdditionalOAuthConfigs["slack"]
@@ -24,7 +23,7 @@ func (g *SlackAppService) UserUpdateSlackOauthStart(ctx echo.Context, _ gen.User
sh := authn.NewSessionHelpers(g.config)
if err := sh.SaveKV(ctx, "tenant", tenantId); err != nil {
if err := sh.SaveKV(ctx, "tenant", tenantId.String()); err != nil {
return nil, redirect.GetRedirectWithError(ctx, g.config.Logger, err, "Could not get cookie. Please make sure cookies are enabled.")
}
@@ -5,16 +5,15 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (i *SlackAppService) SlackWebhookDelete(ctx echo.Context, req gen.SlackWebhookDeleteRequestObject) (gen.SlackWebhookDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
slack := ctx.Get("slack").(*sqlcv1.SlackAppWebhook)
err := i.config.V1.Slack().DeleteSlackWebhook(ctx.Request().Context(), tenantId, sqlchelpers.UUIDToStr(slack.ID))
err := i.config.V1.Slack().DeleteSlackWebhook(ctx.Request().Context(), tenantId, slack.ID)
if err != nil {
return nil, err
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (s *SlackAppService) SlackWebhookList(ctx echo.Context, req gen.SlackWebhookListRequestObject) (gen.SlackWebhookListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
webhooks, err := s.config.V1.Slack().ListSlackWebhooks(ctx.Request().Context(), tenantId)
+2 -3
View File
@@ -11,7 +11,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -79,7 +78,7 @@ func (t *TenantService) TenantCreate(ctx echo.Context, request gen.TenantCreateR
return nil, err
}
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
err = t.config.V1.TenantLimit().SelectOrInsertTenantLimits(context.Background(), tenantId, nil)
@@ -89,7 +88,7 @@ func (t *TenantService) TenantCreate(ctx echo.Context, request gen.TenantCreateR
// add the user as an owner of the tenant
_, err = t.config.V1.Tenant().CreateTenantMember(ctx.Request().Context(), tenantId, &v1.CreateTenantMemberOpts{
UserId: sqlchelpers.UUIDToStr(user.ID),
UserId: user.ID,
Role: "OWNER",
})
@@ -6,13 +6,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) AlertEmailGroupCreate(ctx echo.Context, request gen.AlertEmailGroupCreateRequestObject) (gen.AlertEmailGroupCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// validate the request
if apiErrors, err := t.config.Validator.ValidateAPI(request.Body); err != nil {
@@ -11,14 +11,13 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/integrations/email"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantInviteCreate(ctx echo.Context, request gen.TenantInviteCreateRequestObject) (gen.TenantInviteCreateResponseObject, error) {
user := ctx.Get("user").(*sqlcv1.User)
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
tenantMember := ctx.Get("tenant-member").(*sqlcv1.PopulateTenantMembersRow)
if !t.config.Runtime.AllowInvites {
t.config.Logger.Warn().Msg("tenant invites are disabled")
@@ -92,11 +91,11 @@ func (t *TenantService) TenantInviteCreate(ctx echo.Context, request gen.TenantI
}()
t.config.Analytics.Enqueue("user-invite:create",
sqlchelpers.UUIDToStr(user.ID),
user.ID.String(),
&tenantId,
nil,
map[string]interface{}{
"invite_id": invite.ID,
"invite_id": invite.ID.String(),
"role": request.Body.Role,
},
)
@@ -4,17 +4,16 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) AlertEmailGroupDelete(ctx echo.Context, request gen.AlertEmailGroupDeleteRequestObject) (gen.AlertEmailGroupDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
emailGroup := ctx.Get("alert-email-group").(*sqlcv1.TenantAlertEmailGroup)
// delete the invite
err := t.config.V1.TenantAlertingSettings().DeleteTenantAlertGroup(ctx.Request().Context(), tenantId, sqlchelpers.UUIDToStr(emailGroup.ID))
err := t.config.V1.TenantAlertingSettings().DeleteTenantAlertGroup(ctx.Request().Context(), tenantId, emailGroup.ID)
if err != nil {
return nil, err
@@ -5,7 +5,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -13,7 +12,7 @@ func (t *TenantService) TenantInviteDelete(ctx echo.Context, request gen.TenantI
invite := ctx.Get("tenant-invite").(*sqlcv1.TenantInviteLink)
// delete the invite
err := t.config.V1.TenantInvite().DeleteTenantInvite(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.ID))
err := t.config.V1.TenantInvite().DeleteTenantInvite(ctx.Request().Context(), invite.ID)
if err != nil {
return nil, err
@@ -6,13 +6,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/constants"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantMemberDelete(ctx echo.Context, request gen.TenantMemberDeleteRequestObject) (gen.TenantMemberDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
tenantMember := ctx.Get("tenant-member").(*sqlcv1.PopulateTenantMembersRow)
memberToDelete := ctx.Get("member").(*sqlcv1.PopulateTenantMembersRow)
@@ -22,19 +21,19 @@ func (t *TenantService) TenantMemberDelete(ctx echo.Context, request gen.TenantM
), nil
}
if sqlchelpers.UUIDToStr(tenantMember.UserId) == sqlchelpers.UUIDToStr(memberToDelete.UserId) {
if tenantMember.UserId == memberToDelete.UserId {
return gen.TenantMemberDelete403JSONResponse(
apierrors.NewAPIErrors("You cannot delete yourself"),
), nil
}
if sqlchelpers.UUIDToStr(memberToDelete.TenantId) != tenantId {
if memberToDelete.TenantId != tenantId {
return gen.TenantMemberDelete404JSONResponse(
apierrors.NewAPIErrors("Member not found"),
), nil
}
err := t.config.V1.Tenant().DeleteTenantMember(ctx.Request().Context(), sqlchelpers.UUIDToStr(memberToDelete.ID))
err := t.config.V1.Tenant().DeleteTenantMember(ctx.Request().Context(), memberToDelete.ID)
if err != nil {
return nil, err
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantAlertingSettingsGet(ctx echo.Context, request gen.TenantAlertingSettingsGetRequestObject) (gen.TenantAlertingSettingsGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
tenantAlerting, err := t.config.V1.TenantAlertingSettings().GetTenantAlertingSettings(ctx.Request().Context(), tenantId)
@@ -9,13 +9,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantGetPrometheusMetrics(ctx echo.Context, request gen.TenantGetPrometheusMetricsRequestObject) (gen.TenantGetPrometheusMetricsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
var response string
@@ -7,13 +7,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantResourcePolicyGet(ctx echo.Context, request gen.TenantResourcePolicyGetRequestObject) (gen.TenantResourcePolicyGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limits, err := t.config.V1.TenantLimit().GetLimits(context.Background(), tenantId)
@@ -4,13 +4,12 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantGetStepRunQueueMetrics(ctx echo.Context, request gen.TenantGetStepRunQueueMetricsRequestObject) (gen.TenantGetStepRunQueueMetricsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
stepRunQueueCounts, err := t.config.V1.Tasks().GetQueueCounts(ctx.Request().Context(), tenantId)
@@ -11,7 +11,7 @@ import (
func (t *TenantService) TenantGetTaskStats(ctx echo.Context, request gen.TenantGetTaskStatsRequestObject) (gen.TenantGetTaskStatsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
stats, err := t.config.V1.Tasks().GetTaskStats(ctx.Request().Context(), tenant.ID.String())
stats, err := t.config.V1.Tasks().GetTaskStats(ctx.Request().Context(), tenant.ID)
if err != nil {
return nil, err
}
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) AlertEmailGroupList(ctx echo.Context, request gen.AlertEmailGroupListRequestObject) (gen.AlertEmailGroupListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
emailGroups, err := t.config.V1.TenantAlertingSettings().ListTenantAlertGroups(ctx.Request().Context(), tenantId)
@@ -6,13 +6,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantInviteList(ctx echo.Context, request gen.TenantInviteListRequestObject) (gen.TenantInviteListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
tenantInvites, err := t.config.V1.TenantInvite().ListTenantInvitesByTenantId(ctx.Request().Context(), tenantId, &v1.ListTenantInvitesOpts{
Expired: v1.BoolPtr(false),
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantMemberList(ctx echo.Context, request gen.TenantMemberListRequestObject) (gen.TenantMemberListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
members, err := t.config.V1.Tenant().ListTenantMembers(ctx.Request().Context(), tenantId)
+1 -2
View File
@@ -6,13 +6,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TenantService) TenantUpdate(ctx echo.Context, request gen.TenantUpdateRequestObject) (gen.TenantUpdateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// validate the request
if apiErrors, err := t.config.Validator.ValidateAPI(request.Body); err != nil {
@@ -6,7 +6,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -25,7 +24,7 @@ func (t *TenantService) AlertEmailGroupUpdate(ctx echo.Context, request gen.Aler
Emails: request.Body.Emails,
}
emailGroup, err := t.config.V1.TenantAlertingSettings().UpdateTenantAlertGroup(ctx.Request().Context(), sqlchelpers.UUIDToStr(emailGroup.ID), updateOpts)
emailGroup, err := t.config.V1.TenantAlertingSettings().UpdateTenantAlertGroup(ctx.Request().Context(), emailGroup.ID, updateOpts)
if err != nil {
return nil, err
@@ -7,7 +7,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -35,7 +34,7 @@ func (t *TenantService) TenantInviteUpdate(ctx echo.Context, request gen.TenantI
}
// update the invite
invite, err := t.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.ID), updateOpts)
invite, err := t.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), invite.ID, updateOpts)
if err != nil {
return nil, err
@@ -7,7 +7,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -45,7 +44,7 @@ func (t *TenantService) TenantMemberUpdate(ctx echo.Context, request gen.TenantM
}
// Users cannot change their own role
if sqlchelpers.UUIDToStr(tenantMember.UserId) == sqlchelpers.UUIDToStr(memberToUpdate.UserId) {
if tenantMember.UserId == memberToUpdate.UserId {
return gen.TenantMemberUpdate400JSONResponse(
apierrors.NewAPIErrors("you cannot change your own role"),
), nil
@@ -55,7 +54,7 @@ func (t *TenantService) TenantMemberUpdate(ctx echo.Context, request gen.TenantM
Role: v1.StringPtr(string(request.Body.Role)),
}
updatedMember, err := t.config.V1.Tenant().UpdateTenantMember(ctx.Request().Context(), sqlchelpers.UUIDToStr(memberToUpdate.ID), updateOpts)
updatedMember, err := t.config.V1.Tenant().UpdateTenantMember(ctx.Request().Context(), memberToUpdate.ID, updateOpts)
if err != nil {
return nil, err
+18 -14
View File
@@ -4,6 +4,7 @@ import (
"errors"
"time"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/labstack/echo/v4"
@@ -11,13 +12,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/constants"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (u *UserService) TenantInviteAccept(ctx echo.Context, request gen.TenantInviteAcceptRequestObject) (gen.TenantInviteAcceptResponseObject, error) {
user := ctx.Get("user").(*sqlcv1.User)
userId := sqlchelpers.UUIDToStr(user.ID)
userId := user.ID
// validate the request
if apiErrors, err := u.config.Validator.ValidateAPI(request.Body); err != nil {
@@ -26,9 +26,15 @@ func (u *UserService) TenantInviteAccept(ctx echo.Context, request gen.TenantInv
return gen.TenantInviteAccept400JSONResponse(*apiErrors), nil
}
inviteId := request.Body.Invite
inviteIdStr := request.Body.Invite
if inviteId == "" {
if inviteIdStr == "" {
return nil, errors.New("invalid invite id")
}
inviteId, err := uuid.Parse(inviteIdStr)
if err != nil {
return nil, errors.New("invalid invite id")
}
@@ -55,7 +61,7 @@ func (u *UserService) TenantInviteAccept(ctx echo.Context, request gen.TenantInv
}
// ensure the user is not already a member of the tenant
_, err = u.config.V1.Tenant().GetTenantMemberByEmail(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.TenantId), user.Email)
_, err = u.config.V1.Tenant().GetTenantMemberByEmail(ctx.Request().Context(), invite.TenantId, user.Email)
if err != nil && !errors.Is(err, pgx.ErrNoRows) {
return nil, err
@@ -69,14 +75,14 @@ func (u *UserService) TenantInviteAccept(ctx echo.Context, request gen.TenantInv
}
// update the invite
invite, err = u.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.ID), updateOpts)
invite, err = u.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), invite.ID, updateOpts)
if err != nil {
return nil, err
}
// add the user to the tenant
member, err := u.config.V1.Tenant().CreateTenantMember(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.TenantId), &v1.CreateTenantMemberOpts{
member, err := u.config.V1.Tenant().CreateTenantMember(ctx.Request().Context(), invite.TenantId, &v1.CreateTenantMemberOpts{
UserId: userId,
Role: string(invite.Role),
})
@@ -85,23 +91,21 @@ func (u *UserService) TenantInviteAccept(ctx echo.Context, request gen.TenantInv
return nil, err
}
tenantId := sqlchelpers.UUIDToStr(invite.TenantId)
u.config.Analytics.Enqueue(
"user-invite:accept",
userId,
&tenantId,
userId.String(),
&invite.TenantId,
nil,
map[string]interface{}{
"user_id": userId,
"invite_id": inviteId,
"user_id": userId.String(),
"invite_id": inviteId.String(),
"role": invite.Role,
},
)
ctx.Set("tenant-member", member)
tenant, err := u.config.V1.Tenant().GetTenantByID(ctx.Request().Context(), tenantId)
tenant, err := u.config.V1.Tenant().GetTenantByID(ctx.Request().Context(), invite.TenantId)
if err != nil {
return nil, err
}
+2 -3
View File
@@ -11,13 +11,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (u *UserService) UserGetCurrent(ctx echo.Context, request gen.UserGetCurrentRequestObject) (gen.UserGetCurrentResponseObject, error) {
user := ctx.Get("user").(*sqlcv1.User)
userId := sqlchelpers.UUIDToStr(user.ID)
userId := user.ID
var hasPass bool
@@ -45,7 +44,7 @@ func (u *UserService) UserGetCurrent(ctx echo.Context, request gen.UserGetCurren
u.config.Analytics.Enqueue(
"user:current",
userId,
userId.String(),
nil,
map[string]interface{}{
"email": user.Email,
@@ -15,7 +15,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/config/server"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -106,7 +105,7 @@ func (u *UserService) upsertGithubUserFromToken(ctx context.Context, config *ser
switch err {
case nil:
user, err = u.config.V1.User().UpdateUser(ctx, sqlchelpers.UUIDToStr(user.ID), &v1.UpdateUserOpts{
user, err = u.config.V1.User().UpdateUser(ctx, user.ID, &v1.UpdateUserOpts{
EmailVerified: v1.BoolPtr(gInfo.EmailVerified),
Name: v1.StringPtr(gInfo.Name),
OAuth: oauthOpts,
@@ -17,7 +17,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/config/server"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -99,7 +98,7 @@ func (u *UserService) upsertGoogleUserFromToken(ctx context.Context, config *ser
switch err {
case nil:
user, err = u.config.V1.User().UpdateUser(ctx, sqlchelpers.UUIDToStr(user.ID), &v1.UpdateUserOpts{
user, err = u.config.V1.User().UpdateUser(ctx, user.ID, &v1.UpdateUserOpts{
EmailVerified: v1.BoolPtr(gInfo.EmailVerified),
Name: v1.StringPtr(gInfo.Name),
OAuth: oauthOpts,
@@ -5,13 +5,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *UserService) TenantMembershipsList(ctx echo.Context, request gen.TenantMembershipsListRequestObject) (gen.TenantMembershipsListResponseObject, error) {
user := ctx.Get("user").(*sqlcv1.User)
userId := sqlchelpers.UUIDToStr(user.ID)
userId := user.ID
memberships, err := t.config.V1.User().ListTenantMemberships(ctx.Request().Context(), userId)
+13 -9
View File
@@ -4,18 +4,18 @@ import (
"errors"
"time"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (u *UserService) TenantInviteReject(ctx echo.Context, request gen.TenantInviteRejectRequestObject) (gen.TenantInviteRejectResponseObject, error) {
user := ctx.Get("user").(*sqlcv1.User)
userId := sqlchelpers.UUIDToStr(user.ID)
userId := user.ID.String()
// validate the request
if apiErrors, err := u.config.Validator.ValidateAPI(request.Body); err != nil {
@@ -24,9 +24,15 @@ func (u *UserService) TenantInviteReject(ctx echo.Context, request gen.TenantInv
return gen.TenantInviteReject400JSONResponse(*apiErrors), nil
}
inviteId := request.Body.Invite
inviteIdStr := request.Body.Invite
if inviteId == "" {
if inviteIdStr == "" {
return nil, errors.New("invalid invite id")
}
inviteId, err := uuid.Parse(inviteIdStr)
if err != nil {
return nil, errors.New("invalid invite id")
}
@@ -58,22 +64,20 @@ func (u *UserService) TenantInviteReject(ctx echo.Context, request gen.TenantInv
}
// update the invite
invite, err = u.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), sqlchelpers.UUIDToStr(invite.ID), updateOpts)
invite, err = u.config.V1.TenantInvite().UpdateTenantInvite(ctx.Request().Context(), invite.ID, updateOpts)
if err != nil {
return nil, err
}
tenantId := sqlchelpers.UUIDToStr(invite.TenantId)
u.config.Analytics.Enqueue(
"user-invite:reject",
userId,
&tenantId,
&invite.TenantId,
nil,
map[string]interface{}{
"user_id": userId,
"invite_id": inviteId,
"invite_id": inviteId.String(),
"role": invite.Role,
},
)
+1 -2
View File
@@ -11,7 +11,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
)
func (u *UserService) UserUpdateLogin(ctx echo.Context, request gen.UserUpdateLoginRequestObject) (gen.UserUpdateLoginResponseObject, error) {
@@ -47,7 +46,7 @@ func (u *UserService) UserUpdateLogin(ctx echo.Context, request gen.UserUpdateLo
return gen.UserUpdateLogin400JSONResponse(apierrors.NewAPIErrors(ErrInvalidCredentials)), nil
}
userPass, err := u.config.V1.User().GetUserPassword(ctx.Request().Context(), sqlchelpers.UUIDToStr(existingUser.ID))
userPass, err := u.config.V1.User().GetUserPassword(ctx.Request().Context(), existingUser.ID)
if err != nil {
u.config.Logger.Err(err).Msg("failed to get user password")
@@ -7,7 +7,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -35,7 +34,7 @@ func (u *UserService) UserUpdatePassword(ctx echo.Context, request gen.UserUpdat
return gen.UserUpdatePassword400JSONResponse(*apiErrors), nil
}
userId := sqlchelpers.UUIDToStr(existingUser.ID)
userId := existingUser.ID
userPass, err := u.config.V1.User().GetUserPassword(ctx.Request().Context(), userId)
+4 -15
View File
@@ -11,13 +11,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *V1EventsService) V1EventList(ctx echo.Context, request gen.V1EventListRequestObject) (gen.V1EventListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limit := int64(50)
offset := int64(0)
@@ -36,7 +35,7 @@ func (t *V1EventsService) V1EventList(ctx echo.Context, request gen.V1EventListR
}
opts := sqlcv1.ListEventsParams{
Tenantid: sqlchelpers.UUIDFromStr(tenantId),
Tenantid: tenantId,
Limit: pgtype.Int8{
Int64: limit,
Valid: true,
@@ -63,13 +62,7 @@ func (t *V1EventsService) V1EventList(ctx echo.Context, request gen.V1EventListR
}
if request.Params.WorkflowIds != nil {
workflowIds := make([]pgtype.UUID, len(*request.Params.WorkflowIds))
for i, workflowId := range *request.Params.WorkflowIds {
workflowIds[i] = sqlchelpers.UUIDFromStr(workflowId.String())
}
opts.WorkflowIds = workflowIds
opts.WorkflowIds = *request.Params.WorkflowIds
}
if request.Params.WorkflowRunStatuses != nil {
@@ -81,11 +74,7 @@ func (t *V1EventsService) V1EventList(ctx echo.Context, request gen.V1EventListR
}
if request.Params.EventIds != nil {
eventIds := make([]pgtype.UUID, len(*request.Params.EventIds))
for i, eventId := range *request.Params.EventIds {
eventIds[i] = sqlchelpers.UUIDFromStr(eventId.String())
}
opts.EventIds = eventIds
opts.EventIds = *request.Params.EventIds
}
if request.Params.Scopes != nil {
@@ -4,13 +4,12 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *V1EventsService) V1EventKeyList(ctx echo.Context, request gen.V1EventKeyListRequestObject) (gen.V1EventKeyListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
eventKeys, err := t.config.V1.OLAP().ListEventKeys(ctx.Request().Context(), tenantId)
+9 -3
View File
@@ -4,11 +4,11 @@ import (
"encoding/json"
"fmt"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/labstack/echo/v4"
)
@@ -26,8 +26,14 @@ func (t *V1FiltersService) V1FilterCreate(ctx echo.Context, request gen.V1Filter
payload = marshalledPayload
}
workflowId, err := uuid.Parse(request.Body.WorkflowId.String())
if err != nil {
return gen.V1FilterCreate400JSONResponse(apierrors.NewAPIErrors("workflow id is not a valid uuid")), nil
}
params := v1.CreateFilterOpts{
Workflowid: sqlchelpers.UUIDFromStr(request.Body.WorkflowId.String()),
Workflowid: workflowId,
Scope: request.Body.Scope,
Expression: request.Body.Expression,
Payload: payload,
@@ -36,7 +42,7 @@ func (t *V1FiltersService) V1FilterCreate(ctx echo.Context, request gen.V1Filter
filter, err := t.config.V1.Filters().CreateFilter(
ctx.Request().Context(),
tenant.ID.String(),
tenant.ID,
params,
)
+2 -2
View File
@@ -13,8 +13,8 @@ func (t *V1FiltersService) V1FilterDelete(ctx echo.Context, request gen.V1Filter
filter, err := t.config.V1.Filters().DeleteFilter(
ctx.Request().Context(),
filter.TenantID.String(),
filter.ID.String(),
filter.TenantID,
filter.ID,
)
if err != nil {
+4 -5
View File
@@ -1,13 +1,12 @@
package filtersv1
import (
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
)
@@ -17,12 +16,12 @@ func (t *V1FiltersService) V1FilterList(ctx echo.Context, request gen.V1FilterLi
scopes := request.Params.Scopes
workflowIds := request.Params.WorkflowIds
var workflowIdParams []pgtype.UUID
var workflowIdParams []uuid.UUID
var scopeParams []string
if workflowIds != nil {
for _, id := range *workflowIds {
workflowIdParams = append(workflowIdParams, sqlchelpers.UUIDFromStr(id.String()))
workflowIdParams = append(workflowIdParams, id)
}
}
@@ -43,7 +42,7 @@ func (t *V1FiltersService) V1FilterList(ctx echo.Context, request gen.V1FilterLi
filters, count, err := t.config.V1.Filters().ListFilters(
ctx.Request().Context(),
tenant.ID.String(),
tenant.ID,
v1.ListFiltersOpts{
WorkflowIds: workflowIdParams,
Scopes: scopeParams,
+2 -2
View File
@@ -28,8 +28,8 @@ func (t *V1FiltersService) V1FilterUpdate(ctx echo.Context, request gen.V1Filter
filter, err := t.config.V1.Filters().UpdateFilter(
ctx.Request().Context(),
tenant.ID.String(),
filter.ID.String(),
tenant.ID,
filter.ID,
v1.UpdateFilterOpts{
Scope: request.Body.Scope,
Expression: request.Body.Expression,
+1 -2
View File
@@ -6,7 +6,6 @@ import (
client "github.com/hatchet-dev/hatchet/pkg/client/v1"
"github.com/hatchet-dev/hatchet/pkg/config/server"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -23,7 +22,7 @@ func NewProxy[in, out any](config *server.ServerConfig, method func(ctx context.
}
func (p *Proxy[in, out]) Do(ctx context.Context, tenant *sqlcv1.Tenant, input *in) (*out, error) {
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
expiresAt := time.Now().Add(5 * time.Minute).UTC()
+1 -1
View File
@@ -53,7 +53,7 @@ func (t *TasksService) V1TaskGet(ctx echo.Context, request gen.V1TaskGetRequestO
return nil, err
}
workflowVersion, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx.Request().Context(), task.TenantID.String(), taskWithData.WorkflowVersionID.String())
workflowVersion, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx.Request().Context(), task.TenantID, taskWithData.WorkflowVersionID)
if err != nil {
return nil, err
+5 -10
View File
@@ -4,11 +4,9 @@ import (
"strings"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/labstack/echo/v4"
@@ -18,7 +16,7 @@ import (
func (t *TasksService) V1TaskListStatusMetrics(ctx echo.Context, request gen.V1TaskListStatusMetricsRequestObject) (gen.V1TaskListStatusMetricsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
var workflowIds []uuid.UUID
@@ -26,18 +24,15 @@ func (t *TasksService) V1TaskListStatusMetrics(ctx echo.Context, request gen.V1T
workflowIds = *request.Params.WorkflowIds
}
var parentTaskExternalId *pgtype.UUID
var parentTaskExternalId *uuid.UUID
if request.Params.ParentTaskExternalId != nil {
uuidPtr := *request.Params.ParentTaskExternalId
uuidVal := sqlchelpers.UUIDFromStr(uuidPtr.String())
parentTaskExternalId = &uuidVal
parentTaskExternalId = request.Params.ParentTaskExternalId
}
var triggeringEventExternalId *pgtype.UUID
var triggeringEventExternalId *uuid.UUID
if request.Params.TriggeringEventExternalId != nil {
uuidVal := sqlchelpers.UUIDFromStr(request.Params.TriggeringEventExternalId.String())
triggeringEventExternalId = &uuidVal
triggeringEventExternalId = request.Params.TriggeringEventExternalId
}
additionalMetadataFilters := make(map[string]interface{})
@@ -9,13 +9,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *TasksService) V1TaskGetPointMetrics(ctx echo.Context, request gen.V1TaskGetPointMetricsRequestObject) (gen.V1TaskGetPointMetricsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// 24 hours ago, rounded to the nearest minute
lowerBound := time.Now().UTC().Add(-24 * time.Hour).Truncate(30 * time.Minute)
@@ -1,28 +1,21 @@
package tasks
import (
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
)
func (t *TasksService) V1DagListTasks(ctx echo.Context, request gen.V1DagListTasksRequestObject) (gen.V1DagListTasksResponseObject, error) {
tenantId := request.Params.Tenant.String()
tenantId := request.Params.Tenant
dagIds := request.Params.DagIds
pguuids := make([]pgtype.UUID, 0)
for _, dagId := range dagIds {
pguuids = append(pguuids, sqlchelpers.UUIDFromStr(dagId.String()))
}
tasks, taskIdToDagExternalId, err := t.config.V1.OLAP().ListTasksByDAGId(
ctx.Request().Context(),
tenantId,
pguuids,
dagIds,
false,
)
@@ -4,7 +4,6 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
@@ -12,7 +11,7 @@ import (
func (t *TasksService) V1TaskEventList(ctx echo.Context, request gen.V1TaskEventListRequestObject) (gen.V1TaskEventListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
task := ctx.Get("task").(*sqlcv1.V1TasksOlap)
taskRunEvents, err := t.config.V1.OLAP().ListTaskRunEvents(ctx.Request().Context(), tenantId, task.ID, task.InsertedAt, *request.Params.Limit, *request.Params.Offset)
@@ -21,7 +20,7 @@ func (t *TasksService) V1TaskEventList(ctx echo.Context, request gen.V1TaskEvent
return nil, err
}
result := transformers.ToTaskRunEventMany(taskRunEvents, sqlchelpers.UUIDToStr(task.ExternalID))
result := transformers.ToTaskRunEventMany(taskRunEvents, task.ExternalID)
return gen.V1TaskEventList200JSONResponse(
result,
+2 -3
View File
@@ -7,7 +7,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/hatchet-dev/hatchet/pkg/telemetry"
@@ -16,7 +15,7 @@ import (
func (t *TasksService) V1LogLineList(ctx echo.Context, request gen.V1LogLineListRequestObject) (gen.V1LogLineListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
task := ctx.Get("task").(*sqlcv1.V1TasksOlap)
reqCtx, span := telemetry.NewSpan(ctx.Request().Context(), "GET /api/v1/stable/tasks/{task}/logs")
@@ -81,7 +80,7 @@ func (t *TasksService) V1LogLineList(ctx echo.Context, request gen.V1LogLineList
Attempt: attempt,
}
logLines, err := t.config.V1.Logs().ListLogLines(reqCtx, tenantId, task.ExternalID.String(), opts)
logLines, err := t.config.V1.Logs().ListLogLines(reqCtx, tenantId, task.ExternalID, opts)
if err != nil {
span.RecordError(err)
+6 -6
View File
@@ -4,19 +4,19 @@ import (
"encoding/json"
"fmt"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (w *V1WebhooksService) V1WebhookCreate(ctx echo.Context, request gen.V1WebhookCreateRequestObject) (gen.V1WebhookCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
canCreate, _, err := w.config.V1.TenantLimit().CanCreate(ctx.Request().Context(), sqlcv1.LimitResourceINCOMINGWEBHOOK, tenant.ID.String(), 1)
canCreate, _, err := w.config.V1.TenantLimit().CanCreate(ctx.Request().Context(), sqlcv1.LimitResourceINCOMINGWEBHOOK, tenant.ID, 1)
if err != nil {
return nil, fmt.Errorf("failed to check if webhook can be created: %w", err)
@@ -32,7 +32,7 @@ func (w *V1WebhooksService) V1WebhookCreate(ctx echo.Context, request gen.V1Webh
}, nil
}
params, err := w.constructCreateOpts(tenant.ID.String(), *request.Body)
params, err := w.constructCreateOpts(tenant.ID, *request.Body)
if err != nil {
return gen.V1WebhookCreate400JSONResponse{
Errors: []gen.APIError{
@@ -45,7 +45,7 @@ func (w *V1WebhooksService) V1WebhookCreate(ctx echo.Context, request gen.V1Webh
webhook, err := w.config.V1.Webhooks().CreateWebhook(
ctx.Request().Context(),
tenant.ID.String(),
tenant.ID,
params,
)
@@ -85,9 +85,9 @@ func extractAuthType(request gen.V1CreateWebhookRequest) (sqlcv1.V1IncomingWebho
return authType, nil
}
func (w *V1WebhooksService) constructCreateOpts(tenantId string, request gen.V1CreateWebhookRequest) (v1.CreateWebhookOpts, error) {
func (w *V1WebhooksService) constructCreateOpts(tenantId uuid.UUID, request gen.V1CreateWebhookRequest) (v1.CreateWebhookOpts, error) {
params := v1.CreateWebhookOpts{
Tenantid: sqlchelpers.UUIDFromStr(tenantId),
Tenantid: tenantId,
}
discriminator, err := extractAuthType(request)
+1 -1
View File
@@ -14,7 +14,7 @@ func (w *V1WebhooksService) V1WebhookDelete(ctx echo.Context, request gen.V1Webh
webhook, err := w.config.V1.Webhooks().DeleteWebhook(
ctx.Request().Context(),
webhook.TenantID.String(),
webhook.TenantID,
webhook.Name,
)
+1 -1
View File
@@ -28,7 +28,7 @@ func (w *V1WebhooksService) V1WebhookList(ctx echo.Context, request gen.V1Webhoo
webhooks, err := w.config.V1.Webhooks().ListWebhooks(
ctx.Request().Context(),
tenant.ID.String(),
tenant.ID,
v1.ListWebhooksOpts{
WebhookNames: webhookNames,
WebhookSourceNames: sourceNames,
@@ -27,10 +27,10 @@ import (
)
func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1WebhookReceiveRequestObject) (gen.V1WebhookReceiveResponseObject, error) {
tenantId := request.Tenant.String()
tenantId := request.Tenant
webhookName := request.V1Webhook
w.config.Logger.Debug().Str("webhook", webhookName).Str("tenant", tenantId).Str("method", ctx.Request().Method).Str("content_type", ctx.Request().Header.Get("Content-Type")).Msg("received webhook request")
w.config.Logger.Debug().Str("webhook", webhookName).Str("tenant", tenantId.String()).Str("method", ctx.Request().Method).Str("content_type", ctx.Request().Header.Get("Content-Type")).Msg("received webhook request")
tenant, err := w.config.V1.Tenant().GetTenantByID(ctx.Request().Context(), tenantId)
@@ -56,7 +56,7 @@ func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1Web
}, nil
}
if webhook.TenantID.String() != tenantId {
if webhook.TenantID != tenantId {
return gen.V1WebhookReceive403JSONResponse{
Errors: []gen.APIError{
{
@@ -108,7 +108,7 @@ func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1Web
formData, err := url.ParseQuery(string(rawBody))
if err != nil {
errorMsg := "Failed to parse form data"
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId).Msg(errorMsg)
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId.String()).Msg(errorMsg)
return gen.V1WebhookReceive400JSONResponse{
Errors: []gen.APIError{
{
@@ -137,7 +137,7 @@ func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1Web
payloadPreview = payloadPreview[:200] + "..."
}
errorMsg := "Failed to unmarshal payload parameter as JSON"
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId).Int("payload_length", len(payloadValue)).Str("payload_preview", payloadPreview).Msg(errorMsg)
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId.String()).Int("payload_length", len(payloadValue)).Str("payload_preview", payloadPreview).Msg(errorMsg)
return gen.V1WebhookReceive400JSONResponse{
Errors: []gen.APIError{
{
@@ -179,7 +179,7 @@ func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1Web
bodyPreview = bodyPreview[:200] + "..."
}
errorMsg := "Failed to unmarshal request body as JSON"
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId).Str("content_type", contentType).Int("body_length", len(rawBody)).Str("body_preview", bodyPreview).Msg(errorMsg)
w.config.Logger.Info().Err(err).Str("webhook", webhookName).Str("tenant", tenantId.String()).Str("content_type", contentType).Int("body_length", len(rawBody)).Str("body_preview", bodyPreview).Msg(errorMsg)
return gen.V1WebhookReceive400JSONResponse{
Errors: []gen.APIError{
{
@@ -221,11 +221,11 @@ func (w *V1WebhooksService) V1WebhookReceive(ctx echo.Context, request gen.V1Web
errorMsg = "Failed to evaluate event key expression"
}
w.config.Logger.Warn().Err(err).Str("webhook", webhookName).Str("tenant", tenantId).Str("event_key_expression", webhook.EventKeyExpression).Msg(errorMsg)
w.config.Logger.Warn().Err(err).Str("webhook", webhookName).Str("tenant", tenantId.String()).Str("event_key_expression", webhook.EventKeyExpression).Msg(errorMsg)
ingestionErr := w.config.Ingestor.IngestCELEvaluationFailure(
ctx.Request().Context(),
tenant.ID.String(),
tenant.ID,
err.Error(),
sqlcv1.V1CelEvaluationFailureSourceWEBHOOK,
)
+1 -1
View File
@@ -14,7 +14,7 @@ func (w *V1WebhooksService) V1WebhookUpdate(ctx echo.Context, request gen.V1Webh
webhook, err := w.config.V1.Webhooks().UpdateWebhook(
ctx.Request().Context(),
webhook.TenantID.String(),
webhook.TenantID,
webhook.Name,
request.Body.EventKeyExpression,
)
@@ -8,7 +8,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
@@ -18,7 +17,7 @@ import (
func (t *V1WorkflowRunsService) V1WorkflowRunGetTimings(ctx echo.Context, request gen.V1WorkflowRunGetTimingsRequestObject) (gen.V1WorkflowRunGetTimingsResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
rawWorkflowRun := ctx.Get("v1-workflow-run").(*v1.V1WorkflowRunPopulator)
workflowRun := rawWorkflowRun.WorkflowRun
@@ -4,12 +4,10 @@ import (
"context"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
@@ -17,7 +15,7 @@ import (
func (t *V1WorkflowRunsService) V1WorkflowRunGet(ctx echo.Context, request gen.V1WorkflowRunGetRequestObject) (gen.V1WorkflowRunGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
rawWorkflowRun := ctx.Get("v1-workflow-run").(*v1.V1WorkflowRunPopulator)
requestContext := ctx.Request().Context()
@@ -40,7 +38,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunGet(ctx echo.Context, request gen.V
func (t *V1WorkflowRunsService) getWorkflowRunDetails(
ctx context.Context,
tenantId string,
tenantId uuid.UUID,
rawWorkflowRun *v1.V1WorkflowRunPopulator,
) (*gen.V1WorkflowRunDetails, error) {
workflowRun := rawWorkflowRun.WorkflowRun
@@ -68,23 +66,21 @@ func (t *V1WorkflowRunsService) getWorkflowRunDetails(
return nil, err
}
stepIdToTaskExternalId := make(map[pgtype.UUID]pgtype.UUID)
stepIdToTaskExternalId := make(map[uuid.UUID]uuid.UUID)
for _, task := range tasks {
stepIdToTaskExternalId[task.StepID] = task.ExternalID
}
workflowVersionId := uuid.MustParse(sqlchelpers.UUIDToStr(workflowRun.WorkflowVersionId))
shape, err := t.config.V1.Workflows().GetWorkflowShape(
ctx, workflowVersionId,
ctx, workflowRun.WorkflowVersionId,
)
if err != nil {
return nil, err
}
workflowVersion, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx, tenantId, workflowRun.WorkflowVersionId.String())
workflowVersion, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx, tenantId, workflowRun.WorkflowVersionId)
if err != nil {
return nil, err
@@ -5,7 +5,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
@@ -13,7 +12,7 @@ import (
func (t *V1WorkflowRunsService) V1WorkflowRunTaskEventsList(ctx echo.Context, request gen.V1WorkflowRunTaskEventsListRequestObject) (gen.V1WorkflowRunTaskEventsListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
rawWorkflowRun := ctx.Get("v1-workflow-run").(*v1.V1WorkflowRunPopulator)
workflowRun := rawWorkflowRun.WorkflowRun
+15 -26
View File
@@ -5,19 +5,17 @@ import (
"strings"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/hatchet-dev/hatchet/pkg/telemetry"
transformers "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
)
func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1WorkflowRunListRequestObject, tenantId string) (gen.V1WorkflowRunListResponseObject, error) {
func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1WorkflowRunListRequestObject, tenantId uuid.UUID) (gen.V1WorkflowRunListResponseObject, error) {
ctx, span := telemetry.NewSpan(ctx, "v1-workflow-runs-list-with-dags-tasks")
defer span.End()
@@ -29,10 +27,9 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
sqlcv1.V1ReadableStatusOlapCOMPLETED,
sqlcv1.V1ReadableStatusOlapCANCELLED,
}
since = request.Params.Since
workflowIds = []uuid.UUID{}
limit int64 = 50
offset int64
since = request.Params.Since
limit int64 = 50
offset int64
)
if request.Params.Statuses != nil {
@@ -52,6 +49,7 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
offset = *request.Params.Offset
}
workflowIds := make([]uuid.UUID, 0)
if request.Params.WorkflowIds != nil {
workflowIds = *request.Params.WorkflowIds
}
@@ -88,14 +86,11 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
}
if request.Params.ParentTaskExternalId != nil {
parentTaskExternalId := request.Params.ParentTaskExternalId.String()
id := sqlchelpers.UUIDFromStr(parentTaskExternalId)
opts.ParentTaskExternalId = &id
opts.ParentTaskExternalId = request.Params.ParentTaskExternalId
}
if request.Params.TriggeringEventExternalId != nil {
id := sqlchelpers.UUIDFromStr(request.Params.TriggeringEventExternalId.String())
opts.TriggeringEventExternalId = &id
opts.TriggeringEventExternalId = request.Params.TriggeringEventExternalId
}
dags, total, err := t.config.V1.OLAP().ListWorkflowRuns(
@@ -108,7 +103,7 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
return nil, err
}
dagExternalIds := make([]pgtype.UUID, 0)
dagExternalIds := make([]uuid.UUID, 0)
for _, dag := range dags {
if dag.Kind == sqlcv1.V1RunKindDAG {
@@ -127,7 +122,7 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
return nil, err
}
pgWorkflowIds := make([]pgtype.UUID, 0)
pgWorkflowIds := make([]uuid.UUID, 0)
for _, wf := range dags {
pgWorkflowIds = append(pgWorkflowIds, wf.WorkflowID)
@@ -176,7 +171,7 @@ func (t *V1WorkflowRunsService) WithDags(ctx context.Context, request gen.V1Work
), nil
}
func (t *V1WorkflowRunsService) OnlyTasks(ctx context.Context, request gen.V1WorkflowRunListRequestObject, tenantId string) (gen.V1WorkflowRunListResponseObject, error) {
func (t *V1WorkflowRunsService) OnlyTasks(ctx context.Context, request gen.V1WorkflowRunListRequestObject, tenantId uuid.UUID) (gen.V1WorkflowRunListResponseObject, error) {
ctx, span := telemetry.NewSpan(ctx, "v1-workflow-runs-list-only-tasks")
defer span.End()
@@ -261,7 +256,7 @@ func (t *V1WorkflowRunsService) OnlyTasks(ctx context.Context, request gen.V1Wor
return nil, err
}
workflowIdsForNames := make([]pgtype.UUID, 0)
workflowIdsForNames := make([]uuid.UUID, 0)
for _, task := range tasks {
workflowIdsForNames = append(workflowIdsForNames, task.WorkflowID)
}
@@ -294,7 +289,7 @@ func (t *V1WorkflowRunsService) OnlyTasks(ctx context.Context, request gen.V1Wor
func (t *V1WorkflowRunsService) V1WorkflowRunList(ctx echo.Context, request gen.V1WorkflowRunListRequestObject) (gen.V1WorkflowRunListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
spanContext, span := telemetry.NewSpan(ctx.Request().Context(), "v1-workflow-runs-list")
defer span.End()
@@ -309,11 +304,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunList(ctx echo.Context, request gen.
func (t *V1WorkflowRunsService) V1WorkflowRunDisplayNamesList(ctx echo.Context, request gen.V1WorkflowRunDisplayNamesListRequestObject) (gen.V1WorkflowRunDisplayNamesListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
externalIds := make([]pgtype.UUID, len(request.Params.ExternalIds))
for i, id := range request.Params.ExternalIds {
externalIds[i] = sqlchelpers.UUIDFromStr(id.String())
}
externalIds := request.Params.ExternalIds
displayNames, err := t.config.V1.OLAP().ListWorkflowRunDisplayNames(
ctx.Request().Context(),
@@ -334,7 +325,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunDisplayNamesList(ctx echo.Context,
func (t *V1WorkflowRunsService) V1WorkflowRunExternalIdsList(ctx echo.Context, request gen.V1WorkflowRunExternalIdsListRequestObject) (gen.V1WorkflowRunExternalIdsListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := tenant.ID.String()
tenantId := tenant.ID
spanCtx, span := telemetry.NewSpan(ctx.Request().Context(), "v1-workflow-runs-list-external-ids")
defer span.End()
@@ -396,9 +387,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunExternalIdsList(ctx echo.Context, r
return nil, err
}
result := transformers.ToWorkflowRunExternalIds(externalIds)
return gen.V1WorkflowRunExternalIdsList200JSONResponse(
result,
externalIds,
), nil
}
@@ -6,6 +6,7 @@ import (
"fmt"
"time"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/labstack/echo/v4"
"google.golang.org/grpc/codes"
@@ -16,13 +17,12 @@ import (
contracts "github.com/hatchet-dev/hatchet/internal/services/shared/proto/v1"
"github.com/hatchet-dev/hatchet/pkg/constants"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request gen.V1WorkflowRunCreateRequestObject) (gen.V1WorkflowRunCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
// make sure input can be marshalled and unmarshalled to input type
inputBytes, err := json.Marshal(request.Body.Input)
@@ -92,10 +92,16 @@ func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request ge
var rawWorkflowRun *v1.V1WorkflowRunPopulator
retries := 0
externalId, err := uuid.Parse(resp.ExternalId)
if err != nil {
return nil, fmt.Errorf("invalid external id returned from trigger workflow run: %w", err)
}
for retries < 10 {
rawWorkflowRun, err = t.config.V1.OLAP().ReadWorkflowRun(
ctx.Request().Context(),
sqlchelpers.UUIDFromStr(resp.ExternalId),
externalId,
)
if err != nil && !errors.Is(err, pgx.ErrNoRows) {
@@ -115,7 +121,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request ge
return nil, fmt.Errorf("rawWorkflowRun not populated, we are likely seeing high latency in creating tasks")
}
if sqlchelpers.UUIDToStr(rawWorkflowRun.WorkflowRun.TenantID) != tenantId {
if rawWorkflowRun.WorkflowRun.TenantID != tenantId {
return nil, fmt.Errorf("tenantId mismatch in the triggered workflow run")
}
+11 -11
View File
@@ -3,12 +3,12 @@ package workers
import (
"fmt"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
transformersv1 "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -21,15 +21,15 @@ func (t *WorkerService) WorkerGet(ctx echo.Context, request gen.WorkerGetRequest
func (t *WorkerService) workerGetV1(ctx echo.Context, tenant *sqlcv1.Tenant, request gen.WorkerGetRequestObject) (gen.WorkerGetResponseObject, error) {
workerV0 := ctx.Get("worker").(*sqlcv1.GetWorkerByIdRow)
worker, err := t.config.V1.Workers().GetWorkerById(sqlchelpers.UUIDToStr(workerV0.Worker.ID))
worker, err := t.config.V1.Workers().GetWorkerById(workerV0.Worker.ID)
if err != nil {
return nil, err
}
slotState, err := t.config.V1.Workers().ListWorkerState(
sqlchelpers.UUIDToStr(worker.Worker.TenantId),
sqlchelpers.UUIDToStr(worker.Worker.ID),
worker.Worker.TenantId,
worker.Worker.ID,
int(worker.Worker.MaxRuns),
)
@@ -38,23 +38,23 @@ func (t *WorkerService) workerGetV1(ctx echo.Context, tenant *sqlcv1.Tenant, req
}
workerIdToActions, err := t.config.V1.Workers().GetWorkerActionsByWorkerId(
sqlchelpers.UUIDToStr(worker.Worker.TenantId),
[]string{sqlchelpers.UUIDToStr(worker.Worker.ID)},
worker.Worker.TenantId,
[]uuid.UUID{worker.Worker.ID},
)
if err != nil {
return nil, err
}
workerWorkflows, err := t.config.V1.Workers().GetWorkerWorkflowsByWorkerId(tenant.ID.String(), worker.Worker.ID.String())
workerWorkflows, err := t.config.V1.Workers().GetWorkerWorkflowsByWorkerId(tenant.ID, worker.Worker.ID)
if err != nil {
return nil, err
}
actions, ok := workerIdToActions[sqlchelpers.UUIDToStr(worker.Worker.ID)]
actions, ok := workerIdToActions[worker.Worker.ID.String()]
if !ok {
return nil, fmt.Errorf("worker %s has no actions", sqlchelpers.UUIDToStr(worker.Worker.ID))
return nil, fmt.Errorf("worker %s has no actions", worker.Worker.ID.String())
}
respStepRuns := make([]gen.RecentStepRuns, 0)
@@ -67,8 +67,8 @@ func (t *WorkerService) workerGetV1(ctx echo.Context, tenant *sqlcv1.Tenant, req
workerResp.Slots = transformersv1.ToSlotState(slotState, slots)
affinity, err := t.config.V1.Workers().ListWorkerLabels(
sqlchelpers.UUIDToStr(worker.Worker.TenantId),
sqlchelpers.UUIDToStr(worker.Worker.ID),
worker.Worker.TenantId,
worker.Worker.ID,
)
if err != nil {
+8 -8
View File
@@ -4,13 +4,13 @@ import (
"fmt"
"time"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
transformersv1 "github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers/v1"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/hatchet-dev/hatchet/pkg/telemetry"
)
@@ -31,7 +31,7 @@ func (t *WorkerService) WorkerList(ctx echo.Context, request gen.WorkerListReque
func (t *WorkerService) workerListV0(ctx echo.Context, tenant *sqlcv1.Tenant, request gen.WorkerListRequestObject) (gen.WorkerListResponseObject, error) {
reqCtx := ctx.Request().Context()
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
sixSecAgo := time.Now().Add(-24 * time.Hour)
@@ -75,7 +75,7 @@ func (t *WorkerService) workerListV0(ctx echo.Context, tenant *sqlcv1.Tenant, re
func (t *WorkerService) workerListV1(ctx echo.Context, tenant *sqlcv1.Tenant, request gen.WorkerListRequestObject) (gen.WorkerListResponseObject, error) {
reqCtx := ctx.Request().Context()
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
sixSecAgo := time.Now().Add(-24 * time.Hour)
@@ -101,13 +101,13 @@ func (t *WorkerService) workerListV1(ctx echo.Context, tenant *sqlcv1.Tenant, re
telemetry.AttributeKV{Key: "workers.count", Value: len(workers)},
)
workerIdSet := make(map[string]struct{})
workerIdSet := make(map[uuid.UUID]struct{})
for _, worker := range workers {
workerIdSet[sqlchelpers.UUIDToStr(worker.Worker.ID)] = struct{}{}
workerIdSet[worker.Worker.ID] = struct{}{}
}
workerIds := make([]string, 0, len(workerIdSet))
workerIds := make([]uuid.UUID, 0, len(workerIdSet))
for workerId := range workerIdSet {
workerIds = append(workerIds, workerId)
}
@@ -120,7 +120,7 @@ func (t *WorkerService) workerListV1(ctx echo.Context, tenant *sqlcv1.Tenant, re
)
workerIdToActionIds, err := t.config.V1.Workers().GetWorkerActionsByWorkerId(
sqlchelpers.UUIDToStr(tenant.ID),
tenant.ID,
workerIds,
)
@@ -138,7 +138,7 @@ func (t *WorkerService) workerListV1(ctx echo.Context, tenant *sqlcv1.Tenant, re
for i, worker := range workers {
workerCp := worker
slots := int(worker.RemainingSlots)
actions := workerIdToActionIds[sqlchelpers.UUIDToStr(workerCp.Worker.ID)]
actions := workerIdToActionIds[workerCp.Worker.ID.String()]
rows[i] = *transformersv1.ToWorkerSqlc(&workerCp.Worker, &slots, &workerCp.WebhookUrl.String, actions, nil)
}
+2 -3
View File
@@ -6,7 +6,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -28,8 +27,8 @@ func (t *WorkerService) WorkerUpdate(ctx echo.Context, request gen.WorkerUpdateR
updatedWorker, err := t.config.V1.Workers().UpdateWorker(
ctx.Request().Context(),
sqlchelpers.UUIDToStr(worker.Worker.TenantId),
sqlchelpers.UUIDToStr(worker.Worker.ID),
worker.Worker.TenantId,
worker.Worker.ID,
update,
)
@@ -12,13 +12,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowScheduledBulkDelete(ctx echo.Context, request gen.WorkflowScheduledBulkDeleteRequestObject) (gen.WorkflowScheduledBulkDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
if request.Body == nil {
return gen.WorkflowScheduledBulkDelete400JSONResponse(gen.APIErrors{
@@ -51,24 +50,15 @@ func (t *WorkflowService) WorkflowScheduledBulkDelete(ctx echo.Context, request
orderDirection := "DESC"
opts := &v1.ListScheduledWorkflowsOpts{
Limit: &limit,
Offset: &offset,
OrderBy: &orderBy,
OrderDirection: &orderDirection,
Limit: &limit,
Offset: &offset,
OrderBy: &orderBy,
OrderDirection: &orderDirection,
WorkflowId: filter.WorkflowId,
ParentWorkflowRunId: filter.ParentWorkflowRunId,
ParentStepRunId: filter.ParentStepRunId,
}
if filter.WorkflowId != nil {
wid := filter.WorkflowId.String()
opts.WorkflowId = &wid
}
if filter.ParentWorkflowRunId != nil {
pid := filter.ParentWorkflowRunId.String()
opts.ParentWorkflowRunId = &pid
}
if filter.ParentStepRunId != nil {
psid := filter.ParentStepRunId.String()
opts.ParentStepRunId = &psid
}
if filter.AdditionalMetadata != nil {
additionalMetadata := make(map[string]interface{}, len(*filter.AdditionalMetadata))
for _, v := range *filter.AdditionalMetadata {
@@ -101,7 +91,7 @@ func (t *WorkflowService) WorkflowScheduledBulkDelete(ctx echo.Context, request
// Convert list results into ids + pre-fill errors for non-API items.
ids = make([]uuid.UUID, 0, len(all))
for _, row := range all {
idStr := sqlchelpers.UUIDToStr(row.ID)
idStr := row.ID.String()
idUUID, err := uuid.Parse(idStr)
if err != nil {
// fall back to skip with generic error (should never happen)
@@ -134,12 +124,11 @@ func (t *WorkflowService) WorkflowScheduledBulkDelete(ctx echo.Context, request
}
chunk := ids[i:end]
chunkStr := make([]string, 0, len(chunk))
chunkUUIDByStr := make(map[string]uuid.UUID, len(chunk))
chunkStr := make([]uuid.UUID, 0, len(chunk))
chunkUUIDByStr := make(map[uuid.UUID]uuid.UUID, len(chunk))
for _, id := range chunk {
idStr := id.String()
chunkStr = append(chunkStr, idStr)
chunkUUIDByStr[idStr] = id
chunkStr = append(chunkStr, id)
chunkUUIDByStr[id] = id
}
deletedIds, err := t.config.V1.WorkflowSchedules().BulkDeleteScheduledWorkflows(dbCtx, tenantId, chunkStr)
@@ -147,13 +136,13 @@ func (t *WorkflowService) WorkflowScheduledBulkDelete(ctx echo.Context, request
return nil, err
}
deletedSet := make(map[string]struct{}, len(deletedIds))
deletedSet := make(map[uuid.UUID]struct{}, len(deletedIds))
for _, idStr := range deletedIds {
deletedSet[idStr] = struct{}{}
}
for _, id := range chunk {
if _, ok := deletedSet[id.String()]; ok {
if _, ok := deletedSet[id]; ok {
deleted = append(deleted, id)
}
}
@@ -4,18 +4,18 @@ import (
"context"
"time"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
openapi_types "github.com/oapi-codegen/runtime/types"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowScheduledBulkUpdate(ctx echo.Context, request gen.WorkflowScheduledBulkUpdateRequestObject) (gen.WorkflowScheduledBulkUpdateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
if request.Body == nil {
return gen.WorkflowScheduledBulkUpdate400JSONResponse(gen.APIErrors{
@@ -37,12 +37,11 @@ func (t *WorkflowService) WorkflowScheduledBulkUpdate(ctx echo.Context, request
}
chunk := request.Body.Updates[i:end]
chunkIds := make([]string, 0, len(chunk))
chunkUUIDByStr := make(map[string]openapi_types.UUID, len(chunk))
chunkIds := make([]uuid.UUID, 0, len(chunk))
chunkUUIDByStr := make(map[uuid.UUID]openapi_types.UUID, len(chunk))
for _, u := range chunk {
idStr := u.Id.String()
chunkIds = append(chunkIds, idStr)
chunkUUIDByStr[idStr] = u.Id
chunkIds = append(chunkIds, u.Id)
chunkUUIDByStr[u.Id] = u.Id
}
metaById, err := t.config.V1.WorkflowSchedules().ScheduledWorkflowMetaByIds(dbCtx, tenantId, chunkIds)
@@ -53,9 +52,8 @@ func (t *WorkflowService) WorkflowScheduledBulkUpdate(ctx echo.Context, request
toUpdate := make([]v1.ScheduledWorkflowUpdate, 0, len(chunk))
for _, u := range chunk {
id := u.Id
idStr := id.String()
meta, ok := metaById[idStr]
meta, ok := metaById[id]
if !ok {
idCp := id
errors = append(errors, gen.ScheduledWorkflowsBulkError{Id: &idCp, Error: "Scheduled workflow not found."})
@@ -69,7 +67,7 @@ func (t *WorkflowService) WorkflowScheduledBulkUpdate(ctx echo.Context, request
}
toUpdate = append(toUpdate, v1.ScheduledWorkflowUpdate{
Id: idStr,
Id: id,
TriggerAt: u.TriggerAt,
})
}
@@ -79,13 +77,13 @@ func (t *WorkflowService) WorkflowScheduledBulkUpdate(ctx echo.Context, request
return nil, err
}
updatedSet := make(map[string]struct{}, len(updatedIds))
updatedSet := make(map[uuid.UUID]struct{}, len(updatedIds))
for _, idStr := range updatedIds {
updatedSet[idStr] = struct{}{}
}
for _, u := range chunk {
if _, ok := updatedSet[u.Id.String()]; ok {
if _, ok := updatedSet[u.Id]; ok {
updated = append(updated, u.Id)
}
}
@@ -10,13 +10,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) CronWorkflowTriggerCreate(ctx echo.Context, request gen.CronWorkflowTriggerCreateRequestObject) (gen.CronWorkflowTriggerCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
if request.Body.CronName == "" {
return gen.CronWorkflowTriggerCreate400JSONResponse(apierrors.NewAPIErrors("cron name is required")), nil
@@ -60,7 +59,7 @@ func (t *WorkflowService) CronWorkflowTriggerCreate(ctx echo.Context, request ge
Cron: request.Body.CronExpression,
Input: request.Body.Input,
AdditionalMetadata: request.Body.AdditionalMetadata,
WorkflowId: sqlchelpers.UUIDToStr(workflow.ID),
WorkflowId: workflow.ID,
Priority: &priority,
},
)
@@ -10,13 +10,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/constants"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) ScheduledWorkflowRunCreate(ctx echo.Context, request gen.ScheduledWorkflowRunCreateRequestObject) (gen.ScheduledWorkflowRunCreateResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
workflow, err := t.config.V1.Workflows().GetWorkflowByName(ctx.Request().Context(), tenantId, request.Workflow)
@@ -56,7 +55,7 @@ func (t *WorkflowService) ScheduledWorkflowRunCreate(ctx echo.Context, request g
ScheduledTrigger: request.Body.TriggerAt,
Input: input,
AdditionalMetadata: additionalMetadata,
WorkflowId: sqlchelpers.UUIDToStr(workflow.ID),
WorkflowId: workflow.ID,
Priority: &priority,
})
+2 -3
View File
@@ -4,16 +4,15 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowDelete(ctx echo.Context, request gen.WorkflowDeleteRequestObject) (gen.WorkflowDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
workflow := ctx.Get("workflow").(*sqlcv1.GetWorkflowByIdRow)
_, err := t.config.V1.Workflows().DeleteWorkflow(ctx.Request().Context(), tenantId, sqlchelpers.UUIDToStr(workflow.Workflow.ID))
_, err := t.config.V1.Workflows().DeleteWorkflow(ctx.Request().Context(), tenantId, workflow.Workflow.ID)
if err != nil {
return nil, err
@@ -7,7 +7,6 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -19,8 +18,8 @@ func (t *WorkflowService) WorkflowCronDelete(ctx echo.Context, request gen.Workf
defer cancel()
err := t.config.V1.WorkflowSchedules().DeleteCronWorkflow(dbCtx,
sqlchelpers.UUIDToStr(cron.TenantId),
sqlchelpers.UUIDToStr(cron.CronId),
cron.TenantId,
cron.CronId,
)
if err != nil {
@@ -7,7 +7,6 @@ import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -24,7 +23,7 @@ func (t *WorkflowService) WorkflowScheduledDelete(ctx echo.Context, request gen.
dbCtx, cancel := context.WithTimeout(ctx.Request().Context(), 30*time.Second)
defer cancel()
err := t.config.V1.WorkflowSchedules().DeleteScheduledWorkflow(dbCtx, sqlchelpers.UUIDToStr(scheduled.TenantId), request.ScheduledWorkflowRun.String())
err := t.config.V1.WorkflowSchedules().DeleteScheduledWorkflow(dbCtx, scheduled.TenantId, request.ScheduledWorkflowRun)
if err != nil {
return nil, err
+4 -4
View File
@@ -1,24 +1,24 @@
package workflows
import (
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowGet(ctx echo.Context, request gen.WorkflowGetRequestObject) (gen.WorkflowGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
workflow := ctx.Get("workflow").(*sqlcv1.GetWorkflowByIdRow)
if workflow == nil || !workflow.WorkflowVersionId.Valid {
if workflow == nil || workflow.WorkflowVersionId == nil || *workflow.WorkflowVersionId == uuid.Nil {
return gen.WorkflowGet404JSONResponse(gen.APIErrors{}), nil
}
version, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx.Request().Context(), tenantId, sqlchelpers.UUIDToStr(workflow.WorkflowVersionId))
version, _, _, _, _, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx.Request().Context(), tenantId, *workflow.WorkflowVersionId)
if err != nil {
return nil, err
+1 -3
View File
@@ -9,18 +9,16 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowCronGet(ctx echo.Context, request gen.WorkflowCronGetRequestObject) (gen.WorkflowCronGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
dbCtx, cancel := context.WithTimeout(ctx.Request().Context(), 30*time.Second)
defer cancel()
scheduled, err := t.config.V1.WorkflowSchedules().GetCronWorkflow(dbCtx, tenantId, request.CronWorkflow.String())
scheduled, err := t.config.V1.WorkflowSchedules().GetCronWorkflow(dbCtx, tenant.ID, request.CronWorkflow)
if err != nil {
return nil, err
@@ -4,29 +4,29 @@ import (
"errors"
"fmt"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowVersionGet(ctx echo.Context, request gen.WorkflowVersionGetRequestObject) (gen.WorkflowVersionGetResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
workflow := ctx.Get("workflow").(*sqlcv1.GetWorkflowByIdRow)
var workflowVersionId string
var workflowVersionId uuid.UUID
if request.Params.Version != nil {
workflowVersionId = request.Params.Version.String()
workflowVersionId = *request.Params.Version
} else {
row, err := t.config.V1.Workflows().GetWorkflowById(
ctx.Request().Context(),
sqlchelpers.UUIDToStr(workflow.Workflow.ID),
workflow.Workflow.ID,
)
if err != nil {
@@ -40,7 +40,7 @@ func (t *WorkflowService) WorkflowVersionGet(ctx echo.Context, request gen.Workf
}
workflowVersionId = sqlchelpers.UUIDToStr(row.WorkflowVersionId)
workflowVersionId = *row.WorkflowVersionId
}
row, crons, events, scheduleT, stepConcurrency, err := t.config.V1.Workflows().GetWorkflowVersionWithTriggers(ctx.Request().Context(), tenantId, workflowVersionId)
+1 -2
View File
@@ -8,13 +8,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowList(ctx echo.Context, request gen.WorkflowListRequestObject) (gen.WorkflowListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limit := 50
offset := 0
@@ -13,13 +13,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) CronWorkflowList(ctx echo.Context, request gen.CronWorkflowListRequestObject) (gen.CronWorkflowListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limit := 50
offset := 0
@@ -31,6 +30,7 @@ func (t *WorkflowService) CronWorkflowList(ctx echo.Context, request gen.CronWor
Offset: &offset,
OrderBy: &orderBy,
OrderDirection: &orderDirection,
WorkflowId: request.Params.WorkflowId,
}
if request.Params.OrderByField != nil {
@@ -53,11 +53,6 @@ func (t *WorkflowService) CronWorkflowList(ctx echo.Context, request gen.CronWor
listOpts.Offset = &offset
}
if request.Params.WorkflowId != nil {
workflowIdStr := request.Params.WorkflowId.String()
listOpts.WorkflowId = &workflowIdStr
}
if request.Params.CronName != nil {
listOpts.CronName = request.Params.CronName
}
@@ -13,13 +13,12 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func (t *WorkflowService) WorkflowScheduledList(ctx echo.Context, request gen.WorkflowScheduledListRequestObject) (gen.WorkflowScheduledListResponseObject, error) {
tenant := ctx.Get("tenant").(*sqlcv1.Tenant)
tenantId := sqlchelpers.UUIDToStr(tenant.ID)
tenantId := tenant.ID
limit := 50
offset := 0
@@ -27,10 +26,13 @@ func (t *WorkflowService) WorkflowScheduledList(ctx echo.Context, request gen.Wo
orderBy := "triggerAt"
listOpts := &v1.ListScheduledWorkflowsOpts{
Limit: &limit,
Offset: &offset,
OrderBy: &orderBy,
OrderDirection: &orderDirection,
Limit: &limit,
Offset: &offset,
OrderBy: &orderBy,
OrderDirection: &orderDirection,
WorkflowId: request.Params.WorkflowId,
ParentWorkflowRunId: request.Params.ParentWorkflowRunId,
ParentStepRunId: request.Params.ParentStepRunId,
}
if request.Params.OrderByField != nil {
@@ -53,11 +55,6 @@ func (t *WorkflowService) WorkflowScheduledList(ctx echo.Context, request gen.Wo
listOpts.Offset = &offset
}
if request.Params.WorkflowId != nil {
workflowIdStr := request.Params.WorkflowId.String()
listOpts.WorkflowId = &workflowIdStr
}
if request.Params.Statuses != nil {
statuses := make([]sqlcv1.WorkflowRunStatus, len(*request.Params.Statuses))
@@ -8,7 +8,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -21,8 +20,8 @@ func (t *WorkflowService) WorkflowCronUpdate(ctx echo.Context, request gen.Workf
err := t.config.V1.WorkflowSchedules().UpdateCronWorkflow(
dbCtx,
sqlchelpers.UUIDToStr(cron.TenantId),
sqlchelpers.UUIDToStr(cron.CronId),
cron.TenantId,
cron.CronId,
&v1.UpdateCronOpts{
Enabled: request.Body.Enabled,
},
@@ -4,12 +4,12 @@ import (
"context"
"time"
"github.com/google/uuid"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/apierrors"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/transformers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -26,7 +26,7 @@ func (t *WorkflowService) WorkflowScheduledUpdate(ctx echo.Context, request gen.
}
// If a scheduled run has already been triggered, it can no longer be rescheduled.
if scheduled.WorkflowRunId.Valid {
if scheduled.WorkflowRunId == nil || *scheduled.WorkflowRunId != uuid.Nil {
return gen.WorkflowScheduledUpdate400JSONResponse(apierrors.NewAPIErrors("Scheduled run has already been triggered and cannot be rescheduled.")), nil
}
@@ -35,8 +35,8 @@ func (t *WorkflowService) WorkflowScheduledUpdate(ctx echo.Context, request gen.
err := t.config.V1.WorkflowSchedules().UpdateScheduledWorkflow(
dbCtx,
sqlchelpers.UUIDToStr(scheduled.TenantId),
request.ScheduledWorkflowRun.String(),
scheduled.TenantId,
request.ScheduledWorkflowRun,
request.Body.TriggerAt,
)
if err != nil {
@@ -45,8 +45,8 @@ func (t *WorkflowService) WorkflowScheduledUpdate(ctx echo.Context, request gen.
updated, err := t.config.V1.WorkflowSchedules().GetScheduledWorkflow(
dbCtx,
sqlchelpers.UUIDToStr(scheduled.TenantId),
request.ScheduledWorkflowRun.String(),
scheduled.TenantId,
request.ScheduledWorkflowRun,
)
if err != nil {
return nil, err
+1 -2
View File
@@ -2,13 +2,12 @@ package transformers
import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func ToAPIToken(token *sqlcv1.APIToken) *gen.APIToken {
res := &gen.APIToken{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(token.ID), token.CreatedAt.Time, token.UpdatedAt.Time),
Metadata: *toAPIMetadata(token.ID, token.CreatedAt.Time, token.UpdatedAt.Time),
}
if token.ExpiresAt.Valid {
+4 -12
View File
@@ -2,14 +2,10 @@ package transformers
import (
"encoding/json"
"fmt"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
"github.com/jackc/pgx/v5/pgtype"
)
func ToEventList(events []*sqlcv1.Event) []gen.Event {
@@ -24,9 +20,9 @@ func ToEventList(events []*sqlcv1.Event) []gen.Event {
func ToEvent(event *sqlcv1.Event) gen.Event {
return gen.Event{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(event.ID), event.CreatedAt.Time, event.UpdatedAt.Time),
Metadata: *toAPIMetadata(event.ID, event.CreatedAt.Time, event.UpdatedAt.Time),
Key: event.Key,
TenantId: pgUUIDToStr(event.TenantId),
TenantId: event.TenantId.String(),
}
}
@@ -41,9 +37,9 @@ func ToEventFromSQLCV1(event *v1.EventWithPayload) (*gen.Event, error) {
}
res := &gen.Event{
Metadata: *toAPIMetadata(pgUUIDToStr(event.EventExternalID), event.EventSeenAt.Time, event.EventSeenAt.Time),
Metadata: *toAPIMetadata(event.EventExternalID, event.EventSeenAt.Time, event.EventSeenAt.Time),
Key: event.EventKey,
TenantId: pgUUIDToStr(event.TenantID),
TenantId: event.TenantID.String(),
AdditionalMetadata: &metadata,
}
@@ -58,7 +54,3 @@ func ToEventFromSQLCV1(event *v1.EventWithPayload) (*gen.Event, error) {
return res, nil
}
func pgUUIDToStr(uuid pgtype.UUID) string {
return fmt.Sprintf("%x-%x-%x-%x-%x", uuid.Bytes[0:4], uuid.Bytes[4:6], uuid.Bytes[6:8], uuid.Bytes[8:10], uuid.Bytes[10:16])
}
+3 -2
View File
@@ -3,12 +3,13 @@ package transformers
import (
"time"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
)
func toAPIMetadata(id string, createdAt, updatedAt time.Time) *gen.APIResourceMeta {
func toAPIMetadata(id uuid.UUID, createdAt, updatedAt time.Time) *gen.APIResourceMeta {
return &gen.APIResourceMeta{
Id: id,
Id: id.String(),
CreatedAt: createdAt,
UpdatedAt: updatedAt,
}
@@ -8,7 +8,7 @@ import (
func ToRateLimitFromSQLC(rl *sqlcv1.ListRateLimitsForTenantNoMutateRow) (*gen.RateLimit, error) {
res := &gen.RateLimit{
Key: rl.Key,
TenantId: pgUUIDToStr(rl.TenantId),
TenantId: rl.TenantId.String(),
LastRefill: rl.LastRefill.Time,
LimitValue: int(rl.LimitValue),
Value: int(rl.Value),
+2 -5
View File
@@ -1,17 +1,14 @@
package transformers
import (
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func ToSlackWebhook(slack *sqlcv1.SlackAppWebhook) *gen.SlackWebhook {
return &gen.SlackWebhook{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(slack.ID), slack.CreatedAt.Time, slack.UpdatedAt.Time),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(slack.TenantId)),
Metadata: *toAPIMetadata(slack.ID, slack.CreatedAt.Time, slack.UpdatedAt.Time),
TenantId: slack.TenantId,
ChannelId: slack.ChannelId,
ChannelName: slack.ChannelName,
TeamId: slack.TeamId,
+3 -6
View File
@@ -3,20 +3,17 @@ package transformers
import (
"fmt"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func ToSNSIntegration(sns *sqlcv1.SNSIntegration, serverUrl string) *gen.SNSIntegration {
ingestUrl := fmt.Sprintf("%s/api/v1/sns/%s/sns-event", serverUrl, sqlchelpers.UUIDToStr(sns.TenantId))
ingestUrl := fmt.Sprintf("%s/api/v1/sns/%s/sns-event", serverUrl, sns.TenantId.String())
return &gen.SNSIntegration{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(sns.ID), sns.CreatedAt.Time, sns.UpdatedAt.Time),
Metadata: *toAPIMetadata(sns.ID, sns.CreatedAt.Time, sns.UpdatedAt.Time),
TopicArn: sns.TopicArn,
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(sns.TenantId)),
TenantId: sns.TenantId,
IngestUrl: &ingestUrl,
}
}
+4 -5
View File
@@ -5,7 +5,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -17,7 +16,7 @@ func ToTenant(tenant *sqlcv1.Tenant) *gen.Tenant {
}
return &gen.Tenant{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(tenant.ID), tenant.CreatedAt.Time, tenant.UpdatedAt.Time),
Metadata: *toAPIMetadata(tenant.ID, tenant.CreatedAt.Time, tenant.UpdatedAt.Time),
Name: tenant.Name,
Slug: tenant.Slug,
AnalyticsOptOut: &tenant.AnalyticsOptOut,
@@ -29,7 +28,7 @@ func ToTenant(tenant *sqlcv1.Tenant) *gen.Tenant {
func ToTenantAlertingSettings(alerting *sqlcv1.TenantAlertingSettings) *gen.TenantAlertingSettings {
res := &gen.TenantAlertingSettings{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(alerting.ID), alerting.CreatedAt.Time, alerting.UpdatedAt.Time),
Metadata: *toAPIMetadata(alerting.ID, alerting.CreatedAt.Time, alerting.UpdatedAt.Time),
MaxAlertingFrequency: alerting.MaxFrequency,
EnableExpiringTokenAlerts: &alerting.EnableExpiringTokenAlerts,
EnableWorkflowRunFailureAlerts: &alerting.EnableWorkflowRunFailureAlerts,
@@ -47,7 +46,7 @@ func ToTenantAlertEmailGroup(group *sqlcv1.TenantAlertEmailGroup) *gen.TenantAle
emails := strings.Split(group.Emails, ",")
return &gen.TenantAlertEmailGroup{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(group.ID), group.CreatedAt.Time, group.UpdatedAt.Time),
Metadata: *toAPIMetadata(group.ID, group.CreatedAt.Time, group.UpdatedAt.Time),
Emails: emails,
}
}
@@ -69,7 +68,7 @@ func ToTenantResourcePolicy(_limits []*sqlcv1.TenantResourceLimit) *gen.TenantRe
}
limits[i] = gen.TenantResourceLimit{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(limit.ID), limit.CreatedAt.Time, limit.UpdatedAt.Time),
Metadata: *toAPIMetadata(limit.ID, limit.CreatedAt.Time, limit.UpdatedAt.Time),
Resource: gen.TenantResource(limit.Resource),
LimitValue: int(limit.LimitValue),
AlarmValue: &alarmValue,
@@ -2,17 +2,16 @@ package transformers
import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func ToTenantInviteLink(invite *sqlcv1.TenantInviteLink) *gen.TenantInvite {
res := &gen.TenantInvite{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(invite.ID), invite.CreatedAt.Time, invite.UpdatedAt.Time),
Metadata: *toAPIMetadata(invite.ID, invite.CreatedAt.Time, invite.UpdatedAt.Time),
Email: invite.InviteeEmail,
Expires: invite.Expires.Time,
Role: gen.TenantMemberRole(invite.Role),
TenantId: sqlchelpers.UUIDToStr(invite.TenantId),
TenantId: invite.TenantId.String(),
}
return res
@@ -20,11 +19,11 @@ func ToTenantInviteLink(invite *sqlcv1.TenantInviteLink) *gen.TenantInvite {
func ToUserTenantInviteLink(invite *sqlcv1.ListTenantInvitesByEmailRow) *gen.TenantInvite {
res := &gen.TenantInvite{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(invite.ID), invite.CreatedAt.Time, invite.UpdatedAt.Time),
Metadata: *toAPIMetadata(invite.ID, invite.CreatedAt.Time, invite.UpdatedAt.Time),
Email: invite.InviteeEmail,
Expires: invite.Expires.Time,
Role: gen.TenantMemberRole(invite.Role),
TenantId: sqlchelpers.UUIDToStr(invite.TenantId),
TenantId: invite.TenantId.String(),
TenantName: &invite.TenantName,
}
+3 -4
View File
@@ -5,7 +5,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -17,7 +16,7 @@ func ToUser(user *sqlcv1.User, hasPassword bool, hashedEmail *string) *gen.User
}
return &gen.User{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(user.ID), user.CreatedAt.Time, user.UpdatedAt.Time),
Metadata: *toAPIMetadata(user.ID, user.CreatedAt.Time, user.UpdatedAt.Time),
Email: types.Email(user.Email),
EmailHash: hashedEmail,
EmailVerified: user.EmailVerified,
@@ -34,13 +33,13 @@ func ToTenantMember(tenantMember *sqlcv1.PopulateTenantMembersRow) *gen.TenantMe
}
res := &gen.TenantMember{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(tenantMember.ID), tenantMember.CreatedAt.Time, tenantMember.UpdatedAt.Time),
Metadata: *toAPIMetadata(tenantMember.ID, tenantMember.CreatedAt.Time, tenantMember.UpdatedAt.Time),
User: gen.UserTenantPublic{
Email: types.Email(tenantMember.Email),
Name: v1.StringPtr(tenantMember.Name.String),
},
Tenant: &gen.Tenant{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(tenantMember.TenantId), tenantMember.TenantCreatedAt.Time, tenantMember.TenantUpdatedAt.Time),
Metadata: *toAPIMetadata(tenantMember.TenantId, tenantMember.TenantCreatedAt.Time, tenantMember.TenantUpdatedAt.Time),
Name: tenantMember.TenantName,
Slug: tenantMember.TenantSlug,
AnalyticsOptOut: &tenantMember.AnalyticsOptOut,
+1 -2
View File
@@ -3,7 +3,6 @@ package transformers
import (
"math"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -25,7 +24,7 @@ func ToV1Filter(filter *sqlcv1.V1Filter) gen.V1Filter {
Payload: payload,
Scope: filter.Scope,
TenantId: filter.TenantID.String(),
WorkflowId: uuid.MustParse(filter.WorkflowID.String()),
WorkflowId: filter.WorkflowID,
IsDeclarative: &filter.IsDeclarative,
}
}
+49 -96
View File
@@ -6,12 +6,10 @@ import (
"time"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/oapi-codegen/runtime/types"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -22,7 +20,7 @@ func jsonToMap(jsonBytes []byte) map[string]interface{} {
}
func ToTaskSummary(task *v1.TaskWithPayloads) gen.V1TaskSummary {
workflowVersionID := uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowVersionID))
workflowVersionID := task.WorkflowVersionID
additionalMetadata := jsonToMap(task.AdditionalMetadata)
var finishedAt *time.Time
@@ -44,21 +42,14 @@ func ToTaskSummary(task *v1.TaskWithPayloads) gen.V1TaskSummary {
durationPtr = &duration
}
var parentTaskExternalId *uuid.UUID
if task.ParentTaskExternalID.Valid {
parentTaskExternalIdValue := uuid.MustParse(sqlchelpers.UUIDToStr(task.ParentTaskExternalID))
parentTaskExternalId = &parentTaskExternalIdValue
}
taskExternalId := uuid.MustParse(sqlchelpers.UUIDToStr(task.ExternalID))
stepId := uuid.MustParse(sqlchelpers.UUIDToStr(task.StepID))
taskExternalId := task.ExternalID
stepId := task.StepID
retryCount := int(task.RetryCount)
attempt := retryCount + 1
return gen.V1TaskSummary{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(task.ExternalID),
Id: task.ExternalID.String(),
CreatedAt: task.InsertedAt.Time,
UpdatedAt: task.InsertedAt.Time,
},
@@ -72,18 +63,18 @@ func ToTaskSummary(task *v1.TaskWithPayloads) gen.V1TaskSummary {
AdditionalMetadata: &additionalMetadata,
ErrorMessage: &task.ErrorMessage.String,
Status: gen.V1TaskStatus(task.Status),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(task.TenantID)),
WorkflowId: uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowID)),
TenantId: task.TenantID,
WorkflowId: task.WorkflowID,
TaskId: int(task.ID),
TaskInsertedAt: task.InsertedAt.Time,
TaskExternalId: taskExternalId,
StepId: &stepId,
ActionId: &task.ActionID,
WorkflowRunExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowRunID)),
WorkflowRunExternalId: task.WorkflowRunID,
WorkflowVersionId: &workflowVersionID,
RetryCount: &retryCount,
Attempt: &attempt,
ParentTaskExternalId: parentTaskExternalId,
ParentTaskExternalId: task.ParentTaskExternalID,
}
}
@@ -148,18 +139,11 @@ func ToTaskSummaryMany(
func ToTaskRunEventMany(
events []*sqlcv1.ListTaskEventsRow,
taskExternalId string,
taskExternalId uuid.UUID,
) gen.V1TaskEventList {
toReturn := make([]gen.V1TaskEvent, len(events))
for i, event := range events {
var workerId *types.UUID
if event.WorkerID.Valid {
workerUUid := uuid.MustParse(sqlchelpers.UUIDToStr(event.WorkerID))
workerId = &workerUUid
}
retryCount := int(event.RetryCount)
attempt := retryCount + 1
@@ -169,8 +153,8 @@ func ToTaskRunEventMany(
EventType: gen.V1TaskEventType(event.EventType),
Message: event.AdditionalEventMessage.String,
Timestamp: event.EventTimestamp.Time,
WorkerId: workerId,
TaskId: uuid.MustParse(taskExternalId),
WorkerId: event.WorkerID,
TaskId: taskExternalId,
RetryCount: &retryCount,
Attempt: &attempt,
}
@@ -188,16 +172,7 @@ func ToWorkflowRunTaskRunEventsMany(
toReturn := make([]gen.V1TaskEvent, len(events))
for i, event := range events {
var workerId *uuid.UUID
if event.WorkerID.Valid {
workerUUID := uuid.MustParse(sqlchelpers.UUIDToStr(event.WorkerID))
workerId = &workerUUID
}
output := string(event.OutputPayload)
taskExternalId := uuid.MustParse(sqlchelpers.UUIDToStr(event.TaskExternalID))
retryCount := int(event.RetryCount)
attempt := retryCount + 1
@@ -208,9 +183,9 @@ func ToWorkflowRunTaskRunEventsMany(
Message: event.AdditionalEventMessage.String,
Output: &output,
TaskDisplayName: &event.DisplayName,
TaskId: taskExternalId,
TaskId: event.TaskExternalID,
Timestamp: event.EventTimestamp.Time,
WorkerId: workerId,
WorkerId: event.WorkerID,
RetryCount: &retryCount,
Attempt: &attempt,
}
@@ -252,8 +227,8 @@ func ToTaskRunMetrics(metrics *[]v1.TaskRunMetric) gen.V1TaskRunMetrics {
return toReturn
}
func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId pgtype.UUID, workflowVersion *sqlcv1.GetWorkflowVersionByIdRow) gen.V1TaskSummary {
workflowVersionID := uuid.MustParse(sqlchelpers.UUIDToStr(taskWithData.WorkflowVersionID))
func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId uuid.UUID, workflowVersion *sqlcv1.GetWorkflowVersionByIdRow) gen.V1TaskSummary {
workflowVersionID := taskWithData.WorkflowVersionID
additionalMetadata := jsonToMap(taskWithData.AdditionalMetadata)
var finishedAt *time.Time
@@ -283,7 +258,7 @@ func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId pgtype.UUID
input := jsonToMap(taskWithData.InputPayload)
stepId := uuid.MustParse(sqlchelpers.UUIDToStr(taskWithData.StepID))
stepId := taskWithData.StepID
retryCount := int(taskWithData.RetryCount)
attempt := retryCount + 1
@@ -296,8 +271,8 @@ func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId pgtype.UUID
var parentTaskExternalId *uuid.UUID
if taskWithData.ParentTaskExternalID.Valid {
parentTaskUUID, err := uuid.Parse(sqlchelpers.UUIDToStr(taskWithData.ParentTaskExternalID))
if taskWithData.ParentTaskExternalID != nil {
parentTaskUUID, err := uuid.Parse(taskWithData.ParentTaskExternalID.String())
if err == nil {
parentTaskExternalId = &parentTaskUUID
@@ -306,7 +281,7 @@ func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId pgtype.UUID
return gen.V1TaskSummary{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(taskWithData.ExternalID),
Id: taskWithData.ExternalID.String(),
CreatedAt: taskWithData.InsertedAt.Time,
UpdatedAt: taskWithData.InsertedAt.Time,
},
@@ -320,11 +295,11 @@ func ToTask(taskWithData *v1.TaskWithPayloads, workflowRunExternalId pgtype.UUID
Output: output,
Status: gen.V1TaskStatus(taskWithData.Status),
Input: input,
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(taskWithData.TenantID)),
WorkflowId: uuid.MustParse(sqlchelpers.UUIDToStr(taskWithData.WorkflowID)),
TenantId: taskWithData.TenantID,
WorkflowId: taskWithData.WorkflowID,
ErrorMessage: &taskWithData.ErrorMessage.String,
WorkflowRunExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(workflowRunExternalId)),
TaskExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(taskWithData.ExternalID)),
WorkflowRunExternalId: workflowRunExternalId,
TaskExternalId: taskWithData.ExternalID,
Type: gen.V1WorkflowTypeTASK,
NumSpawnedChildren: int(taskWithData.NumSpawnedChildren),
StepId: &stepId,
@@ -342,10 +317,10 @@ func ToWorkflowRunDetails(
workflowRun *v1.WorkflowRunData,
shape []*sqlcv1.GetWorkflowShapeRow,
tasks []*v1.TaskWithPayloads,
stepIdToTaskExternalId map[pgtype.UUID]pgtype.UUID,
stepIdToTaskExternalId map[uuid.UUID]uuid.UUID,
workflowVersion *sqlcv1.GetWorkflowVersionByIdRow,
) (gen.V1WorkflowRunDetails, error) {
workflowVersionId := uuid.MustParse(sqlchelpers.UUIDToStr(workflowRun.WorkflowVersionId))
workflowVersionId := workflowRun.WorkflowVersionId
duration := int(workflowRun.FinishedAt.Time.Sub(workflowRun.StartedAt.Time).Milliseconds())
input := jsonToMap(workflowRun.Input)
@@ -357,11 +332,6 @@ func ToWorkflowRunDetails(
additionalMetadata := jsonToMap(workflowRun.AdditionalMetadata)
parentTaskExternalId := uuid.UUID{}
if workflowRun.ParentTaskExternalId != nil && workflowRun.ParentTaskExternalId.Valid {
parentTaskExternalId = uuid.MustParse(sqlchelpers.UUIDToStr(*workflowRun.ParentTaskExternalId))
}
parsedWorkflowRun := gen.V1WorkflowRun{
AdditionalMetadata: &additionalMetadata,
CreatedAt: &workflowRun.CreatedAt.Time,
@@ -369,16 +339,16 @@ func ToWorkflowRunDetails(
Duration: &duration,
ErrorMessage: &workflowRun.ErrorMessage,
FinishedAt: &workflowRun.FinishedAt.Time,
ParentTaskExternalId: &parentTaskExternalId,
ParentTaskExternalId: workflowRun.ParentTaskExternalId,
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(workflowRun.ExternalID),
Id: workflowRun.ExternalID.String(),
CreatedAt: workflowRun.InsertedAt.Time,
UpdatedAt: workflowRun.InsertedAt.Time,
},
StartedAt: &workflowRun.StartedAt.Time,
Status: gen.V1TaskStatus(workflowRun.ReadableStatus),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(workflowRun.TenantID)),
WorkflowId: uuid.MustParse(sqlchelpers.UUIDToStr(workflowRun.WorkflowID)),
TenantId: workflowRun.TenantID,
WorkflowId: workflowRun.WorkflowID,
WorkflowVersionId: &workflowVersionId,
Input: input,
Output: output,
@@ -387,35 +357,22 @@ func ToWorkflowRunDetails(
shapeRows := make([]gen.WorkflowRunShapeItemForWorkflowRunDetails, len(shape))
for i, shapeRow := range shape {
parentExternalId := uuid.MustParse(sqlchelpers.UUIDToStr(stepIdToTaskExternalId[shapeRow.Parentstepid]))
ChildrenStepIds := make([]uuid.UUID, len(shapeRow.Childrenstepids))
parentExternalId := stepIdToTaskExternalId[shapeRow.Parentstepid]
taskName := shapeRow.Stepname.String
stepId := shapeRow.Parentstepid
for c, child := range shapeRow.Childrenstepids {
ChildrenStepIds[c] = uuid.MustParse(sqlchelpers.UUIDToStr(child))
}
shapeRows[i] = gen.WorkflowRunShapeItemForWorkflowRunDetails{
ChildrenStepIds: ChildrenStepIds,
ChildrenStepIds: shapeRow.Childrenstepids,
TaskExternalId: parentExternalId,
TaskName: taskName,
StepId: uuid.MustParse(sqlchelpers.UUIDToStr(stepId)),
StepId: stepId,
}
}
parsedTaskEvents := make([]gen.V1TaskEvent, len(taskRunEvents))
for i, event := range taskRunEvents {
var workerId *uuid.UUID
if event.WorkerID.Valid {
workerUUID := uuid.MustParse(sqlchelpers.UUIDToStr(event.WorkerID))
workerId = &workerUUID
}
output := string(event.OutputPayload)
retryCount := int(event.RetryCount)
attempt := retryCount + 1
@@ -427,8 +384,8 @@ func ToWorkflowRunDetails(
Output: &output,
TaskDisplayName: &event.DisplayName,
Timestamp: event.EventTimestamp.Time,
WorkerId: workerId,
TaskId: uuid.MustParse(sqlchelpers.UUIDToStr(event.TaskExternalID)),
WorkerId: event.WorkerID,
TaskId: event.TaskExternalID,
RetryCount: &retryCount,
Attempt: &attempt,
}
@@ -453,33 +410,34 @@ func ToWorkflowRunDetails(
func ToTaskTimings(
timings []*sqlcv1.PopulateTaskRunDataRow,
idsToDepth map[string]int32,
idsToDepth map[uuid.UUID]int32,
) []gen.V1TaskTiming {
toReturn := make([]gen.V1TaskTiming, len(timings))
for i, timing := range timings {
depth := idsToDepth[sqlchelpers.UUIDToStr(timing.ExternalID)]
depth := idsToDepth[timing.ExternalID]
workflowRunId := uuid.MustParse(sqlchelpers.UUIDToStr(timing.WorkflowRunID))
workflowRunId := timing.WorkflowRunID
retryCount := int(timing.RetryCount)
attempt := retryCount + 1
toReturn[i] = gen.V1TaskTiming{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(timing.ExternalID),
Id: timing.ExternalID.String(),
CreatedAt: timing.InsertedAt.Time,
UpdatedAt: timing.InsertedAt.Time,
},
Status: gen.V1TaskStatus(timing.Status),
TaskDisplayName: timing.DisplayName,
TaskId: int(timing.ID),
TaskInsertedAt: timing.InsertedAt.Time,
TaskExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(timing.ExternalID)),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(timing.TenantID)),
Depth: int(depth),
WorkflowRunId: &workflowRunId,
RetryCount: &retryCount,
Attempt: &attempt,
Status: gen.V1TaskStatus(timing.Status),
TaskDisplayName: timing.DisplayName,
TaskId: int(timing.ID),
TaskInsertedAt: timing.InsertedAt.Time,
TaskExternalId: timing.ExternalID,
TenantId: timing.TenantID,
Depth: int(depth),
WorkflowRunId: &workflowRunId,
RetryCount: &retryCount,
Attempt: &attempt,
ParentTaskExternalId: timing.ParentTaskExternalID,
}
if timing.QueuedAt.Valid {
@@ -493,11 +451,6 @@ func ToTaskTimings(
if timing.FinishedAt.Valid {
toReturn[i].FinishedAt = &timing.FinishedAt.Time
}
if timing.ParentTaskExternalID.Valid {
parentId := uuid.MustParse(sqlchelpers.UUIDToStr(timing.ParentTaskExternalID))
toReturn[i].ParentTaskExternalId = &parentId
}
}
return toReturn
+11 -16
View File
@@ -6,7 +6,6 @@ import (
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -19,9 +18,9 @@ func ToSlotState(slots []*sqlcv1.ListSemaphoreSlotsWithStateForWorkerRow, remain
var stepRunId uuid.UUID
var workflowRunId uuid.UUID
if slot.ExternalID.Valid {
stepRunId = uuid.MustParse(sqlchelpers.UUIDToStr(slot.ExternalID))
workflowRunId = uuid.MustParse(sqlchelpers.UUIDToStr(slot.ExternalID))
if slot.ExternalID != uuid.Nil {
stepRunId = slot.ExternalID
workflowRunId = slot.ExternalID
}
status := gen.StepRunStatusRUNNING
@@ -62,7 +61,7 @@ func ToWorkerRuntimeInfo(worker *sqlcv1.Worker) *gen.WorkerRuntimeInfo {
func ToWorkerSqlc(worker *sqlcv1.Worker, remainingSlots *int, webhookUrl *string, actions []string, workflows *[]*sqlcv1.Workflow) *gen.Worker {
dispatcherId := uuid.MustParse(sqlchelpers.UUIDToStr(worker.DispatcherId))
dispatcherId := worker.DispatcherId
maxRuns := int(worker.MaxRuns)
@@ -84,23 +83,19 @@ func ToWorkerSqlc(worker *sqlcv1.Worker, remainingSlots *int, webhookUrl *string
res := &gen.Worker{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(worker.ID),
Id: worker.ID.String(),
CreatedAt: worker.CreatedAt.Time,
UpdatedAt: worker.UpdatedAt.Time,
},
Name: worker.Name,
Type: gen.WorkerType(worker.Type),
Status: &status,
DispatcherId: &dispatcherId,
DispatcherId: dispatcherId,
MaxRuns: &maxRuns,
AvailableRuns: &availableRuns,
WebhookUrl: webhookUrl,
RuntimeInfo: ToWorkerRuntimeInfo(worker),
}
if worker.WebhookId.Valid {
wid := uuid.MustParse(sqlchelpers.UUIDToStr(worker.WebhookId))
res.WebhookId = &wid
WebhookId: worker.WebhookId,
}
if !worker.LastHeartbeatAt.Time.IsZero() {
@@ -111,16 +106,16 @@ func ToWorkerSqlc(worker *sqlcv1.Worker, remainingSlots *int, webhookUrl *string
if workflows != nil {
registeredWorkflows := make([]gen.RegisteredWorkflow, 0, len(*workflows))
uniqueWorkflowIds := make(map[string]struct{})
uniqueWorkflowIds := make(map[uuid.UUID]struct{})
for _, workflow := range *workflows {
if _, ok := uniqueWorkflowIds[workflow.ID.String()]; ok {
if _, ok := uniqueWorkflowIds[workflow.ID]; ok {
continue
}
uniqueWorkflowIds[workflow.ID.String()] = struct{}{}
uniqueWorkflowIds[workflow.ID] = struct{}{}
registeredWorkflows = append(registeredWorkflows, gen.RegisteredWorkflow{
Id: uuid.MustParse(workflow.ID.String()),
Id: workflow.ID,
Name: workflow.Name,
})
}
@@ -5,15 +5,13 @@ import (
"time"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
v1 "github.com/hatchet-dev/hatchet/pkg/repository"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames map[pgtype.UUID]string, actionId string) gen.V1TaskSummary {
func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames map[uuid.UUID]string, actionId string) gen.V1TaskSummary {
additionalMetadata := jsonToMap(task.AdditionalMetadata)
var finishedAt *time.Time
@@ -43,7 +41,7 @@ func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames
output = jsonToMap(task.Output)
}
workflowVersionId := uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowVersionId))
workflowVersionId := task.WorkflowVersionId
var taskId int
if task.TaskId != nil {
@@ -52,7 +50,7 @@ func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames
var stepId uuid.UUID
if task.StepId != nil {
stepId = uuid.MustParse(sqlchelpers.UUIDToStr(*task.StepId))
stepId = *task.StepId
} else {
stepId = uuid.Nil
}
@@ -70,14 +68,14 @@ func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames
attempt := retryCount + 1
var parentTaskExternalId *uuid.UUID
if task.ParentTaskExternalId != nil && task.ParentTaskExternalId.Valid {
parentTaskExternalIdValue := uuid.MustParse(sqlchelpers.UUIDToStr(*task.ParentTaskExternalId))
if task.ParentTaskExternalId != nil {
parentTaskExternalIdValue := *task.ParentTaskExternalId
parentTaskExternalId = &parentTaskExternalIdValue
}
return gen.V1TaskSummary{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(task.ExternalID),
Id: task.ExternalID.String(),
CreatedAt: task.InsertedAt.Time,
UpdatedAt: task.InsertedAt.Time,
},
@@ -91,17 +89,17 @@ func WorkflowRunDataToV1TaskSummary(task *v1.WorkflowRunData, workflowIdsToNames
AdditionalMetadata: &additionalMetadata,
ErrorMessage: &task.ErrorMessage,
Status: gen.V1TaskStatus(task.ReadableStatus),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(task.TenantID)),
WorkflowId: uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowID)),
TenantId: task.TenantID,
WorkflowId: task.WorkflowID,
WorkflowVersionId: &workflowVersionId,
TaskExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(task.ExternalID)),
TaskExternalId: task.ExternalID,
TaskId: taskId,
TaskInsertedAt: task.InsertedAt.Time,
Type: gen.V1WorkflowTypeDAG,
WorkflowName: workflowName,
StepId: &stepId,
ActionId: &actionId,
WorkflowRunExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(task.ExternalID)),
WorkflowRunExternalId: task.ExternalID,
RetryCount: &retryCount,
Attempt: &attempt,
ParentTaskExternalId: parentTaskExternalId,
@@ -112,13 +110,13 @@ func ToWorkflowRunMany(
tasks []*v1.WorkflowRunData,
dagExternalIdToChildren map[uuid.UUID][]gen.V1TaskSummary,
taskIdToActionId map[int64]string,
workflowIdsToNames map[pgtype.UUID]string,
workflowIdsToNames map[uuid.UUID]string,
total int, limit, offset int64,
) gen.V1TaskSummaryList {
toReturn := make([]gen.V1TaskSummary, len(tasks))
for i, task := range tasks {
dagExternalId := uuid.MustParse(sqlchelpers.UUIDToStr(task.ExternalID))
dagExternalId := task.ExternalID
actionId := ""
@@ -154,7 +152,7 @@ func ToWorkflowRunMany(
}
func PopulateTaskRunDataRowToV1TaskSummary(task *v1.TaskWithPayloads, workflowName *string) gen.V1TaskSummary {
workflowVersionID := uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowVersionID))
workflowVersionID := task.WorkflowVersionID
additionalMetadata := jsonToMap(task.AdditionalMetadata)
var finishedAt *time.Time
@@ -179,20 +177,14 @@ func PopulateTaskRunDataRowToV1TaskSummary(task *v1.TaskWithPayloads, workflowNa
input := jsonToMap(task.InputPayload)
output := jsonToMap(task.OutputPayload)
stepId := uuid.MustParse(sqlchelpers.UUIDToStr(task.StepID))
stepId := task.StepID
retryCount := int(task.RetryCount)
attempt := retryCount + 1
var parentTaskExternalId *uuid.UUID
if task.ParentTaskExternalID.Valid {
parentTaskExternalIdValue := uuid.MustParse(sqlchelpers.UUIDToStr(task.ParentTaskExternalID))
parentTaskExternalId = &parentTaskExternalIdValue
}
return gen.V1TaskSummary{
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(task.ExternalID),
Id: task.ExternalID.String(),
CreatedAt: task.InsertedAt.Time,
UpdatedAt: task.InsertedAt.Time,
},
@@ -206,11 +198,11 @@ func PopulateTaskRunDataRowToV1TaskSummary(task *v1.TaskWithPayloads, workflowNa
AdditionalMetadata: &additionalMetadata,
ErrorMessage: &task.ErrorMessage.String,
Status: gen.V1TaskStatus(task.Status),
TenantId: uuid.MustParse(sqlchelpers.UUIDToStr(task.TenantID)),
WorkflowId: uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowID)),
TenantId: task.TenantID,
WorkflowId: task.WorkflowID,
WorkflowVersionId: &workflowVersionID,
Children: nil,
TaskExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(task.ExternalID)),
TaskExternalId: task.ExternalID,
TaskId: int(task.ID),
TaskInsertedAt: task.InsertedAt.Time,
Type: gen.V1WorkflowTypeTASK,
@@ -219,8 +211,8 @@ func PopulateTaskRunDataRowToV1TaskSummary(task *v1.TaskWithPayloads, workflowNa
ActionId: &task.ActionID,
RetryCount: &retryCount,
Attempt: &attempt,
WorkflowRunExternalId: uuid.MustParse(sqlchelpers.UUIDToStr(task.WorkflowRunID)),
ParentTaskExternalId: parentTaskExternalId,
WorkflowRunExternalId: task.WorkflowRunID,
ParentTaskExternalId: task.ParentTaskExternalID,
}
}
@@ -259,7 +251,7 @@ func ToWorkflowRunDisplayNamesList(
result[i] = gen.V1WorkflowRunDisplayName{
DisplayName: record.DisplayName,
Metadata: gen.APIResourceMeta{
Id: sqlchelpers.UUIDToStr(record.ExternalID),
Id: record.ExternalID.String(),
CreatedAt: record.InsertedAt.Time,
UpdatedAt: record.InsertedAt.Time,
},
@@ -277,15 +269,3 @@ func ToWorkflowRunDisplayNamesList(
},
}
}
func ToWorkflowRunExternalIds(
externalIds []pgtype.UUID,
) gen.V1WorkflowRunExternalIdList {
result := make([]uuid.UUID, len(externalIds))
for ix, id := range externalIds {
result[ix] = uuid.MustParse(sqlchelpers.UUIDToStr(id))
}
return gen.V1WorkflowRunExternalIdList(result)
}
@@ -2,7 +2,6 @@ package transformers
import (
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -17,7 +16,7 @@ func ToWebhookWorkerRequest(webhookWorker *sqlcv1.WebhookWorkerRequest) *gen.Web
func ToWebhookWorker(webhookWorker *sqlcv1.WebhookWorker) *gen.WebhookWorker {
return &gen.WebhookWorker{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(webhookWorker.ID),
webhookWorker.ID,
webhookWorker.CreatedAt.Time,
webhookWorker.UpdatedAt.Time,
),
@@ -29,7 +28,7 @@ func ToWebhookWorker(webhookWorker *sqlcv1.WebhookWorker) *gen.WebhookWorker {
func ToWebhookWorkerCreated(webhookWorker *sqlcv1.WebhookWorker) *gen.WebhookWorkerCreated {
return &gen.WebhookWorkerCreated{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(webhookWorker.ID),
webhookWorker.ID,
webhookWorker.CreatedAt.Time,
webhookWorker.UpdatedAt.Time,
),
+6 -12
View File
@@ -5,7 +5,6 @@ import (
"time"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -28,10 +27,9 @@ func ToWorkerLabels(labels []*sqlcv1.ListWorkerLabelsRow) *[]gen.WorkerLabel {
value = nil
}
id := fmt.Sprintf("%d", labels[i].ID)
resp[i] = gen.WorkerLabel{
Metadata: *toAPIMetadata(id, labels[i].CreatedAt.Time, labels[i].UpdatedAt.Time),
// fixme: `id` needs to be a uuid
Metadata: *toAPIMetadata(uuid.Nil, labels[i].CreatedAt.Time, labels[i].UpdatedAt.Time),
Key: labels[i].Key,
Value: value,
}
@@ -59,7 +57,7 @@ func ToWorkerRuntimeInfo(worker *sqlcv1.Worker) *gen.WorkerRuntimeInfo {
func ToWorkerSqlc(worker *sqlcv1.Worker, remainingSlots *int, webhookUrl *string, actions []string) *gen.Worker {
dispatcherId := uuid.MustParse(pgUUIDToStr(worker.DispatcherId))
dispatcherId := worker.DispatcherId
maxRuns := int(worker.MaxRuns)
@@ -80,20 +78,16 @@ func ToWorkerSqlc(worker *sqlcv1.Worker, remainingSlots *int, webhookUrl *string
}
res := &gen.Worker{
Metadata: *toAPIMetadata(pgUUIDToStr(worker.ID), worker.CreatedAt.Time, worker.UpdatedAt.Time),
Metadata: *toAPIMetadata(worker.ID, worker.CreatedAt.Time, worker.UpdatedAt.Time),
Name: worker.Name,
Type: gen.WorkerType(worker.Type),
Status: &status,
DispatcherId: &dispatcherId,
DispatcherId: dispatcherId,
MaxRuns: &maxRuns,
AvailableRuns: &availableRuns,
WebhookUrl: webhookUrl,
RuntimeInfo: ToWorkerRuntimeInfo(worker),
}
if worker.WebhookId.Valid {
wid := uuid.MustParse(pgUUIDToStr(worker.WebhookId))
res.WebhookId = &wid
WebhookId: worker.WebhookId,
}
if !worker.LastHeartbeatAt.Time.IsZero() {
+22 -22
View File
@@ -3,10 +3,10 @@ package transformers
import (
"encoding/json"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -17,12 +17,12 @@ func ToWorkflow(
res := &gen.Workflow{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(workflow.ID),
workflow.ID,
workflow.CreatedAt.Time,
workflow.UpdatedAt.Time,
),
Name: workflow.Name,
TenantId: sqlchelpers.UUIDToStr(workflow.TenantId),
TenantId: workflow.TenantId.String(),
}
res.IsPaused = &workflow.IsPaused.Bool
@@ -41,11 +41,11 @@ func ToWorkflow(
func ToWorkflowVersionMeta(version *sqlcv1.WorkflowVersion, workflow *sqlcv1.Workflow) *gen.WorkflowVersionMeta {
res := &gen.WorkflowVersionMeta{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(version.ID),
version.ID,
version.CreatedAt.Time,
version.UpdatedAt.Time,
),
WorkflowId: sqlchelpers.UUIDToStr(version.WorkflowId),
WorkflowId: version.WorkflowId.String(),
Order: int32(version.Order), // nolint: gosec
Version: version.Version.String,
}
@@ -80,11 +80,11 @@ func ToWorkflowVersion(
res := &gen.WorkflowVersion{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(version.ID),
version.ID,
version.CreatedAt.Time,
version.UpdatedAt.Time,
),
// WorkflowId: sqlchelpers.UUIDToStr(version.WorkflowId),
// WorkflowId: version.WorkflowId.String(),
Order: int32(version.Order), // nolint: gosec
Version: version.Version.String,
ScheduleTimeout: &version.ScheduleTimeout,
@@ -105,7 +105,7 @@ func ToWorkflowVersion(
res.Sticky = &stickyStrategy
}
if version.WorkflowId.Valid {
if version.WorkflowId != uuid.Nil {
res.Workflow = ToWorkflowFromSQLC(workflow)
}
@@ -126,7 +126,7 @@ func ToWorkflowVersion(
for _, cron := range crons {
cronCp := cron
parentId := sqlchelpers.UUIDToStr(cronCp.ParentId)
parentId := cronCp.ParentId.String()
genCrons = append(genCrons, gen.WorkflowTriggerCronRef{
Cron: &cronCp.Cron,
ParentId: &parentId,
@@ -141,8 +141,8 @@ func ToWorkflowVersion(
for _, event := range events {
eventCp := event
if eventCp.ParentId.Valid {
parentId := sqlchelpers.UUIDToStr(eventCp.ParentId)
if eventCp.ParentId != uuid.Nil {
parentId := eventCp.ParentId.String()
genEvents = append(genEvents, gen.WorkflowTriggerEventRef{
EventKey: &eventCp.EventKey,
ParentId: &parentId,
@@ -187,13 +187,13 @@ func ToV1Concurrency(workflowConcurrency *WorkflowConcurrency, taskConcurrencies
func ToJob(job *sqlcv1.Job, steps []*sqlcv1.GetStepsForJobsRow) *gen.Job {
res := &gen.Job{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(job.ID),
job.ID,
job.CreatedAt.Time,
job.UpdatedAt.Time,
),
Name: job.Name,
TenantId: sqlchelpers.UUIDToStr(job.TenantId),
VersionId: sqlchelpers.UUIDToStr(job.WorkflowVersionId),
TenantId: job.TenantId.String(),
VersionId: job.WorkflowVersionId.String(),
Description: &job.Description.String,
Timeout: &job.Timeout.String,
}
@@ -212,16 +212,16 @@ func ToJob(job *sqlcv1.Job, steps []*sqlcv1.GetStepsForJobsRow) *gen.Job {
return res
}
func ToStep(step *sqlcv1.Step, parents []pgtype.UUID) *gen.Step {
func ToStep(step *sqlcv1.Step, parents []uuid.UUID) *gen.Step {
res := &gen.Step{
Metadata: *toAPIMetadata(
sqlchelpers.UUIDToStr(step.ID),
step.ID,
step.CreatedAt.Time,
step.UpdatedAt.Time,
),
Action: step.ActionId,
JobId: sqlchelpers.UUIDToStr(step.JobId),
TenantId: sqlchelpers.UUIDToStr(step.TenantId),
JobId: step.JobId.String(),
TenantId: step.TenantId.String(),
ReadableId: step.ReadableId.String,
Timeout: &step.Timeout.String,
}
@@ -229,7 +229,7 @@ func ToStep(step *sqlcv1.Step, parents []pgtype.UUID) *gen.Step {
parentStr := make([]string, 0)
for i := range parents {
parentStr = append(parentStr, sqlchelpers.UUIDToStr(parents[i]))
parentStr = append(parentStr, parents[i].String())
}
res.Parents = &parentStr
@@ -243,7 +243,7 @@ func ToStep(step *sqlcv1.Step, parents []pgtype.UUID) *gen.Step {
func ToWorkflowFromSQLC(row *sqlcv1.Workflow) *gen.Workflow {
res := &gen.Workflow{
Metadata: *toAPIMetadata(pgUUIDToStr(row.ID), row.CreatedAt.Time, row.UpdatedAt.Time),
Metadata: *toAPIMetadata(row.ID, row.CreatedAt.Time, row.UpdatedAt.Time),
Name: row.Name,
Description: &row.Description.String,
IsPaused: &row.IsPaused.Bool,
@@ -254,9 +254,9 @@ func ToWorkflowFromSQLC(row *sqlcv1.Workflow) *gen.Workflow {
func ToWorkflowVersionFromSQLC(row *sqlcv1.WorkflowVersion, workflow *gen.Workflow) *gen.WorkflowVersion {
res := &gen.WorkflowVersion{
Metadata: *toAPIMetadata(pgUUIDToStr(row.ID), row.CreatedAt.Time, row.UpdatedAt.Time),
Metadata: *toAPIMetadata(row.ID, row.CreatedAt.Time, row.UpdatedAt.Time),
Version: row.Version.String,
WorkflowId: pgUUIDToStr(row.WorkflowId),
WorkflowId: row.WorkflowId.String(),
Order: int32(row.Order), // nolint: gosec
Workflow: workflow,
}
+9 -19
View File
@@ -4,10 +4,7 @@ import (
"encoding/json"
"time"
"github.com/google/uuid"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -34,29 +31,22 @@ func ToScheduledWorkflowsFromSQLC(scheduled *sqlcv1.ListScheduledWorkflowsRow) *
workflowRunStatus = &status
}
var workflowRunIdPtr *uuid.UUID
if scheduled.WorkflowRunId.Valid {
workflowRunId := uuid.MustParse(sqlchelpers.UUIDToStr(scheduled.WorkflowRunId))
workflowRunIdPtr = &workflowRunId
}
input := make(map[string]interface{})
if scheduled.Input != nil {
json.Unmarshal(scheduled.Input, &input)
}
res := &gen.ScheduledWorkflows{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(scheduled.ID), scheduled.CreatedAt.Time, scheduled.UpdatedAt.Time),
WorkflowVersionId: sqlchelpers.UUIDToStr(scheduled.WorkflowVersionId),
WorkflowId: sqlchelpers.UUIDToStr(scheduled.WorkflowId),
Metadata: *toAPIMetadata(scheduled.ID, scheduled.CreatedAt.Time, scheduled.UpdatedAt.Time),
WorkflowVersionId: scheduled.WorkflowVersionId.String(),
WorkflowId: scheduled.WorkflowId.String(),
WorkflowName: scheduled.Name,
TenantId: sqlchelpers.UUIDToStr(scheduled.TenantId),
TenantId: scheduled.TenantId.String(),
TriggerAt: scheduled.TriggerAt.Time,
AdditionalMetadata: &additionalMetadata,
WorkflowRunCreatedAt: &scheduled.WorkflowRunCreatedAt.Time,
WorkflowRunStatus: workflowRunStatus,
WorkflowRunId: workflowRunIdPtr,
WorkflowRunId: scheduled.WorkflowRunId,
WorkflowRunName: &scheduled.WorkflowRunName.String,
Method: gen.ScheduledWorkflowsMethod(scheduled.Method),
Priority: &scheduled.Priority,
@@ -77,11 +67,11 @@ func ToCronWorkflowsFromSQLC(cron *sqlcv1.ListCronWorkflowsRow) *gen.CronWorkflo
}
res := &gen.CronWorkflows{
Metadata: *toAPIMetadata(sqlchelpers.UUIDToStr(cron.ID_2), cron.CreatedAt_2.Time, cron.UpdatedAt_2.Time),
WorkflowVersionId: sqlchelpers.UUIDToStr(cron.WorkflowVersionId),
WorkflowId: sqlchelpers.UUIDToStr(cron.WorkflowId),
Metadata: *toAPIMetadata(cron.ID_2, cron.CreatedAt_2.Time, cron.UpdatedAt_2.Time),
WorkflowVersionId: cron.WorkflowVersionId.String(),
WorkflowId: cron.WorkflowId.String(),
WorkflowName: cron.WorkflowName,
TenantId: sqlchelpers.UUIDToStr(cron.TenantId),
TenantId: cron.TenantId.String(),
Cron: cron.Cron,
AdditionalMetadata: &additionalMetadata,
Name: &cron.Name.String,
+163 -41
View File
@@ -9,6 +9,7 @@ import (
"time"
"github.com/getkin/kin-openapi/openapi3"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
@@ -45,7 +46,6 @@ import (
"github.com/hatchet-dev/hatchet/api/v1/server/middleware/telemetry"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/pkg/config/server"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlchelpers"
"github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1"
)
@@ -230,7 +230,13 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
ctxTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
tenant, err := config.V1.Tenant().GetTenantByID(ctxTimeout, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
tenant, err := config.V1.Tenant().GetTenantByID(ctxTimeout, idUuid)
if err != nil {
return nil, "", err
@@ -243,20 +249,32 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
ctxTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
member, err := config.V1.Tenant().GetTenantMemberByID(ctxTimeout, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant member id")
}
member, err := config.V1.Tenant().GetTenantMemberByID(ctxTimeout, idUuid)
if err != nil {
return nil, "", err
}
return member, sqlchelpers.UUIDToStr(member.TenantId), nil
return member, member.TenantId.String(), nil
})
populatorMW.RegisterGetter("api-token", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
ctxTimeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
apiToken, err := config.V1.APIToken().GetAPITokenById(ctxTimeout, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid api token id")
}
apiToken, err := config.V1.APIToken().GetAPITokenById(ctxTimeout, idUuid)
if err != nil {
return nil, "", err
@@ -265,73 +283,103 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
// at the moment, API tokens should have a tenant id, because there are no other types of
// API tokens. If we add other types of API tokens, we'll need to pass in a parent id to query
// for.
if !apiToken.TenantId.Valid {
if apiToken.TenantId == nil || *apiToken.TenantId == uuid.Nil {
return nil, "", fmt.Errorf("api token has no tenant id")
}
return apiToken, sqlchelpers.UUIDToStr(apiToken.TenantId), nil
return apiToken, apiToken.TenantId.String(), nil
})
populatorMW.RegisterGetter("tenant-invite", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
tenantInvite, err := config.V1.TenantInvite().GetTenantInvite(timeoutCtx, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant invite id")
}
tenantInvite, err := config.V1.TenantInvite().GetTenantInvite(timeoutCtx, idUuid)
if err != nil {
return nil, "", err
}
return tenantInvite, sqlchelpers.UUIDToStr(tenantInvite.TenantId), nil
return tenantInvite, tenantInvite.TenantId.String(), nil
})
populatorMW.RegisterGetter("slack", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
slackWebhook, err := config.V1.Slack().GetSlackWebhookById(timeoutCtx, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid slack integration id")
}
slackWebhook, err := config.V1.Slack().GetSlackWebhookById(timeoutCtx, idUuid)
if err != nil {
return nil, "", err
}
return slackWebhook, sqlchelpers.UUIDToStr(slackWebhook.TenantId), nil
return slackWebhook, slackWebhook.TenantId.String(), nil
})
populatorMW.RegisterGetter("alert-email-group", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
emailGroup, err := config.V1.TenantAlertingSettings().GetTenantAlertGroupById(timeoutCtx, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid alert email group id")
}
emailGroup, err := config.V1.TenantAlertingSettings().GetTenantAlertGroupById(timeoutCtx, idUuid)
if err != nil {
return nil, "", err
}
return emailGroup, sqlchelpers.UUIDToStr(emailGroup.TenantId), nil
return emailGroup, emailGroup.TenantId.String(), nil
})
populatorMW.RegisterGetter("sns", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
snsIntegration, err := config.V1.SNS().GetSNSIntegrationById(timeoutCtx, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid sns integration id")
}
snsIntegration, err := config.V1.SNS().GetSNSIntegrationById(timeoutCtx, idUuid)
if err != nil {
return nil, "", err
}
return snsIntegration, sqlchelpers.UUIDToStr(snsIntegration.TenantId), nil
return snsIntegration, snsIntegration.TenantId.String(), nil
})
populatorMW.RegisterGetter("workflow", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
workflow, err := config.V1.Workflows().GetWorkflowById(context.Background(), id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid workflow id")
}
workflow, err := config.V1.Workflows().GetWorkflowById(context.Background(), idUuid)
if err != nil {
return nil, "", err
}
return workflow, sqlchelpers.UUIDToStr(workflow.Workflow.TenantId), nil
return workflow, workflow.Workflow.TenantId.String(), nil
})
populatorMW.RegisterGetter("workflow-run", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
@@ -340,7 +388,17 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
})
populatorMW.RegisterGetter("scheduled-workflow-run", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
scheduled, err := config.V1.WorkflowSchedules().GetScheduledWorkflow(context.Background(), parentId, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid scheduled workflow run id")
}
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
scheduled, err := config.V1.WorkflowSchedules().GetScheduledWorkflow(context.Background(), parentIdUuid, idUuid)
if err != nil {
return nil, "", err
@@ -350,11 +408,21 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
return nil, "", echo.NewHTTPError(http.StatusNotFound, "scheduled workflow run not found")
}
return scheduled, sqlchelpers.UUIDToStr(scheduled.TenantId), nil
return scheduled, scheduled.TenantId.String(), nil
})
populatorMW.RegisterGetter("cron-workflow", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
scheduled, err := config.V1.WorkflowSchedules().GetCronWorkflow(context.Background(), parentId, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid cron workflow id")
}
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
scheduled, err := config.V1.WorkflowSchedules().GetCronWorkflow(context.Background(), parentIdUuid, idUuid)
if err != nil {
return nil, "", err
@@ -364,7 +432,7 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
return nil, "", echo.NewHTTPError(http.StatusNotFound, "cron workflow not found")
}
return scheduled, sqlchelpers.UUIDToStr(scheduled.TenantId), nil
return scheduled, scheduled.TenantId.String(), nil
})
populatorMW.RegisterGetter("step-run", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
@@ -376,13 +444,19 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
v1Event, err := t.config.V1.OLAP().GetEvent(timeoutCtx, id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid event id")
}
v1Event, err := t.config.V1.OLAP().GetEvent(timeoutCtx, idUuid)
if err != nil {
return nil, "", err
}
payload, err := t.config.V1.OLAP().ReadPayload(timeoutCtx, v1Event.TenantID.String(), v1Event.ExternalID)
payload, err := t.config.V1.OLAP().ReadPayload(timeoutCtx, v1Event.TenantID, v1Event.ExternalID)
if err != nil {
return nil, "", err
@@ -397,7 +471,7 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
Key: v1Event.Key,
}
return event, sqlchelpers.UUIDToStr(event.TenantId), nil
return event, event.TenantId.String(), nil
})
// note: this is a hack to allow for the v0 event getter to use the pk on the v1 event lookup table
@@ -405,7 +479,19 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
timeoutCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
v1Event, err := t.config.V1.OLAP().GetEventWithPayload(timeoutCtx, id, parentId)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid event id")
}
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
v1Event, err := t.config.V1.OLAP().GetEventWithPayload(timeoutCtx, idUuid, parentIdUuid)
if err != nil {
return nil, "", err
@@ -420,17 +506,23 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
Key: v1Event.EventKey,
}
return event, sqlchelpers.UUIDToStr(event.TenantId), nil
return event, event.TenantId.String(), nil
})
populatorMW.RegisterGetter("worker", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
worker, err := config.V1.Workers().GetWorkerById(id)
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid worker id")
}
worker, err := config.V1.Workers().GetWorkerById(idUuid)
if err != nil {
return nil, "", err
}
return worker, sqlchelpers.UUIDToStr(worker.Worker.TenantId), nil
return worker, worker.Worker.TenantId.String(), nil
})
populatorMW.RegisterGetter("webhook", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
@@ -443,12 +535,12 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
defer cancel()
// Validate UUID early to avoid panics deeper in the stack.
var taskID pgtype.UUID
var taskID uuid.UUID
if err := taskID.Scan(id); err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid task id")
}
task, err := config.V1.OLAP().ReadTaskRun(ctx, sqlchelpers.UUIDToStr(taskID))
task, err := config.V1.OLAP().ReadTaskRun(ctx, taskID)
if err != nil {
return nil, "", err
@@ -458,12 +550,12 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
return nil, "", echo.NewHTTPError(http.StatusNotFound, "task not found")
}
return task, sqlchelpers.UUIDToStr(task.TenantID), nil
return task, task.TenantID.String(), nil
})
populatorMW.RegisterGetter("v1-workflow-run", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
// Validate UUID early to avoid panics deeper in the stack.
var workflowRunID pgtype.UUID
var workflowRunID uuid.UUID
if err := workflowRunID.Scan(id); err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid workflow run id")
}
@@ -474,41 +566,71 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
return nil, "", err
}
return workflowRun, sqlchelpers.UUIDToStr(workflowRun.WorkflowRun.TenantID), nil
return workflowRun, workflowRun.WorkflowRun.TenantID.String(), nil
})
populatorMW.RegisterGetter("v1-filter", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid filter id")
}
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
filter, err := t.config.V1.Filters().GetFilter(
context.Background(),
parentId,
id,
parentIdUuid,
idUuid,
)
if err != nil {
return nil, "", err
}
return filter, sqlchelpers.UUIDToStr(filter.TenantID), nil
return filter, filter.TenantID.String(), nil
})
populatorMW.RegisterGetter("v1-event", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
idUuid, err := uuid.Parse(id)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid event id")
}
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
event, err := t.config.V1.OLAP().GetEventWithPayload(
context.Background(),
id,
parentId,
idUuid,
parentIdUuid,
)
if err != nil {
return nil, "", err
}
return event, sqlchelpers.UUIDToStr(event.TenantID), nil
return event, event.TenantID.String(), nil
})
populatorMW.RegisterGetter("v1-webhook", func(config *server.ServerConfig, parentId, id string) (result interface{}, uniqueParentId string, err error) {
parentIdUuid, err := uuid.Parse(parentId)
if err != nil {
return nil, "", echo.NewHTTPError(http.StatusBadRequest, "invalid tenant id")
}
webhook, err := t.config.V1.Webhooks().GetWebhook(
context.Background(),
parentId,
parentIdUuid,
id,
)
@@ -516,7 +638,7 @@ func (t *APIServer) registerSpec(g *echo.Group, spec *openapi3.T) (*populator.Po
return nil, "", err
}
return webhook, sqlchelpers.UUIDToStr(webhook.TenantID), nil
return webhook, webhook.TenantID.String(), nil
})
authnMW := authn.NewAuthN(t.config)

Some files were not shown because too many files have changed in this diff Show More