<prompt> Tengeneza programu ya gumzo kwa kutumia TypeScript na WebSockets ambapo watumiaji wanaweza kujiunga na vyumba na kutuma ujumbe kwa kila mmoja. Programu inapaswa pia kuhifadhi historia ya ujumbe katika hifadhidata ya PostgreSQL.  <response>: Ili kubuni programu ya gumzo kwa kutumia TypeScript, WebSockets, na PostgreSQL, utahitaji kufuata hatua hizi:1. Weka muundo wa mradi2. Sakinisha utegemezi3. Sanidi seva ya WebSocket4. Tekeleza mifano ya hifadhidata na unganisho5. Unda uthibitishaji wa mtumiaji na usimamizi wa chumba6. Shikilia ujumbe wa wakati halisi ukitumia WebSockets7. Jaribu maombiWacha tupitie kila hatua kwa undani.1. Sanidi muundo wa mradi:Unda saraka mpya ya mradi wako na uanzishe na npm:programu ya mazungumzo ya mkdircd chat-programunpm init -ySasa, tengeneza saraka na faili zifuatazo ndani ya folda ya mradi wako:- src - index.ts - programu.ts - usanidi -db.ts - watawala - authController.ts - roomController.ts - mifano - mtumiaji.ts - chumba.ts - ujumbe.ts - matumizi - jwt.ts2. Sakinisha vitegemezi:Sakinisha vifurushi vinavyohitajika kwa mradi wako:npm install express ws jsonwebtoken bcryptjs pg sequese reflect-metadata typescript ts-node typesnode typesexpress typesws typesjsonwebtoken typesbcryptjs typespg typessequelize3. Sanidi seva ya WebSocket:Katika srcapp.ts, sanidi seva ya Express pamoja na usaidizi wa WebSocket: chapakuagiza Express kutoka kueleza;agiza Seva kama WebSocketServer kutoka ws;kuagiza http kutoka http;const app express;const server http.createServerprogramu;const wss WebSocketServer mpya seva ;app.useexpress.json; Ongeza njia hapaserver.sikiliza3000, console.logSeva inasikiliza kwenye bandari 3000;;safirisha wss chaguo-msingi;4. Tekeleza miundo ya hifadhidata na muunganisho:Sanidi muunganisho wa PostgreSQL katika srcconfigdb.ts: chapaagiza Sequelize kutoka sequelize;const sequelize Sequelize mpyadatabase, username, password, mwenyeji: localhost, lahaja: postgres;usafirishaji chaguo-msingi mfuatano;Unda miundo ya Mtumiaji, Chumba, na Ujumbe katika faili zao husika chini ya srcmodelis.5. Unda uthibitishaji wa mtumiaji na usimamizi wa chumba:Tekeleza mantiki ya usajili wa mtumiaji, kuingia, na kuundakuunganisha chumba katika faili za authController.ts na roomController.ts.6. Hushughulikia ujumbe wa wakati halisi na WebSockets:Katika srcindex.ts, leta seva yako ya WebSocket na ushughulikie miunganisho na ujumbe unaoingia: chapaingiza wss kutoka kwa .app;agiza handleMessage kutoka .controllersmessageController;wss.onmuunganisho, ws ws.onujumbe, async data jaribu const messageData JSON.parsedata.toString; subiri handleMessagews, messageData; kukamata kosa console.kosakosa; ;;Tekeleza kitendakazi cha handleMessage katika faili ya messageController.ts ili kuchakata ujumbe unaoingia, kuzihifadhi kwenye hifadhidata, na kuzitangaza kwa watumiaji wengine katika chumba kimoja.7. Jaribu maombi:Endesha programu yako ya TypeScript kwa kutumia ts-node:npx ts-nodi srcindex.tsSasa unaweza kujaribu programu yako ya gumzo kwa kuiunganisha kwa kutumia kiteja cha WebSocket au kuunda sehemu ya mbele inayounganishwa na seva yako. 