ニュースシェアアプリの GraphQL サーバー

https://www.figma.com/file/4LWxha4nR6rxTXBwZ4V6AF/Untitled?node-id=0%3A1

コンセプト

  • 認証無しで誰でも投稿はできる(いたずら防止策は必要?流石にいらなそうだけど、一度でも起きたら要検討)
  • それか、slack ログイン必須にするのはアリ。
  • 基本的に url のみで投稿でき、そこからスクレイピングしてタイトルなどを表示
  • 認証済みの運営陣はニュースの更新、削除といったすべての処理ができる(いたずらやミス防止のため)

実装済み(バックエンド)

  • ニュースの作成(投稿)
    • URL のみで投稿でき、その URL にリクエスト投げて OGP 用の title, description, imageUrl を取得し保存
    • Rust でスクレイピングして meta データを取得、DB へ保存
    • 403 などの認証が必要な場合の対応(多分やったはず、要動作確認)
  • 過去のニュースを日付やタイトルで検索できる機能
    • 日付で検索
    • タイトルや概要で検索(Prisma に full-text-search あるからそれ使う)
  • ニュースを明日へ延期する(多い場合やイベント時など)
    • 単体のニュースの更新(日付、タイトル、概要、ニックネーム、シェアする日時等)
    • 複数選択や、一括で更新
    • ニュースの削除(運営のみ)

仕様まとめ

  • Slack でのみ認証を行う
  • Mutation はすべて Slack 認証必須。シェアするボタンを押したときに認証済みでなければ、Zenn みたいに認証モーダル出す
    • Query 系は認証しなくても見れる
  • Slack 認証時に、ユーザーの名前 or メールアドレスなどから運営や開発者であるかを判断し、DB に保存
    • 運営などであればすべてのニュースに対して延期やタイトルの変更などの更新処理ができる。
    • 運営などであれば、Slack へニュースを送信できる
    • 一般ユーザーでも、自分がシェアした投稿であれば更新処理ができる
  • ニュースの投稿は URL のみで投稿でき、その URL をスクレイピングしてタイトルや概要を保存する
  • 運営の人のみ、QinTV 用のニュース、メモを投稿できる。
  • iframe で拡大して共有しつつ、メモを見ながらシェアできる

欲しい機能、検討中のものなど(?)

  • 認証済みユーザーはニュースに対していいねができる

    • 自分のいいね欄を見返せる
    • Slack に投稿されたニュースに対して特定のリアクションをすると、いいねがついて後からアプリ上で確認ができる
    • Slack 通知は、スレッド用の日付と件数だけの短文テキストを送り、そこのスレッドに一軒一軒ニュースを送り、それぞれにボタンなりリアクションなりして後で見返せるようにする , https://api.slack.com/events/reaction_added
  • ニュースシェアを開始するを押してからニュースへ飛ぶと、その日見たニュースとまだ見てないニュースで UI が変わる(?)

    • その日どのニュースをまだ話してないか見やすくする(これも要検討)
  • アーカイブ動画の URL とか、連絡事項(メッセージ)も Slack 通知時に一緒に送れる or あとから編集できると良いかも(?)

  • ログインと新規登録の口は一緒にする

  • 重複した URL の登録を許容するけど、フロント側で警告とか何回目かをだしたい

  • 見返したい日付を保存できるようにする?

  • kbar ってライブラリ使っていい感じにカスタマイズとかできたらかっこいいからしたい(フロント)

    • クリップボードに保存してある URL を投稿するショートカットをつくる(頻繁に登録する人は楽そう)
    • ⌘K でショートカットダイアログひらいて、自分でショートカットカスタマイズしたりできる?
  • Rust 練習のために WASM 使う

  • バグ、機能追加の要望フォームとか、GitHub の URL もおいとく

  • GitHub Actions で Heroku の CI/CD 構築

  • テスト書いたり CI 書く

https://app.slack.com/block-kit-builder/ https://slack.dev/node-slack-sdk/oauth

起動

.env に Google の API キーなど がある前提

  1. DB の起動
docker-compose up
  1. Web サーバーの起動
npm run dev

メモ

/src/generated/schema.graphql を Apollo Studio が参照している(/src/schema.ts を参照)

テスト用 Slack App https://api.slack.com/apps/A032UTELZ6E?created=1

https://github.com/dotansimha/graphql-code-generator/issues/7565

deploy

git push heroku main