]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add custom sequelize model types documentation
authorChocobozzz <me@florianbigard.com>
Thu, 16 Mar 2023 13:24:26 +0000 (14:24 +0100)
committerChocobozzz <me@florianbigard.com>
Thu, 16 Mar 2023 13:24:26 +0000 (14:24 +0100)
support/doc/development/server.md

index 4647f2b4f0a6d3ede10a0952280c616702d8c1ec..7a9fa571f6459be103183dc2f4cc5a46885c36a1 100644 (file)
@@ -1,5 +1,13 @@
 # Server code
 
+## Database model typing
+
+Sequelize models contain optional fields corresponding to table joins.
+For example, `VideoModel` has a `VideoChannel?: VideoChannelModel` field. It can be filled if the SQL query joined with the `videoChannel` table or empty if not.
+It can be difficult in TypeScript to understand if a function argument expects associations to be filled or not.
+To improve clarity and reduce bugs, PeerTube defines multiple versions of a database model depending on its associations in `server/types/models/`.
+These models start with `M` and by default do not include any association. `MVideo` for example corresponds to `VideoModel` without any association, where `VideoChannel` attribute doesn't exist. On the other hand, `MVideoWithChannel` is a `MVideo` that has a `VideoChannel` field. This way, a function that accepts `video: MVideoWithChannel` argument expects a video with channel populated. Main PeerTube code should never use `...Model` (`VideoModel`) database type, but always `M...` instead (`MVideo`, `MVideoChannel` etc).
+
 ## Add a new feature walkthrough
 
 Here's a list of all the parts of the server to update if you want to add a new feature (new API REST endpoints for example) to the PeerTube server.