gotosocial/internal/gtsmodel
kim 7b1ccbd65a
[feature] add worker task serialization logic (#2989)
* improved server shutdown with more precise shutdown of modules + deferring of ALL of it

* move delivery and workers into separate files

* add worker task model and Serialize() / Deserialize() methods for message types

* start adding message serialize / deserialize tests

* start adding test cases

* update body rewinding to rely on standard library mechanism of r.GetBody()

* remove request rewinding (http.Client{} should already handle this)

* standard library already handles rewinding

* improved code comment

* move the newPOST() function contents to prepare(), fits better with current API

* add Serialize() / Deserialize() implementations for Delivery{} type

* finish writing FromClientAPI sserialize / deserialize tests

* start adding FromFediAPI{} serialize / deserialize test cases

* fix FromFediAPI{} tests

* add tests for delivery message type

* fix repeat code

* missing license header

* use testrig status and accounts for marshal / unmarshaling tests

* add a specific test for checking account RSA keys are preserved
2024-06-20 17:06:20 +00:00
..
account.go
accountnote.go
accountsettings.go
accountstats.go
adminaction.go
application.go
block.go
client.go
domainallow.go
domainblock.go
domainpermission.go
emaildomainblock.go
emoji.go
emojicategory.go
filter.go [bugfix] Filter fixes (#2971) 2024-06-06 20:16:20 +02:00
follow.go
followrequest.go
headerfilter.go
instance.go
list.go
marker.go
mediaattachment.go
mention.go
move.go
notification.go
poll.go
README.md
report.go
routersession.go
rule.go
status.go
statusbookmark.go
statusfave.go
statusmute.go
tag.go
thread.go
threadmute.go
token.go
tombstone.go
user.go
usermute.go [feature] User muting (#2960) 2024-06-06 16:38:02 +00:00
workertask.go [feature] add worker task serialization logic (#2989) 2024-06-20 17:06:20 +00:00

A note on when we should set data structures linked to objects in the database to use the bun nullzero tag -- this should only be done if the member type is a pointer, or if the this primitive type is literally invalid with an empty value (e.g. media IDs which when empty signifies a null database value, compared to say an account note which when empty could mean either an empty note OR null database value).

Obviously it is a little more complex than this in practice, but keep it in mind!