owned this note
owned this note
Published
Linked with GitHub
# PRTIMESハッカソン
## 自己紹介
- 敬語はやめましょ!
- うすいりく
- フロントエンド
- javaScript
- React
- 呼び名:りく、うすい
- いのうえようすけ(ようかん)
- フロントエンド
- TypeScript
- Nuxt
- 呼び名:ようかん
- むらゆう
- フロントエンド
- もともとふろんと やってた
- Cotlin
- Reactメイン
- いわたりお
- ばっくえんど
- PHP(ララベル)
- 呼び名:りお,いわた
- おおたけいすけ
- バックエンド(GO,PHP)
- mariadb
- おおた
- 呼び名:けいすけ、太田
## 案出し
- いわっち
- 老人向けのマッチングアプリ
- 50代以上とかの出会いをサジェストして第二の人生
- 自営業専用の広告プラットフォーム
- 空き家問題系
- GoogleMapとかでは空き家の判定はできない
- 移住先を検索する人向けの サービス
- https://scrapbox.io/inoue2002/%E6%97%A5%E6%9C%AC%E7%A7%BB%E4%BD%8F%E4%BD%93%E9%A8%93%E3%83%AA%E3%82%B9%E3%83%882023%2F1
- なんか近いサービスを発見した
- https://tabisumu.jp/
- りく
- 地元の習い事
- 地元のニュース
- けいすけ
- 民泊+体験とかの検索サービス
- airbnbっぽい?
- 本当に家に泊まる
- booking.com
- 移住先をあつめる系のサービス
- 既存のものがある場合、どう差別化をしていくか
- 地元のオリジナルマップを作る
- 移住先を検索するサービス
- 移住先を教えてあげたい!
- (移住した後のトラブル云々の コンテンツ)
- web3系と絡めると?
- 投稿するメリット
- POAP?
- 誰が使うのか
- ユーザー同士が使う?
- 自治体が登録してユーザーが見る?
- 地元→暖かい→情報発信
- 自分が知りたければ
- 聞かれたら教えたくなる
- インセンティブ
- 謎コイン(貯めたくなる)
- 質問形式
- 自分しかしらないだろ系で
- 共感した人が少ないほど強い
- 意外と胸を張って紹介できるものが無いので
- まずはスマホ対応を目指したい!
## 要件定義みたいな
- 機能
- ログイン
- 「地元の人しか投稿できない」
- 投稿
- スポットの紹介(位置情報)(コインをもらえる) / 教えてください系(コインを賭けられる?) /
- 修正 / 削除
- マップで近くのスポットが見れる
- 現在地ベースで良さそう
- 自分のいるところから近い順
- 検索
- タグ検索
- (フリーテキストもあれば便利そう)
- API
- ユーザープロフィール
- 地元マスター(バッチ的な?)
- ユーザーの投稿が紐づく
- 必須機能:
- ログイン(ユーザー名/アイコン画像/地元(0県市)/誕生日/性別(男,女,回答しない))
- 投稿
- スポットの投稿
- タグ
- Food / Shop / View / その他
- 名前
- 位置情報(緯度軽度 or 近くのオブジェクト)
- 住所(緯度軽度から計算する)
- 本文(textarea)
- 画像
- 投稿時間
- いいね
- マップ
- ピンがさされる
- ピンがクリックされると詳細ができる
- 近くのオブジェクトは赤色ピン
- 緯度軽度は青色ピン
- フィルター
- 赤色ピン
- 青色ピン
- タグ
- ex) 赤色ピン かつ Food
- 検索(リストで表示)
- フリーテキスト
- ex) 静岡県 牧之原市 ラーメン
-本文と名前から取得する
- フィルター
- タグ
- プロフィール
- アカウント情報が見れる
- 自分の場合はプロフィールを変更できる
- 自分の投稿並んでる
- 削除
- コインの枚数表示
- コイン
- 投稿といいねでコインがもらえる
- やれたらいいね
- 投稿
- 教えてくださいが投稿できる(どこでも)
- 消費するコインを設定できる
- しつもん が届いて、回答できる(地元だけ)
- 1番はコインをもらえる
- 検索
- PRTIMESの投稿が混じる
- プロフィール
- 地元の編集制限
- 週1までとか?
- 過去の投稿を編集できる
- 回答の優先度
## データ構造
### ER図
https://drive.google.com/file/d/1k8K-E8qVaPaBCn0lcGqjSQL-lYh7mWpp/view?usp=sharing
### User
#### ユーザー情報クラス
- id
- number
- profileImageUrl
- string
- displayName
- string
- prefecture
- string
- ex ('北海道',"東京都","滋賀県")
- city
- string
- ex ("大津市","吹田市","港区","XX町")
- birth
- date
- gender
- 0 | 1 | 2 as number
- 0 男
- 1 女
- 2 その他
### Favorite
#### ユーザーとレポートの関係性を示すクラス
- userId
- number(User.id)
- reportId
- number(Report.id)
- isFavorite
- boolean
### Report
#### 投稿レポート情報クラス
- id
- number
- title
- string
- tags
- array{string}
- 配列型は、色々と都合が悪いので変更したい(保存形式の問題)
- 渡す時には、配列型に直す
- content
- string
- max 300 文字
- address
- string
- lat
- number
- lng
- number
- imageUrls
- array{string}
- 配列型は、色々と都合が悪いので変更したい(保存形式の問題)
- 渡す時には、配列型に直す
- created_at
- date
- author
- number (User.id)
### Question
#### 質問情報クラス
- id
- number
- prefecture
- string
- ex ('北海道',"東京都","滋賀県")
- city
- string
- ex ("大津市","吹田市","港区","XX町")
- author
- number(User.id)
- reward
- number
- first answerに付与するコイン数
- created_at
- Date
- content
- string
- max 300
### Answer
#### 回答情報クラス
- id
- number
- questionId
- number(Question.id)
- userId
- number(User.id)
- created_at
- Date
- content
- string
- max 300
### CoinLog
#### 所持コイン変更ログクラス
- id
- number
- userId
- number
- amount
- number
- 取引額
- マイナスも含む
- created_at
- Date
### Report_tag
#### レポートについているタグを管理するクラス
- tag_id
- number(Tag.id)
- report_id
- number(Report.id)
- isExist
- boolean
### Tag
#### タグクラス
- id
- number
- name
- string
- ex ("Food","View","Shop","other")
### ImageUrl
#### レポートに添付されている画像を管理するクラス
- id
- number
- report_id
- number(Report.id)
- ImageUrl
- string
## API仕様
- お気に入り追加
- Favoriteされた投稿にコインを配布する
- ユーザーのFavoriteをアップデートする
- Favoriteの追加かbooleanの変更
- お気に入り削除
- ユーザーのFavoriteをアップデート
- Favoriteかbooleanの変更
- 質問の投稿
- 質問の削除
- スポットの投稿
- レスポンスで もらうコインをもらう
- 緯度軽度から住所を計算する(フロントで行ってAPIは受け取るだけ)
- スポットの削除
- ユーザー情報の取得(ログイン時)
- コインログ
- お気に入り
- 質問
- 投稿
- 投稿更新
- 投稿の更新だけをもらう
- プロフィールの編集
- なまえ
- 画像
- 検索
- フリーテキストに合致するものを全部返す
- (アカウントの削除)
## エンドポイント
- `/favorite`
- POST
- `{
token:xxxxxxx ,reportId:yyyyy
}`
- そのユーザーがすでにFavoriteしてるかどうか判定
- booleanの変更(true)
- なかった場合は追加する(booleanはtrue)
- レスポンス
- `{}`
- 200
- `/favorite`
- DELETE
- `{
token:xxxxxxx ,reportId:yyyyy
}`
- DBをレコードを消すわけではなく、booleanを変更する(false)
- レスポンス
- `{}`
- 200
- `/question`
- POST
- `{
token:xxxxxxx ,...QUESTION
}`
- レスポンス
- `{}`
- 200
- `/question`
- DELETE
- `{
token:xxxxxxx ,questionId:xxxxx
}`
- レスポンス
- `{}`
- 200
- `/report`
- レポートを投稿する
- POST
- `{
token:xxxxxxx ,...REPORT
}`
- レスポンス
- `{}`
- 200
- `/report`
- レポートの削除
- DELETE(クエリパラメータに乗せて)
- `{
token:xxxxxxx ,reportId:zzzzzzz
}`
- レスポンス
- `{}`
- 200
- `/user/login`
- ログイン時の情報を全て返す
-`{
token:xxxxxxx
}`
- レスポンス
- `{...User,
...Report(地元で検索して最大20件),
...CoinLog(自分のもの),
...Favorite(IDだけではなくコンテンツも含む),
...Question(自分に当てられたもの = 地元)
}`
- usersテーブルに一致するuser_idが存在しなかった場合
- `/report?token=xxxxxxxx&address=xxxxx
- GET
- 新規レポートの最新更新
- レスポンス
- `{...Report(最新の20件)}`
- `/user`
-~~PUT~~→POST
- `{
token:xxxxxxx ,
name:xxxx,
}`
- ユーザー情報のアップデート