Blockchain code Metaverse VR

SmartContract×VR×Crypto(570)

スポンサーリンク

//tips

//smart contract

まずはデータベースへのメッセージ登録の部分から設定していく。

Messageページは他のものとは異なりデータベースのコレクションとしてdirectmessageとして分離させており、その内容がninjaの中に格納されることに注意しながら設計する。

const colRef= await collection(firebaseApp, "directmessage")
const q = await query(colRef,where("userid","==",id))

localStorageに格納しているTowhomのuseridに向けてメッセージを送ることになるので、テキストフォームの内容は下記のようにしておいた。mixlist.mapをレンダリングの中で何度も使うのはどうかと思うので変数に格納する関数を別途作るか考えておく。

<form noValidate autoComplete="off" onSubmit={handleOnMessage}>

{mixlist.map((item,index) => (
<div key={index} >
{item.userid==localStorage.getItem('authuserid')&&(
<Typography>
To: {item.username}
</Typography>
)}
</div>
))
}

<TextField
onChange={(e)=>setUmail(e.target.value)}
variant="outlined"
color="secondary"
fullWidth
required
/>

<Box >
<Button
type="submit"
varient="contained"
>
submit
</Button>
</Box>

</form>

handleOnMessageの編集に移る。

ダイレクトメッセージは過去に実施されていない場合もあるので、mixlistとlocalstorageのget内容で抽出する形にするのが安全。

新規メッセージつの追加内容は

userid:,
username:,
date:Date.now(),
mail:,
Message: email,
Towhom:localStorage.getItem('Towhom')

で考えていたのでベースデータからmail情報も引っ張ってくるように設定。

pile.mail = data.mail?data.mail:null

下記のようにメッセージをデータベースに登録する関数を設定。

async function handleOnMessage(e) {
e.preventDefault();

//メッセージ内容
const message=umail

//'authuserid'の登録は事前にチェック 現在ログインではなく、ログインかつ自身のページへの遷移でauthuseridが再記録されるため
//まずは送付側からドキュメント生成し文言を配列として追加
mixlist.map((item) => {
if(item.userid==localStorage.getItem('authuserid')){

addDoc(mailRef,{

userid:item.userid,
username:item.username,
date:Date.now(),
mail:item.mail,
Message: message,
Towhom:localStorage.getItem('Towhom')
})

}
})

router.reload()

}

無事に登録は確認できたが Towhom:Towhomがnullになってしまっている。

一度変数に入れ込んであげるようにする。

const Towhom=localStorage.getItem('Towhom')

[id]ページに戻りメッセージボタンをクリックしようとしたら。

Debankのdeposit.jsでエラーが発生しているよう。また、改変があったのか確認する。

ネット接続不良が問題だった。

きちんとデータベースにtowhomも表示されるようになった。

今度は登録されているメッセージの内容を全て表示させてみる。ここで初めてdirectmessageの方のコレクションデータを使用する。

{ninja.map((item,index) => (
<div key={index} >
<Typography className={classes.titlebackshape}>
{item.username}: {item.Message}
</Typography>
</div>
))
}

きちんとメッセージを抽出することができた。

他のuseridのメッセージも試しに登録してしまう。ログアウトと再ログイン認証の手間がかかるので、これはデータベースに直接登録する。

登録するとデータベースからの取得の段階でuseridで制限をかけてしまっているので、こちらを少し拡張しないと自分が受け取る場合のメッセージを表示させることができない。全部を取得するのはたとえメッセージでも膨大すぎるので控えたい。

const q = await query(colRef,where("userid","==",id))

複合クエリに拡張する。

https://firebase.google.com/docs/firestore/query-data/queries

ここには&の場合のみしか記述がない。orの場合の処理を探すもなし。

userid==1 or Towhom==“1”

しょうがないので、論理式を利用して、これを!(user!=1&&Towhom!=“1”)に変換しようとしたが、全体を逆にするものがない。

しょうがないので二つのwhereで抜き出したものを融合させる処理を探す。

https://stackoverflow.com/questions/59611888/how-do-i-retrieve-data-from-firestore-using-an-or-operator-in-javascript

https://medium.com/firebase-tips-tricks/how-to-combined-two-firestore-queries-to-simulate-a-logical-or-query-27d28a43cb2d

const citiesArray = capitalCitiesArray.concat(italianCitiesArray);が使えそう。

こちらの設計の取り込みを行う。

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-Blockchain, code, Metaverse, VR
-, ,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.