diff options
author | 2024-08-24 11:49:37 +0200 | |
---|---|---|
committer | 2024-08-24 11:49:37 +0200 | |
commit | f23f04e0b1d117be714bf91d5266dab219ed741e (patch) | |
tree | 0b3ddd60d51c8729949c3669993910a7f8f32a7b /internal/typeutils/internaltofrontend.go | |
parent | [performance] ffmpeg ffprobe wrapper improvements (#3225) (diff) | |
download | gotosocial-f23f04e0b1d117be714bf91d5266dab219ed741e.tar.xz |
[feature] Interaction requests client api + settings panel (#3215)
* [feature] Interaction requests client api + settings panel
* test accept / reject
* fmt
* don't pin rejected interaction
* use single db model for interaction accept, reject, and request
* swaggor
* env sharting
* append errors
* remove ErrNoEntries checks
* change intReqID to reqID
* rename "pend" to "request"
* markIntsPending -> mark interactionsPending
* use log instead of returning error when rejecting interaction
* empty migration
* jolly renaming
* make interactionURI unique again
* swag grr
* remove unnecessary locks
* invalidate as last step
Diffstat (limited to 'internal/typeutils/internaltofrontend.go')
-rw-r--r-- | internal/typeutils/internaltofrontend.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 4ed65bb08..07a4c0836 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -2592,3 +2592,74 @@ func policyValsToAPIPolicyVals(vals gtsmodel.PolicyValues) []apimodel.PolicyValu return apiVals } + +// InteractionReqToAPIInteractionReq converts the given *gtsmodel.InteractionRequest +// to an *apimodel.InteractionRequest, from the perspective of requestingAcct. +func (c *Converter) InteractionReqToAPIInteractionReq( + ctx context.Context, + req *gtsmodel.InteractionRequest, + requestingAcct *gtsmodel.Account, +) (*apimodel.InteractionRequest, error) { + // Ensure interaction request is populated. + if err := c.state.DB.PopulateInteractionRequest(ctx, req); err != nil { + err := gtserror.Newf("error populating: %w", err) + return nil, err + } + + interactingAcct, err := c.AccountToAPIAccountPublic(ctx, req.InteractingAccount) + if err != nil { + err := gtserror.Newf("error converting interacting acct: %w", err) + return nil, err + } + + interactedStatus, err := c.StatusToAPIStatus( + ctx, + req.Status, + requestingAcct, + statusfilter.FilterContextNone, + nil, + nil, + ) + if err != nil { + err := gtserror.Newf("error converting interacted status: %w", err) + return nil, err + } + + var reply *apimodel.Status + if req.InteractionType == gtsmodel.InteractionReply { + reply, err = c.StatusToAPIStatus( + ctx, + req.Reply, + requestingAcct, + statusfilter.FilterContextNone, + nil, + nil, + ) + if err != nil { + err := gtserror.Newf("error converting reply: %w", err) + return nil, err + } + } + + var acceptedAt string + if req.IsAccepted() { + acceptedAt = util.FormatISO8601(req.AcceptedAt) + } + + var rejectedAt string + if req.IsRejected() { + rejectedAt = util.FormatISO8601(req.RejectedAt) + } + + return &apimodel.InteractionRequest{ + ID: req.ID, + Type: req.InteractionType.String(), + CreatedAt: util.FormatISO8601(req.CreatedAt), + Account: interactingAcct, + Status: interactedStatus, + Reply: reply, + AcceptedAt: acceptedAt, + RejectedAt: rejectedAt, + URI: req.URI, + }, nil +} |