From de29e6c780e5db9a42a297b6d1cd8686ebc5c4ab Mon Sep 17 00:00:00 2001 From: Welcome Date: Tue, 10 Feb 2026 15:25:49 +0200 Subject: [PATCH 1/3] Added basic user model --- js/landing-page.js | 8 ++++++++ js/models/user.js | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 js/models/user.js diff --git a/js/landing-page.js b/js/landing-page.js index e69de29..9d82986 100644 --- a/js/landing-page.js +++ b/js/landing-page.js @@ -0,0 +1,8 @@ +import User from "./models/user.js"; + +console.log("Hello"); + + +console.log(User.isUserNameUnique('galane')); + +console.log(User.generateUserId()); \ No newline at end of file diff --git a/js/models/user.js b/js/models/user.js new file mode 100644 index 0000000..183d1c0 --- /dev/null +++ b/js/models/user.js @@ -0,0 +1,23 @@ +import LocalStorageService from "../services/local-storage.js"; + +class User{ + constructor(username,password){ + + this.id=User.generateUserId(); + this.username=username; + this.password=password; + this.isLoggedIn=true; + this.lastSeen=Date.now(); + } + + static isUserNameUnique(username){ + let users=LocalStorageService.getUsers(); + return !(users.find(user=>user.username===username)); + } + + static generateUserId(){ + return LocalStorageService.getUsers().length+1; + } +} + +export default User; \ No newline at end of file From a8683a4c4951b336abef2e8c9d071218844a5500 Mon Sep 17 00:00:00 2001 From: Welcome Date: Tue, 10 Feb 2026 15:44:36 +0200 Subject: [PATCH 2/3] Added models for chat, and message --- index.html | 14 ++++++++++++++ js/landing-page.js | 8 -------- js/models/chat.js | 19 +++++++++++++++++++ js/models/group.js | 0 js/models/message.js | 9 +++++++++ js/services/local-storage.js | 9 ++++++++- 6 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 js/models/chat.js create mode 100644 js/models/group.js create mode 100644 js/models/message.js diff --git a/index.html b/index.html index e69de29..b6f5ea2 100644 --- a/index.html +++ b/index.html @@ -0,0 +1,14 @@ + + + + LocalChat + + + + + + + + + + \ No newline at end of file diff --git a/js/landing-page.js b/js/landing-page.js index 9d82986..e69de29 100644 --- a/js/landing-page.js +++ b/js/landing-page.js @@ -1,8 +0,0 @@ -import User from "./models/user.js"; - -console.log("Hello"); - - -console.log(User.isUserNameUnique('galane')); - -console.log(User.generateUserId()); \ No newline at end of file diff --git a/js/models/chat.js b/js/models/chat.js new file mode 100644 index 0000000..1456092 --- /dev/null +++ b/js/models/chat.js @@ -0,0 +1,19 @@ +class Chat{ + constructor(userId1,userId2){ + this.id=Chat.generateChatId(); + this.user1Typing=false; + this.user2Typing=false; + this.messages=[]; + } + + static generateChatId(userId1,userId2){ + if(userId1>userId2){ + return userId1+'-'+userId2; + } + else{ + return userId1+'-'+userId2; + } + } +} + +export default Chat; \ No newline at end of file diff --git a/js/models/group.js b/js/models/group.js new file mode 100644 index 0000000..e69de29 diff --git a/js/models/message.js b/js/models/message.js new file mode 100644 index 0000000..a3891e3 --- /dev/null +++ b/js/models/message.js @@ -0,0 +1,9 @@ +class Message{ + constructor(content,senderId,replyTo){ + this.id=Math.floor(Math.random()*99999); + this.content=content; + this.senderId=senderId; + this.replyTo=replyTo; + this.timestamp=Date.now(); + } +} \ No newline at end of file diff --git a/js/services/local-storage.js b/js/services/local-storage.js index e1b3771..735fb13 100644 --- a/js/services/local-storage.js +++ b/js/services/local-storage.js @@ -21,4 +21,11 @@ class LocalStorageService{ } -} \ No newline at end of file + static getUsers(){ + return JSON.parse(localStorage.getItem('users'))||[]; + } + +} + + +export default LocalStorageService; \ No newline at end of file From eae0b3793d7c16a3bd55916a17f62b92511dc1dc Mon Sep 17 00:00:00 2001 From: Welcome Date: Tue, 10 Feb 2026 16:27:06 +0200 Subject: [PATCH 3/3] Added session manager for log in and log out --- js/models/user.js | 4 ++-- js/services/local-storage.js | 4 ++-- js/services/session-manager.js | 37 ++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 js/services/session-manager.js diff --git a/js/models/user.js b/js/models/user.js index 183d1c0..62258b0 100644 --- a/js/models/user.js +++ b/js/models/user.js @@ -6,8 +6,8 @@ class User{ this.id=User.generateUserId(); this.username=username; this.password=password; - this.isLoggedIn=true; - this.lastSeen=Date.now(); + this.isLoggedIn=false; + this.isOnline=false; } static isUserNameUnique(username){ diff --git a/js/services/local-storage.js b/js/services/local-storage.js index 735fb13..4bed3e5 100644 --- a/js/services/local-storage.js +++ b/js/services/local-storage.js @@ -7,14 +7,14 @@ class LocalStorageService{ let users=JSON.parse(localStorage.getItem('users'))||[]; const user=new User(username,password); users.push(user); - localStorage.setItem(JSON.stringify(users)); + localStorage.setItem('users',JSON.stringify(users)); } static createChat(userId1,userId2){ let chats=JSON.parse(localStorage.getItem('chats')); let chat=new Chat(userId1,userId2); chats.push(chat); - localStorage.setItem(JSON.stringify(chats)); + localStorage.setItem('chats',JSON.stringify(chats)); } static createGroup(){ diff --git a/js/services/session-manager.js b/js/services/session-manager.js new file mode 100644 index 0000000..21d8efb --- /dev/null +++ b/js/services/session-manager.js @@ -0,0 +1,37 @@ +import LocalStorageService from "./local-storage.js"; + +class SessionManager{ + + static Login(username,password){ + let users=LocalStorageService.getUsers(); + user=users.find(user=>(user.username===username && user.password===password)); + if(user){ + user.isLoggedIn=true; + user.isOnline=true; + + sessionStorage.setItem('user',JSON.stringify(user)); + return user; + } + + return false; + } + + + static Logout(user){ + user.isLoggedIn=false; + user.isOnline=false; + sessionStorage.removeItem('user'); + } + + + static setTestValue(){ + sessionStorage.setItem('test','test value'); + } + + static getTestValue(){ + console.log(sessionStorage.getItem('test')); + } +} + + +export default SessionManager; \ No newline at end of file