feat(room): add WS events for AI config and repo lifecycle changes

Add RoomAiUpdated, RepoCreated, RepoUpdated, RepoDeleted event types.
Publish RoomAiUpdated after room_ai upsert/delete and repo events
after repo create/update. Always set model_name in AI list response
(fallback to "AI {uuid}" when model lookup fails) so frontend never
displays a raw UUID.
This commit is contained in:
ZhenYi 2026-04-26 23:58:33 +08:00
parent 283835eb26
commit d72019e39f
4 changed files with 62 additions and 4 deletions

View File

@ -28,9 +28,10 @@ impl RoomService {
.await
.ok()
.flatten()
.map(|m| m.name);
.map(|m| m.name)
.unwrap_or_else(|| format!("AI {}", model.model));
let mut resp = super::RoomAiResponse::from(model);
resp.model_name = model_name;
resp.model_name = Some(model_name);
responses.push(resp);
}
@ -113,9 +114,22 @@ impl RoomService {
.await
.ok()
.flatten()
.map(|m| m.name);
.map(|m| m.name)
.unwrap_or_else(|| format!("AI {}", saved.model));
let mut resp = super::RoomAiResponse::from(saved);
resp.model_name = model_name;
resp.model_name = Some(model_name);
if let Ok(room) = self.find_room_or_404(room_id).await {
self.publish_room_event(
room.project,
super::RoomEventType::RoomAiUpdated,
Some(room_id),
None,
None,
None,
)
.await;
}
Ok(resp)
}
@ -132,6 +146,19 @@ impl RoomService {
room_ai::Entity::delete_by_id((room_id, model_id))
.exec(&self.db)
.await?;
if let Ok(room) = self.find_room_or_404(room_id).await {
self.publish_room_event(
room.project,
super::RoomEventType::RoomAiUpdated,
Some(room_id),
None,
None,
None,
)
.await;
}
Ok(())
}
}

View File

@ -35,6 +35,10 @@ pub enum RoomEventType {
ReactionRemoved,
TypingStart,
TypingStop,
RoomAiUpdated,
RepoCreated,
RepoUpdated,
RepoDeleted,
}
impl RoomEventType {
@ -59,6 +63,10 @@ impl RoomEventType {
RoomEventType::ReactionRemoved => "reaction_removed",
RoomEventType::TypingStart => "typing_start",
RoomEventType::TypingStop => "typing_stop",
RoomEventType::RoomAiUpdated => "room_ai_updated",
RoomEventType::RepoCreated => "repo_created",
RoomEventType::RepoUpdated => "repo_updated",
RoomEventType::RepoDeleted => "repo_deleted",
}
}
@ -83,6 +91,10 @@ impl RoomEventType {
"reaction_removed" => Some(RoomEventType::ReactionRemoved),
"typing_start" => Some(RoomEventType::TypingStart),
"typing_stop" => Some(RoomEventType::TypingStop),
"room_ai_updated" => Some(RoomEventType::RoomAiUpdated),
"repo_created" => Some(RoomEventType::RepoCreated),
"repo_updated" => Some(RoomEventType::RepoUpdated),
"repo_deleted" => Some(RoomEventType::RepoDeleted),
_ => None,
}
}

View File

@ -465,6 +465,16 @@ impl AppService {
}
active.update(&txn).await?;
txn.commit().await?;
self.room.publish_room_event(
repo.project,
room::RoomEventType::RepoUpdated,
None,
None,
None,
None,
).await;
Ok(())
}
}

View File

@ -337,6 +337,15 @@ impl AppService {
)
.await;
self.room.publish_room_event(
project.id,
room::RoomEventType::RepoCreated,
None,
None,
None,
None,
).await;
Ok(ProjectRepoCreateResponse {
uid: repo.id,
repo_name: repo.repo_name,