Use transactions to set the communication status changes

Not doing it yet, but soon we'll do log entries for them.
This commit is contained in:
Eli Ribble 2026-05-04 20:57:50 +00:00
parent 040ab106b4
commit a95e44cf42
No known key found for this signature in database
8 changed files with 67 additions and 20 deletions

View file

@ -2,9 +2,12 @@ package platform
import (
"context"
"fmt"
"github.com/Gleipnir-Technology/nidus-sync/db"
"github.com/Gleipnir-Technology/nidus-sync/db/gen/nidus-sync/public/model"
querypublic "github.com/Gleipnir-Technology/nidus-sync/db/query/public"
"github.com/Gleipnir-Technology/nidus-sync/lint"
)
func CommunicationsForOrganization(ctx context.Context, org_id int64) ([]*model.Communication, error) {
@ -21,14 +24,30 @@ func CommunicationFromID(ctx context.Context, user User, comm_id int64) (*model.
return comm, nil
}
func CommunicationMarkInvalid(ctx context.Context, user User, comm_id int64) error {
return querypublic.CommunicationMarkInvalid(ctx, int64(user.Organization.ID), int64(user.ID), comm_id)
return communicationMark(ctx, user, comm_id, querypublic.CommunicationMarkInvalid)
}
func CommunicationMarkPendingResponse(ctx context.Context, user User, comm_id int64) error {
return querypublic.CommunicationMarkPendingResponse(ctx, int64(user.Organization.ID), int64(user.ID), comm_id)
return communicationMark(ctx, user, comm_id, querypublic.CommunicationMarkPendingResponse)
}
func CommunicationMarkPossibleIssue(ctx context.Context, user User, comm_id int64) error {
return querypublic.CommunicationMarkPossibleIssue(ctx, int64(user.Organization.ID), int64(user.ID), comm_id)
return communicationMark(ctx, user, comm_id, querypublic.CommunicationMarkPossibleIssue)
}
func CommunicationMarkPossibleResolved(ctx context.Context, user User, comm_id int64) error {
return querypublic.CommunicationMarkPossibleResolved(ctx, int64(user.Organization.ID), int64(user.ID), comm_id)
return communicationMark(ctx, user, comm_id, querypublic.CommunicationMarkPossibleResolved)
}
type markFunc = func(context.Context, db.Tx, int64, int64, int64) error
func communicationMark(ctx context.Context, user User, comm_id int64, f markFunc) error {
txn, err := db.BeginTxn(ctx)
if err != nil {
return fmt.Errorf("begin txn: %w", err)
}
defer lint.LogOnErrRollback(txn.Rollback, ctx, "rollback")
err = f(ctx, txn, int64(user.Organization.ID), int64(user.ID), comm_id)
if err != nil {
return fmt.Errorf("mark: %w", err)
}
txn.Commit(ctx)
return nil
}