refactor: store all known as map for access

This commit is contained in:
efim 2023-11-16 05:45:57 +00:00
parent 9f4fe20979
commit f8db7c14c8
2 changed files with 13 additions and 10 deletions

View File

@ -13,7 +13,7 @@ type Room struct {
CurrentSpeaker PersonId // i guess let's set to zero value when it's noone from the room CurrentSpeaker PersonId // i guess let's set to zero value when it's noone from the room
// all people that were visiting room before, spectating now or being a participant // all people that were visiting room before, spectating now or being a participant
// used to check person password against the name // used to check person password against the name
AllKnownPeople []Person AllKnownPeople map[PersonId]Person
// person ids of people who are currently participating in the discussion at the table // person ids of people who are currently participating in the discussion at the table
// TODO for now peson in seated at join and removed at logout in routes // TODO for now peson in seated at join and removed at logout in routes
Paricipants []PersonId Paricipants []PersonId
@ -35,7 +35,7 @@ func (r *Room)InitMaps() {
// if you are speaking - change nothing // if you are speaking - change nothing
// if nobody is speaking, set this person as a first speaker // if nobody is speaking, set this person as a first speaker
func (r *Room) RaiseHand(p PersonId, gesture HandGesture) Room { func (r *Room) RaiseHand(p PersonId, gesture HandGesture) Room {
if (r.CurrentSpeaker == p) { if r.CurrentSpeaker == p {
// if person already speaking, should first end speaking // if person already speaking, should first end speaking
return *r return *r
} }
@ -167,10 +167,12 @@ func (r *Room) Equal(other *Room) bool {
if r.Name != other.Name || r.PasswordHash != other.PasswordHash || r.CurrentSpeaker != other.CurrentSpeaker { if r.Name != other.Name || r.PasswordHash != other.PasswordHash || r.CurrentSpeaker != other.CurrentSpeaker {
return false return false
} }
if !slices.Equal(r.AdminIds, other.AdminIds) || !slices.Equal(r.Paricipants, other.Paricipants) || !slices.Equal(r.AllKnownPeople, other.AllKnownPeople) { if !slices.Equal(r.AdminIds, other.AdminIds) || !slices.Equal(r.Paricipants, other.Paricipants) {
return false return false
} }
if !maps.Equal(r.ParticipantHands, other.ParticipantHands) || !maps.Equal(r.Marks, other.Marks) { if !maps.Equal(r.ParticipantHands, other.ParticipantHands) ||
!maps.Equal(r.Marks, other.Marks) ||
!maps.Equal(r.AllKnownPeople, other.AllKnownPeople) {
return false return false
} }
return true return true
@ -188,7 +190,7 @@ const (
) )
func GestureFromInt(num int) (HandGesture, bool) { func GestureFromInt(num int) (HandGesture, bool) {
if (num >= int(ChangeTopic) && num <= int(Meta)) { if num >= int(ChangeTopic) && num <= int(Meta) {
return HandGesture(num), true return HandGesture(num), true
} }
return HandGesture(0), false return HandGesture(0), false

View File

@ -135,7 +135,8 @@ func createRoomHandler(templateFs *embed.FS,
PasswordHash: r.PostFormValue("roomPassword"), // TODO hash the password, not to store PasswordHash: r.PostFormValue("roomPassword"), // TODO hash the password, not to store
AdminIds: []rooms.PersonId{person.Id}, AdminIds: []rooms.PersonId{person.Id},
Paricipants: []rooms.PersonId{person.Id}, Paricipants: []rooms.PersonId{person.Id},
AllKnownPeople: []rooms.Person{person}, AllKnownPeople: map[rooms.PersonId]rooms.Person{
person.Id: person},
} }
err = roomsM.Save(newRoom) err = roomsM.Save(newRoom)
if err != nil { if err != nil {
@ -247,7 +248,7 @@ func joinRoomHandler(templateFs *embed.FS,
err := roomsM.Update(r.Context(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) { err := roomsM.Update(r.Context(), room.Name, func(fromRoom rooms.Room) (toRoom rooms.Room) {
log.Printf("/login/join about to modify room %+v", fromRoom) log.Printf("/login/join about to modify room %+v", fromRoom)
toRoom = fromRoom toRoom = fromRoom
toRoom.AllKnownPeople = append(toRoom.AllKnownPeople, person) toRoom.AllKnownPeople[person.Id] = person
log.Printf("/login/join will save %+v", toRoom) log.Printf("/login/join will save %+v", toRoom)
return toRoom return toRoom
}) })