Documentation on Programmatic use of Components

Is there a place for Components in Strapi Documentation?

I do see here and there an example how one can use Components in Content Manager to create the content. This is, perhaps, targeted to non-technical CMS user who will be populating the content.

I am looking for the documentation that explains how to work with the components programmatically.
The documentation for models, controllers and services shows how to write custom controller or a service, how to query collections and do other operations.
But I am struggling to find concise documentation of the same sort on Components.

For example, say I have a model that includes repeatable component.
If I am to allow a frontend to create entries of that model via an API, how do I go about writing a custom controller that implements CRUD for the model?
Where is the documentation that explains how to create a component programmatically and attach it to a model entry?
I have been seeing pieces of code here and there but couldn’t come across an official documentation covering this topic properly.

Here is an example: I came across this issue: querying component attribute in afterSave does not return the updated value · Issue #5185 · strapi/strapi · GitHub and stumbled upon this code snippet

async(model, response, options) =>{
   await strapi.components['seo.seo'].query(qb=> {
      qb.where("id", "=", "<seo_title_ID>")
    }).fetch().then(r =>console.log("not updated!", r.attributes, "not changed!", r.hasChanged))

Note how this code makes use of strapi.components but is it documented anywhere? I want to know about these options.
Also, the way how the query is performed looks complex (is it knex or a bookshelf, I don’t know) and I would also appreciate if this all were documented somewhere.

Does it exist? Have I missed it?
If any one could please point me to the location, I’d appreciate it greatly.

1 Like