Skip to content

feat: ジャーナル機能 #1063

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
2 tasks done
MikuroXina opened this issue May 19, 2025 · 6 comments
Open
2 tasks done

feat: ジャーナル機能 #1063

MikuroXina opened this issue May 19, 2025 · 6 comments
Labels
T: feature New feature

Comments

@MikuroXina
Copy link
Contributor

MikuroXina commented May 19, 2025

Before requesting

  • Checked same request already has not already been reported
  • Understand that this request is not certain to be adopted.

Problem

Pulsate チームが提唱する課題 (ピッチ資料 を参照) として, 分散型 SNS では中央集権のものよりコミュニティが分断されやすいという点を挙げていました.

Proposed Solution

これを解決するためにジャーナルという機能を提案していました. ここではその具体的な設計を述べます.

ジャーナルの属性:

  • ID
  • スラグ - 言語圏に拘らず検索しやすいようにするための [a-zA-Z0-9_] の文字列
  • タイトル
  • 説明文
  • トピックのリスト
    • トピック
      • 名前
      • 色 (空文字列だと既定の色
      • アイコン (空文字列だとアイコン無し)

ジャーナルの ER 図:

erDiagram
  Journal {
    string id
    string slug
    string title
    string description
  }
  NoteCast {
    string journalId
    string noteId
  }
  Topic {
    string name
    string color
    string icon
  }
  Account }o--o{ Journal : follows
  Journal ||--o{ NoteCast : recieves
  NoteCast }o--|| Note : belongs
  Journal }|--o{ Topic : labels
Loading

APIエンドポイント:

  • クエリ
    • インスタンス内のジャーナルを一覧する
      GET /v0/journals
    • インスタンス内の特定のジャーナルを取得する
      GET /v0/journals/:journal_id
    • ジャーナルの投稿を取得する
      GET /v0/timeline/journals/:journal_id
  • 投稿
    • ジャーナル向けに投稿する
      POST /v0/notes
      • リクエスト本文の任意パラメータに, ジャーナルの ID を追加する
  • 購読
    • ジャーナルをフォローする
      POST /v0/journals/:journal_id/follow
    • ジャーナルをフォロー解除する
      DELETE /v0/journals/:journal_id/follow
  • 管理
    • ジャーナルを追加する
      POST /v0/journals
    • ジャーナル情報を更新する
      PATCH /v0/journals
    • ジャーナルをアーカイブする
      PUT /v0/journals/archive
      • 他多くのインスタンスから参照されるジャーナルは, 完全に削除できないほうがよさそう

Other information

No response

@MikuroXina MikuroXina added the T: feature New feature label May 19, 2025
@laminne
Copy link
Member

laminne commented May 21, 2025

ジャーナルをフォローしているユーザーリストもあると良さそう
GET /v0/journals/:journal_id/followers

@MikuroXina
Copy link
Contributor Author

MikuroXina commented May 22, 2025

ジャーナルをフォローしているユーザーリスト

ジャーナルは外部のインスタンスからもフォローされ得る想定だったはずです. フォローしているという条件だけだとあらゆる連合に問い合わせるように見ますが, 同じインスタンス内でそれをフォローしているアカウントに限定する想定でしょうか?

@laminne
Copy link
Member

laminne commented May 25, 2025

おそらく,「(ユーザーが問い合わせる)インスタンスが知っている範囲で全員を返す」というような実装になると思っています

  • ジャーナルと同じインスタンスのアカウント: 全員分のフォローを把握できる
  • 別のインスタンスのアカウント: 一部のフォローを把握できる

ジャーナルの完全なフォローリストをジャーナルが存在するインスタンスに問い合わせることも実装可能ではあると思いますが,多くの場合で必要ないキャッシュになるので,どこまで情報を把握するかを調整したりできるようにしたほうが良いかもしれません

@laminne laminne added this to the Pulsate v0.2.0 milestone May 26, 2025
@MikuroXina
Copy link
Contributor Author

それなら, ホップ数を指定できるようにするとどうでしょうか.

  • GET /v0/journals/:journal_id/followers?hop_limit={n}
    • n 個までのインスタンス間の接続をまたいでフォローしているアカウントを把握する
    • n = 0 のときは同じインスタンスで :journal_id のジャーナルをフォローするアカウントすべてを返す
    • 必要ならば連合に GET /v0/journals/:journal_id/followers?hop_limit={n - 1} を問い合わせる

@laminne
Copy link
Member

laminne commented May 27, 2025

一般的にホップの概念は存在しない(インスタンスは基本的に投稿をリレーしない)ので、インスタンスの動作設定パラメーターで「外部ジャーナルのフォロー関係の取得制限」みたいな値を与えるとかそういうことしかできないと思っています

@MikuroXina
Copy link
Contributor Author

ではこういう感じでどうでしょう.

  • GET /v0/journals/:journal_id/followers?scope={s}
    • ID journal_id のジャーナルの, フォロワーのアカウントを配列で返す
    • s = domestic のときは, インスタンス内のジャーナルのフォロワーのみ
    • s = foreign のときは, インスタンス外のジャーナルのフォロワーのみ
    • s = all のときは, すべてのフォロワー

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
T: feature New feature
Projects
None yet
Development

No branches or pull requests

2 participants