refactor: add _id to all model interfaces #75
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
We have two interfaces for each model, one for plain objects and one for Mongoose documents. For example, we have
IForm
for plain Form objects, andIFormSchema
for documents retrieved from the database. However, none of our interfaces for plain objects include an_id
key, despite the fact that all objects retrieved from the database have an_id
key which we frequently access. This makes it difficult for us to write typed code for objects retrieved from the database, as every time we need to access the_id
key, we have to create a union type.Solution
Add an
_id
key to all relevant interfaces. The following interfaces were excluded because we set_id: false
in the schema:The disadvantage of this approach is that when declaring new documents to add to the database, we have to omit
_id
from the type, as can be seen insms_count.server.model.ts
. However, I think this is a tiny minority of cases compared to the number of cases where we need the_id
key to be present.