techcareer.net - Socket.io - Bootcamp

Sonradan eklenen kütüphaneler

cookie-parser

$ npm install cookie-parser $ npm install --save @types/cookie-parser

crypto-js

$ npm install crypto-js $ npm install --save @types/crypto-js

axios

$ npm install axios

Projede:

  • Express-Gateway kullanmak için projedeki user, tweet, chat controller 3 klasöre ayrılmış sonrasında https://www.express-gateway.io/getting-started/ sitesindeki yollar izlenerek microservice mimarisine geçildi. 8080 portuyla User ve Tweet servisleri çalışmış olup, Socket.io 8003 portuyla kullanılmıştır.
Screenshot
Gateway
  • Client olarak test etmek için POSTMAN ile Switch Request Type "Socket-IO" yapılarak events kısmında user, join group, user joined, message, leave group, disconnect group, user left responseları dinlendi.
  • Message için Arg 1 (userID) - Arg 2 (chatID) - Arg 3(your_message)
  • Kullanıcı isterse 'leave group' ile socket üzerinden gruptan ayrılabilir ve datadan ismi silinir.
Screenshot
Socket Test AdminSocket Test User
  • Pagination kısmında dummy datası için axios kütüphanesi kullanılarak internetten 500 kayıt çağrıldı. startIndex, endIndex değişkenleriyle farklı pageIndex ve pageSize değerlerinde dataların filtrelenmesi sağlandı.
  • jwt anahtarlarını manuel girmemek için AES şifrelemesi ile 30 dakikalık cookie session oluşturuldu.
  • Kişisel tercihler için user.data içerisine array preferences() eklendi ve pref.controller oluşturuldu. Kullanıcı user/preferences yoluyla "otpLogin": true or false yapabilmektedir.
  • user.controller kısmında kullancı kayıt olurken varsayılan olarak preferencese eklenmek üzere "otpLogin=False" oluşturuldu.

Controller üzerinde kullanılan parametreler

Spoiler

POST: /user/register

{
  "username": "your_username",
  "password": "your_password"
}

POST: /user/verify

{
  "username": "your_username",
  "otpCode": "your_otp_code"
}

POST: /user/login

{
    "username":"your_username",
    "password": "your_password" // otpLogin = false
    "OTP": "your_otp_code" // otpLogin = true
}

POST: /user/preferences

{
    "otpLogin": true or false
}

POST: /user/delete

{
  "userID": "UUID"
}

POST: /user/update

{
  "userID": "UUID",
  "password": "new_password",
  "birthday": "new_birthday"
}

POST: /chat/create/group

{
  "groupName": "group_name"
}

POST: /chat/join/group

{
  "chatID": "_id"
}

POST: /chat/delete

{
  "chatID": "_id"
}

POST: /tweet/new

{
  "content": "your_tweet"
}

POST: /tweet/update

{
  "tweetID": "UUID",
  "content": "your_updated_tweet"
}

POST: /tweet/delete

{
  "tweetID": "UUID",
  "content": "your_deleted_tweet"
}

POST: /tweet/tweets

{
  // All tweets
}

GET: /tweet/usertweet

{
  // User tweets
}

POST: /tweet/like

{
  "tweetID": "UUID"
}

POST: /tweet/comment

{
  "tweetID": "UUID",
  "comment": "your_comment"
}