forked from FoundKeyGang/FoundKey
88 lines
4 KiB
Markdown
88 lines
4 KiB
Markdown
|
This file provides an overview of what functionality goes where.
|
|||
|
|
|||
|
As convention for this file, when a path is given that does **not** start with a slash, its a relative path.
|
|||
|
Look further up in the section to find the "base path" it is relative to.
|
|||
|
|
|||
|
## backend
|
|||
|
|
|||
|
All the backend code is in `/packages/backend/src`.
|
|||
|
|
|||
|
### Database
|
|||
|
|
|||
|
For connecting to the database an ORM (object–relational mapping) is used.
|
|||
|
The ORM can map between database entries and TypeScript objects.
|
|||
|
The type definitions for these objects can be found in `/packages/backend/src/models/`.
|
|||
|
|
|||
|
Definitions for individual objects are defined in `entities/`.
|
|||
|
Some behaviour that is mostly used by the API is defined in `repositories/`.
|
|||
|
These can be thought of like the database tables themselves.
|
|||
|
Often there is functionality called "pack" in these, and by "packing" a database object you will get the API representation of that object.
|
|||
|
Schemas for these API versions of the objects are defined in `schema/`.
|
|||
|
|
|||
|
### API
|
|||
|
|
|||
|
API stuff goes in `/packages/backend/src/server/api/`
|
|||
|
|
|||
|
All API routes are "mounted" in `index.ts`.
|
|||
|
For this to work, the endpoint has to be tied into the respective path in `endpoints.ts`.
|
|||
|
|
|||
|
Endpoints are defined using a JSON object, and documentation is automatically generated using these objects.
|
|||
|
The type definition for that object is also contained/documented in `endpoints.ts`.
|
|||
|
|
|||
|
Reading that file you can see that the endpoint behaviour is defined in `endpoints/`.
|
|||
|
The paths below that directory should be the same as on the API.
|
|||
|
|
|||
|
Handling the API calls is done in `api-handler.ts`, which does some preprocessing of the request.
|
|||
|
It then uses `authenticate.ts` to try to authenticate the user.
|
|||
|
After that the actual endpoint code is run by `call.ts` after checking some more of the preconditions set by the endpoint definiton.
|
|||
|
|
|||
|
### ActivityPub
|
|||
|
|
|||
|
ActivityPub related code is in `/packages/backend/src/remote/activitypub/`
|
|||
|
|
|||
|
Incoming ActivityPub requests are processed by the code in `kernel/`.
|
|||
|
The entry point for processing an activity is `processOneActivity` in the `kernel/index.ts` file in that directory.
|
|||
|
Parts of incoming activities may also be processed by `models/`.
|
|||
|
|
|||
|
The bodys of outgoing ActivityPub requests are "rendered" using `renderer/`.
|
|||
|
These files define several functions that are meant to be used together, e.g. `renderCreate(await renderNote(note, false), note)`.
|
|||
|
The invocation of these functions is placed either in the API endpoints directly or in the services code.
|
|||
|
|
|||
|
Both incoming and outgoing ActivityPub request are handled through queues, to e.g. allow for retrying a request when it fails, or spikes of many incoming requests.
|
|||
|
|
|||
|
### Services
|
|||
|
|
|||
|
If code for handling a task seems to big to e.g. do directly in an API endpoint or should be reused, it is probably placed in `/packages/backend/src/services/`.
|
|||
|
|
|||
|
### Queues
|
|||
|
|
|||
|
Code regarding queues is in `/packages/backend/src/queue/`.
|
|||
|
|
|||
|
Misskey defines several queues for processing things that might take longer in the background.
|
|||
|
The queues themselves are defined in `index.ts`.
|
|||
|
How the different queues are then processed is defined by the code in the `processors/` directory.
|
|||
|
|
|||
|
## client
|
|||
|
|
|||
|
All the client code is in `/packages/client/src/`.
|
|||
|
The client uses Vue 3 and its Composition API, but there are also some older Options API components that have yet to be refactored (see CONTRIBUTING.md).
|
|||
|
|
|||
|
### Pages
|
|||
|
|
|||
|
If it is something you can navigate to, it is most likely a page.
|
|||
|
These are defined in `/packages/client/src/pages/` and should be organized by the path you use to see them.
|
|||
|
|
|||
|
### Components
|
|||
|
|
|||
|
If it is not a page, it is probably a component.
|
|||
|
Components can be things like the emoji picker, a tooltip, a widget.
|
|||
|
Components can be combined to make bigger components or also pages.
|
|||
|
They are defined in `/packages/client/src/components/`.
|
|||
|
|
|||
|
### Directives
|
|||
|
|
|||
|
Vue has "directives", e.g. you can add an attribute to a component like `v-tooltip`.
|
|||
|
There are some built in directives like e.g. `v-if` and `v-for`.
|
|||
|
Other custom directives are defined in `/packages/client/src/directives/`.
|
|||
|
They are added to the Vue app in `index.ts` and their behavior is defined in separate files in the directory.
|