Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
健杭 徐
intern_project_frontend_backend
Commits
1d85ac6b
Commit
1d85ac6b
authored
Jun 21, 2025
by
健杭 徐
Browse files
get method
parent
6152d12b
Changes
2
Hide whitespace changes
Inline
Side-by-side
myproject/chatroom/main.go
View file @
1d85ac6b
...
...
@@ -142,6 +142,10 @@ func AddMessage(c *gin.Context) {
"INSERT INTO messages (roomId, profile_id, sender, content, timestamp) VALUES ($1, $2, NOW()) RETURNING message_id"
,
message
.
RoomId
,
message
.
Profile_id
,
message
.
Sender
,
message
.
Content
,
)
.
Scan
(
&
messageId
)
_
,
err
=
db
.
Exec
(
"UPDATE rooms SET last_sender = $1, last_content = $2, last_time = NOW() WHERE room_id = $3"
,
message
.
Sender
,
message
.
Content
,
message
.
RoomId
,
)
if
err
!=
nil
{
c
.
JSON
(
500
,
Response
{
Code
:
500
,
Msg
:
"Failed to add message"
,
Data
:
nil
})
return
...
...
@@ -157,7 +161,34 @@ func AddMessage(c *gin.Context) {
}
func
GetMessageList
(
c
*
gin
.
Context
)
{
// 处理获取消息列表的逻辑
roomId
:=
c
.
Query
(
"roomId"
)
if
roomId
==
""
{
c
.
JSON
(
400
,
Response
{
Code
:
400
,
Msg
:
"Room ID is required"
,
Data
:
nil
})
return
}
rows
,
err
:=
db
.
Query
(
"SELECT profile_id, sender, content, time FROM messages WHERE room_id = $1 ORDER BY time ASC"
,
roomId
)
if
err
!=
nil
{
c
.
JSON
(
500
,
Response
{
Code
:
500
,
Msg
:
"Failed to retrieve messages"
,
Data
:
nil
})
return
}
defer
rows
.
Close
()
var
messages
[]
Message
for
rows
.
Next
()
{
var
msg
Message
if
err
:=
rows
.
Scan
(
&
msg
.
Profile_id
,
&
msg
.
Sender
,
&
msg
.
Content
,
&
msg
.
Timestamp
);
err
!=
nil
{
c
.
JSON
(
500
,
Response
{
Code
:
500
,
Msg
:
"Failed to scan message"
,
Data
:
nil
})
return
}
messages
=
append
(
messages
,
msg
)
}
c
.
JSON
(
200
,
Response
{
Code
:
0
,
Msg
:
"Messages retrieved successfully"
,
Data
:
messages
,
})
}
func
RoomMessageUpdate
(
c
*
gin
.
Context
)
{
...
...
@@ -166,20 +197,22 @@ func RoomMessageUpdate(c *gin.Context) {
func
createTable
()
{
query
:=
`
CREATE TABLE IF NOT EXISTS rooms (
room_id SERIAL PRIMARY KEY,
room_name VARCHAR(100) NOT NULL UNIQUE,
last_sender VARCHAR(100),
last_content TEXT,
last_time TIMESTAMP
);
CREATE TABLE IF NOT EXISTS messages (
message_id SERIAL PRIMARY KEY,
room_id INT NOT NULL,
profile_id INT NOT NULL,
sender VARCHAR(100) NOT NULL,
content TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS rooms (
room_id SERIAL PRIMARY KEY,
room_name VARCHAR(100) NOT NULL
LAST_MESSAGE TEXT,
LAST_MESSAGE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP
"time" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (room_id) REFERENCES rooms(room_id)
);
`
_
,
err
:=
db
.
Exec
(
query
)
...
...
myproject/my-app/src/app/pages/ChatRoom/ChatRoom.tsx
View file @
1d85ac6b
'
use client
'
;
import
"
./ChatRoom.css
"
;
import
React
,
{
useState
}
from
"
react
"
;
import
React
,
{
useEffect
,
useState
}
from
"
react
"
;
// profile
const
Profile
=
[
'
https://pic4.zhimg.com/v2-c5a0d0d57c1a85c6db56e918707f54a3_r.jpg
'
,
...
...
@@ -46,7 +46,7 @@ if (RoomName.length > 0) {
RoomRightNow
.
roomName
=
RoomName
[
0
].
roomName
;
}
function
RoomEntry
()
{
function
RoomEntry
(
{
rooms
,
onRoomClick
}
:
{
rooms
:
RoomEntryProps
[],
onRoomClick
:
(
roomId
:
number
,
roomName
:
string
)
=>
void
}
)
{
return
(
<
div
className
=
"chat-room-nav"
>
<
div
className
=
"sidebar-action"
>
...
...
@@ -58,8 +58,8 @@ function RoomEntry () {
</
div
>
<
div
className
=
"chat-list"
>
{
R
oom
Name
.
map
((
room
)
=>
(
<
div
className
=
"chat-item"
key
=
{
room
.
roomId
}
onClick
=
{
()
=>
handle
RoomClick
(
room
.
roomId
,
room
.
roomName
)
}
>
{
r
oom
s
.
map
((
room
)
=>
(
<
div
className
=
"chat-item"
key
=
{
room
.
roomId
}
onClick
=
{
()
=>
on
RoomClick
(
room
.
roomId
,
room
.
roomName
)
}
>
<
img
src
=
{
RoomProfile
}
alt
=
"Avatar"
className
=
"avatar"
/>
<
div
className
=
"chat-info"
>
<
h3
>
{
room
.
roomName
}
</
h3
>
...
...
@@ -83,11 +83,7 @@ function handleRoomClick(roomId: number, roomName: string) {
}
function
InputRoomNameArea
()
{
const
[
roomId
,
setRoomId
]
=
useState
(
0
);
function
handleRoomIdChange
()
{
setRoomId
(
roomId
+
1
);
}
// This component is used to input the new room name
return
(
<
div
className
=
"open"
>
<
div
className
=
"roomName-input"
>
...
...
@@ -99,7 +95,6 @@ function InputRoomNameArea() {
onKeyUpCapture
=
{
(
e
:
React
.
KeyboardEvent
<
HTMLInputElement
>
)
=>
{
if
(
e
.
key
===
'
Enter
'
)
{
addNewRoom
();
handleRoomIdChange
();
}
else
if
(
e
.
key
===
'
Escape
'
)
{
closeOpenDiv
();
...
...
@@ -109,7 +104,6 @@ function InputRoomNameArea() {
<
div
className
=
"button-container"
>
<
button
className
=
"create-button"
onClick
=
{
()
=>
{
addNewRoom
();
handleRoomIdChange
();
}
}
>
Submit
</
button
>
<
button
className
=
"cancel-button"
onClick
=
{
closeOpenDiv
}
>
Cancel
</
button
>
</
div
>
...
...
@@ -292,9 +286,55 @@ function addNewComment(roomId: number, sender: string, content: string) {
}
export
default
function
ChatRoom
()
{
const
[
rooms
,
setRooms
]
=
useState
<
RoomEntryProps
[]
>
([]);
const
[
currentRoom
,
setCurrentRoom
]
=
useState
<
MessageProps
|
null
>
(
null
);
useEffect
(()
=>
{
const
fetchRooms
=
async
()
=>
{
try
{
const
response
=
await
fetch
(
"
http://localhost:8080/room/list
"
);
const
result
=
await
response
.
json
();
if
(
result
.
code
===
0
)
{
setRooms
(
result
.
data
);
}
}
catch
(
error
)
{
console
.
error
(
"
Error fetching rooms:
"
,
error
);
}
}
fetchRooms
();
},
[]);
useEffect
(()
=>
{
if
(
currentRoom
?.
roomId
)
{
const
fetchMessages
=
async
()
=>
{
try
{
const
response
=
await
fetch
(
`http://localhost:8080/room/message/list?room_id=
${
currentRoom
.
roomId
}
`
);
const
result
=
await
response
.
json
();
if
(
result
.
code
===
0
)
{
setCurrentRoom
(
prevRoom
=>
({
...
prevRoom
!
,
messages
:
result
.
data
}));
}
}
catch
(
error
)
{
console
.
error
(
"
Error fetching messages:
"
,
error
);
}
fetchMessages
();
}
}
},
[
currentRoom
?.
roomId
]);
const
handleRoomClick
=
(
roomId
:
number
,
roomName
:
string
)
=>
{
setCurrentRoom
({
roomId
:
roomId
,
roomName
:
roomName
,
messages
:
[]
});
}
return
(
<
div
className
=
"chat-room"
>
<
RoomEntry
/>
<
RoomEntry
rooms
=
{
rooms
}
onRoomClick
=
{
handleRoomClick
}
/>
<
MessageItem
roomId
=
{
RoomRightNow
.
roomId
}
roomName
=
{
RoomRightNow
.
roomName
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment